veloren_voxygen/audio/sfx/event_mapper/
mod.rs

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