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