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, 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}