veloren_voxygen/audio/sfx/event_mapper/
mod.rs

1mod block;
2mod campfire;
3mod combat;
4mod movement;
5
6use client::Client;
7use common::terrain::TerrainChunk;
8use common_state::State;
9
10use block::BlockEventMapper;
11use campfire::CampfireEventMapper;
12use combat::CombatEventMapper;
13use movement::MovementEventMapper;
14
15use super::SfxTriggers;
16use crate::{
17    AudioFrontend,
18    scene::{Camera, Terrain},
19};
20
21trait EventMapper {
22    fn maintain(
23        &mut self,
24        audio: &mut AudioFrontend,
25        state: &State,
26        player_entity: specs::Entity,
27        camera: &Camera,
28        triggers: &SfxTriggers,
29        terrain: &Terrain<TerrainChunk>,
30        client: &Client,
31    );
32}
33
34pub struct SfxEventMapper {
35    mappers: Vec<Box<dyn EventMapper>>,
36}
37
38impl SfxEventMapper {
39    pub fn new() -> Self {
40        Self {
41            mappers: vec![
42                Box::new(CombatEventMapper::new()),
43                Box::new(MovementEventMapper::new()),
44                Box::new(BlockEventMapper::new()),
45                Box::new(CampfireEventMapper::new()),
46            ],
47        }
48    }
49
50    pub fn maintain(
51        &mut self,
52        audio: &mut AudioFrontend,
53        state: &State,
54        player_entity: specs::Entity,
55        camera: &Camera,
56        triggers: &SfxTriggers,
57        terrain: &Terrain<TerrainChunk>,
58        client: &Client,
59    ) {
60        for mapper in &mut self.mappers {
61            mapper.maintain(
62                audio,
63                state,
64                player_entity,
65                camera,
66                triggers,
67                terrain,
68                client,
69            );
70        }
71    }
72}