Ash storms are no longer audible on mining/labor shuttles when in transit or docked on station (#17905)

* Change get_weather to use type instead of instance

* Stop storm audio on shuttle when docked at station

* Realize that the labor camp shuttle exists

* Fix a comment

* Apply suggestions from code review

Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>

Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
This commit is contained in:
Fridge Burns
2022-06-06 21:50:25 +01:00
committed by GitHub
co-authored by AffectedArc07
parent f33d1da673
commit ca0f0ed9e8
3 changed files with 57 additions and 17 deletions
+48 -16
View File
@@ -30,13 +30,28 @@
var/datum/looping_sound/weak_outside_ashstorm/sound_wo = new(list(), FALSE, TRUE)
var/datum/looping_sound/weak_inside_ashstorm/sound_wi = new(list(), FALSE, TRUE)
/datum/weather/ash_storm/telegraph()
. = ..()
/datum/weather/ash_storm/proc/is_shuttle_docked(shuttleId, dockId)
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
var/obj/docking_port/stationary/S = M.get_docked()
return S.id == dockId
/datum/weather/ash_storm/proc/update_eligible_areas()
var/list/inside_areas = list()
var/list/outside_areas = list()
var/list/eligible_areas = list()
for(var/z in impacted_z_levels)
eligible_areas += GLOB.space_manager.areas_in_z["[z]"]
// Don't play storm audio to shuttles that are not at lavaland
var/miningShuttleDocked = is_shuttle_docked("mining", "mining_away")
if(!miningShuttleDocked)
eligible_areas -= get_areas(/area/shuttle/mining)
var/laborShuttleDocked = is_shuttle_docked("laborcamp", "laborcamp_away")
if(!laborShuttleDocked)
eligible_areas -= get_areas(/area/shuttle/siberia)
for(var/i in 1 to eligible_areas.len)
var/area/place = eligible_areas[i]
if(place.outdoors)
@@ -50,29 +65,46 @@
sound_wo.output_atoms = outside_areas
sound_wi.output_atoms = inside_areas
sound_wo.start()
sound_wi.start()
/datum/weather/ash_storm/proc/update_audio()
switch(stage)
if(STARTUP_STAGE)
sound_wo.start()
sound_wi.start()
if(MAIN_STAGE)
sound_wo.stop()
sound_wi.stop()
sound_ao.start()
sound_ai.start()
if(WIND_DOWN_STAGE)
sound_ao.stop()
sound_ai.stop()
sound_wo.start()
sound_wi.start()
if(END_STAGE)
sound_wo.stop()
sound_wi.stop()
/datum/weather/ash_storm/telegraph()
. = ..()
update_eligible_areas()
update_audio()
/datum/weather/ash_storm/start()
. = ..()
sound_wo.stop()
sound_wi.stop()
sound_ao.start()
sound_ai.start()
update_audio()
/datum/weather/ash_storm/wind_down()
. = ..()
sound_ao.stop()
sound_ai.stop()
sound_wo.start()
sound_wi.start()
update_audio()
/datum/weather/ash_storm/end()
. = ..()
sound_wo.stop()
sound_wi.stop()
update_audio()
/datum/weather/ash_storm/proc/is_ash_immune(atom/L)
while(L && !isturf(L))