Skip to main content

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, FigureMgr, 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        figure_mgr: &FigureMgr,
34    );
35}
36
37pub struct SfxEventMapper {
38    mappers: Vec<Box<dyn EventMapper>>,
39}
40
41impl SfxEventMapper {
42    pub fn new() -> Self {
43        Self {
44            mappers: vec![
45                Box::new(CombatEventMapper::new()),
46                Box::new(MovementEventMapper::new()),
47                Box::new(BlockEventMapper::new()),
48                Box::new(CampfireEventMapper::new()),
49                Box::new(VehicleEventMapper::new()),
50            ],
51        }
52    }
53
54    pub fn maintain(
55        &mut self,
56        audio: &mut AudioFrontend,
57        state: &State,
58        player_entity: specs::Entity,
59        camera: &Camera,
60        triggers: &SfxTriggers,
61        terrain: &Terrain<TerrainChunk>,
62        client: &Client,
63        figure_mgr: &FigureMgr,
64    ) {
65        for mapper in &mut self.mappers {
66            mapper.maintain(
67                audio,
68                state,
69                player_entity,
70                camera,
71                triggers,
72                terrain,
73                client,
74                figure_mgr,
75            );
76        }
77    }
78}