Files
Bubberstation/code/datums/components/geiger_sound.dm
SkyratBot be6d270126 [MIRROR] Fully documents _sound_looping.dm and adds the variables it was missing to allow for full sound customizability [MDB IGNORE] (#12837)
* Fully documents _sound_looping.dm and adds the variables it was missing to allow for full sound customizability (#66215)

* Fully documented _looping_sound.dm and added three missing variables to it, arguments that are for playsound()

* Fixed geiger's `get_sound()`

* Fixed a variable name in area_sound_manager.dm

* Fixed some trailing tabs in firedoor.dm

* Fixed a variable name in robot_model.dm

* Did some formatting improvements to machinery_sounds.dm and set telecomms and the gravity generator as sounds that will no longer ignore walls

* Fully documents _sound_looping.dm and adds the variables it was missing to allow for full sound customizability

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2022-04-17 00:15:22 -04:00

93 lines
2.9 KiB
Plaintext

/// Atoms with this component will play sounds depending on nearby radiation
/datum/component/geiger_sound
var/datum/looping_sound/geiger/sound
var/last_parent = null
/datum/component/geiger_sound/Initialize(...)
if (!isatom(parent))
return COMPONENT_INCOMPATIBLE
/datum/component/geiger_sound/Destroy(force, silent)
QDEL_NULL(sound)
if (!isnull(last_parent))
UnregisterSignal(last_parent, COMSIG_IN_RANGE_OF_IRRADIATION)
last_parent = null
return ..()
/datum/component/geiger_sound/RegisterWithParent()
sound = new(parent)
RegisterSignal(parent, COMSIG_IN_RANGE_OF_IRRADIATION, .proc/on_pre_potential_irradiation)
ADD_TRAIT(parent, TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, REF(src))
if (isitem(parent))
var/atom/atom_parent = parent
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/on_moved)
register_to_loc(atom_parent.loc)
/datum/component/geiger_sound/UnregisterFromParent()
UnregisterSignal(parent, list(
COMSIG_MOVABLE_MOVED,
COMSIG_IN_RANGE_OF_IRRADIATION,
))
REMOVE_TRAIT(parent, TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, REF(src))
/datum/component/geiger_sound/proc/on_pre_potential_irradiation(datum/source, datum/radiation_pulse_information/pulse_information, insulation_to_target)
SIGNAL_HANDLER
sound.last_insulation_to_target = insulation_to_target
sound.last_radiation_pulse = pulse_information
sound.start()
addtimer(CALLBACK(sound, /datum/looping_sound/proc/stop), TIME_WITHOUT_RADIATION_BEFORE_RESET, TIMER_UNIQUE | TIMER_OVERRIDE)
/datum/component/geiger_sound/proc/on_moved(atom/source)
SIGNAL_HANDLER
register_to_loc(source.loc)
/datum/component/geiger_sound/proc/register_to_loc(new_loc)
if (last_parent == new_loc)
return
if (!isnull(last_parent))
UnregisterSignal(last_parent, COMSIG_IN_RANGE_OF_IRRADIATION)
last_parent = new_loc
if (!isnull(new_loc))
RegisterSignal(new_loc, COMSIG_IN_RANGE_OF_IRRADIATION, .proc/on_pre_potential_irradiation)
/datum/looping_sound/geiger
mid_sounds = list(
list('sound/items/geiger/low1.ogg'=1, 'sound/items/geiger/low2.ogg'=1, 'sound/items/geiger/low3.ogg'=1, 'sound/items/geiger/low4.ogg'=1),
list('sound/items/geiger/med1.ogg'=1, 'sound/items/geiger/med2.ogg'=1, 'sound/items/geiger/med3.ogg'=1, 'sound/items/geiger/med4.ogg'=1),
list('sound/items/geiger/high1.ogg'=1, 'sound/items/geiger/high2.ogg'=1, 'sound/items/geiger/high3.ogg'=1, 'sound/items/geiger/high4.ogg'=1),
list('sound/items/geiger/ext1.ogg'=1, 'sound/items/geiger/ext2.ogg'=1, 'sound/items/geiger/ext3.ogg'=1, 'sound/items/geiger/ext4.ogg'=1)
)
mid_length = 2
volume = 25
var/datum/radiation_pulse_information/last_radiation_pulse
var/last_insulation_to_target
/datum/looping_sound/geiger/Destroy()
last_radiation_pulse = null
return ..()
/datum/looping_sound/geiger/get_sound()
if (isnull(last_radiation_pulse))
return null
return ..(mid_sounds[get_perceived_radiation_danger(last_radiation_pulse, last_insulation_to_target)])
/datum/looping_sound/geiger/stop()
. = ..()
last_radiation_pulse = null