Class: Quake::Sound::Events
- Inherits:
-
Object
- Object
- Quake::Sound::Events
- Defined in:
- lib/quake/sound/events.rb
Overview
Maps game events to sound file paths and plays them.
Constant Summary collapse
- PICKUP_SOUNDS =
Item pickup sounds
{ health: "items/health1.wav", armor: "items/armor1.wav", ammo: "weapons/lock4.wav", weapon: "weapons/pkup.wav", powerup: "items/protect.wav" }.freeze
- DOOR_SOUNDS =
Door/platform sounds
{ open: "doors/medtry.wav", close: "doors/medclose.wav" }.freeze
- PLAT_SOUNDS =
{ move: "plats/medplat1.wav", stop: "plats/medplat2.wav" }.freeze
- PLAYER_SOUNDS =
Player sounds
{ jump: "player/plyrjmp8.wav", swim1: "misc/water1.wav", swim2: "misc/water2.wav", land: "player/land.wav", land_hurt: "player/land2.wav", water_land: "player/h2ojump.wav", axe_body_hit: "player/axhit1.wav", axe_wall_hit: "player/axhit2.wav", water_enter: "player/inh2o.wav", water_exit: "misc/outwater.wav", lava_enter: "player/inlava.wav", slime_enter: "player/slimbrn2.wav", burn1: "player/lburn1.wav", burn2: "player/lburn2.wav", pain1: "player/pain1.wav", pain2: "player/pain2.wav", pain3: "player/pain3.wav", pain4: "player/pain4.wav", pain5: "player/pain5.wav", pain6: "player/pain6.wav", death1: "player/death1.wav", death2: "player/death2.wav", death3: "player/death3.wav", death4: "player/death4.wav", death5: "player/death5.wav", water_death: "player/h2odeath.wav", teledeath: "player/teledth1.wav", gib: "player/gib.wav", udeath: "player/udeath.wav", gasp: "player/gasp1.wav", gasp_deep: "player/gasp2.wav", drown1: "player/drown1.wav", drown2: "player/drown2.wav", quad_attack: "items/damage3.wav", ring_expiring: "items/inv2.wav", pentagram_expiring: "items/protect2.wav", biosuit_expiring: "items/suit2.wav", quad_expiring: "items/damage2.wav", pentagram_protect: "items/protect3.wav", ring_idle: ["items/inv3.wav", 0.5] }.freeze
- AMBIENT_SOUNDS =
{ "light_fluoro" => ["ambience/fl_hum1.wav", 0.5], "light_fluorospark" => ["ambience/buzz1.wav", 0.5], "light_torch_small_walltorch" => ["ambience/fire1.wav", 0.5], "light_flame_large_yellow" => ["ambience/fire1.wav", 0.5], "light_flame_small_yellow" => ["ambience/fire1.wav", 0.5], "light_flame_small_white" => ["ambience/fire1.wav", 0.5], "ambient_suck_wind" => ["ambience/suck1.wav", 1.0], "ambient_drone" => ["ambience/drone6.wav", 0.5], "ambient_flouro_buzz" => ["ambience/buzz1.wav", 1.0], "ambient_drip" => ["ambience/drip1.wav", 0.5], "ambient_comp_hum" => ["ambience/comp1.wav", 1.0], "ambient_thunder" => ["ambience/thunder1.wav", 0.5], "ambient_light_buzz" => ["ambience/fl_hum1.wav", 0.5], "ambient_swamp1" => ["ambience/swamp1.wav", 0.5], "ambient_swamp2" => ["ambience/swamp2.wav", 0.5], "trigger_teleport" => ["ambience/hum1.wav", 0.5] }.freeze
- NOISEMAKER_SOUNDS =
[ "enforcer/enfire.wav", "enforcer/enfstop.wav", "enforcer/sight1.wav", "enforcer/sight2.wav", "enforcer/sight3.wav", "enforcer/sight4.wav", "enforcer/pain1.wav" ].freeze
Instance Method Summary collapse
-
#initialize(mixer) ⇒ Events
constructor
A new instance of Events.
- #on_ambient_entity(entity) ⇒ Object
- #on_door(action) ⇒ Object
- #on_grenade_bounce ⇒ Object
- #on_misc_noisemaker(_entity) ⇒ Object
- #on_pickup(event) ⇒ Object
- #on_player(action) ⇒ Object
- #on_teleport_fog(sound) ⇒ Object
- #on_trigger(entity) ⇒ Object
- #on_trigger_push_player ⇒ Object
- #on_trigger_secret(entity) ⇒ Object
- #on_weapon_fire(event) ⇒ Object
Constructor Details
#initialize(mixer) ⇒ Events
Returns a new instance of Events.
100 101 102 |
# File 'lib/quake/sound/events.rb', line 100 def initialize(mixer) @mixer = mixer end |
Instance Method Details
#on_ambient_entity(entity) ⇒ Object
170 171 172 173 174 175 176 177 178 179 |
# File 'lib/quake/sound/events.rb', line 170 def on_ambient_entity(entity) return unless @mixer&.loaded? return if entity.classname == "trigger_teleport" && (entity.spawnflags & 2) != 0 sound = AMBIENT_SOUNDS[entity.classname] return unless sound path, volume, count = sound (count || 1).times { @mixer.play(path, volume: (volume * 128).to_i, loop_count: -1) } end |
#on_door(action) ⇒ Object
111 112 113 114 115 |
# File 'lib/quake/sound/events.rb', line 111 def on_door(action) return unless @mixer&.loaded? sound = DOOR_SOUNDS[action] @mixer.play(sound) if sound end |
#on_grenade_bounce ⇒ Object
164 165 166 167 168 |
# File 'lib/quake/sound/events.rb', line 164 def on_grenade_bounce return unless @mixer&.loaded? @mixer.play("weapons/bounce.wav") end |
#on_misc_noisemaker(_entity) ⇒ Object
146 147 148 149 150 |
# File 'lib/quake/sound/events.rb', line 146 def on_misc_noisemaker(_entity) return unless @mixer&.loaded? NOISEMAKER_SOUNDS.each { |sound| @mixer.play(sound) } end |
#on_pickup(event) ⇒ Object
104 105 106 107 108 109 |
# File 'lib/quake/sound/events.rb', line 104 def on_pickup(event) return unless @mixer&.loaded? sound = event[:sound] || PICKUP_SOUNDS[event[:type]] @mixer.play(sound) if sound event[:extra_sounds]&.each { |extra| @mixer.play(extra) } end |
#on_player(action) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/quake/sound/events.rb', line 117 def on_player(action) return unless @mixer&.loaded? sound = PLAYER_SOUNDS[action] return unless sound if sound.is_a?(Array) path, volume = sound @mixer.play(path, volume: (volume * 128).to_i) else @mixer.play(sound) end end |
#on_teleport_fog(sound) ⇒ Object
158 159 160 161 162 |
# File 'lib/quake/sound/events.rb', line 158 def on_teleport_fog(sound) return unless @mixer&.loaded? @mixer.play(sound) end |
#on_trigger(entity) ⇒ Object
135 136 137 138 139 140 |
# File 'lib/quake/sound/events.rb', line 135 def on_trigger(entity) return unless @mixer&.loaded? sound = entity.instance_variable_get(:@noise) @mixer.play(sound) if sound end |
#on_trigger_push_player ⇒ Object
152 153 154 155 156 |
# File 'lib/quake/sound/events.rb', line 152 def on_trigger_push_player return unless @mixer&.loaded? @mixer.play("ambience/windfly.wav") end |
#on_trigger_secret(entity) ⇒ Object
142 143 144 |
# File 'lib/quake/sound/events.rb', line 142 def on_trigger_secret(entity) on_trigger(entity) end |
#on_weapon_fire(event) ⇒ Object
130 131 132 133 |
# File 'lib/quake/sound/events.rb', line 130 def on_weapon_fire(event) return unless @mixer&.loaded? @mixer.play(event.sound) if event&.sound end |