veloren_voxygen/audio/sfx/event_mapper/
mod.rs1mod 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}