mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-18 10:31:41 +01:00
83 lines
2.5 KiB
Plaintext
83 lines
2.5 KiB
Plaintext
/obj/item/device/geiger
|
|
name = "geiger counter"
|
|
desc = "A handheld device used for detecting and measuring radiation in an area."
|
|
icon = 'icons/obj/geiger_counter.dmi'
|
|
icon_state = "geiger_off"
|
|
item_state = "multitool"
|
|
w_class = ITEMSIZE_SMALL
|
|
action_button_name = "Toggle geiger counter"
|
|
var/scanning = 0
|
|
var/radiation_count = 0
|
|
var/datum/sound_token/sound_token
|
|
var/geiger_volume = 0
|
|
var/sound_id
|
|
|
|
/obj/item/device/geiger/Initialize()
|
|
. = ..()
|
|
sound_id = "[type]_[sequential_id(type)]"
|
|
|
|
/obj/item/device/geiger/proc/update_sound(playing)
|
|
if(playing && !sound_token)
|
|
sound_token = GLOB.sound_player.PlayLoopingSound(src, sound_id, 'sound/items/geiger.ogg', volume = geiger_volume, range = 4, falloff = 3, prefer_mute = TRUE)
|
|
else if(!playing && sound_token)
|
|
QDEL_NULL(sound_token)
|
|
|
|
/obj/item/device/geiger/Destroy()
|
|
. = ..()
|
|
STOP_PROCESSING(SSprocessing, src)
|
|
update_sound(0)
|
|
|
|
/obj/item/device/geiger/process()
|
|
if(!scanning)
|
|
return
|
|
radiation_count = SSradiation.get_rads_at_turf(get_turf(src))
|
|
update_icon()
|
|
|
|
/obj/item/device/geiger/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
|
|
. = ..()
|
|
var/msg = "[scanning ? "ambient" : "stored"] Radiation level: [radiation_count ? radiation_count : "0"] IU/s."
|
|
if(radiation_count > RAD_LEVEL_LOW)
|
|
. += SPAN_WARNING("[msg]")
|
|
else
|
|
. += SPAN_NOTICE("[msg]")
|
|
|
|
/obj/item/device/geiger/attack_self(mob/user)
|
|
scanning = !scanning
|
|
if(scanning)
|
|
START_PROCESSING(SSprocessing, src)
|
|
else
|
|
STOP_PROCESSING(SSprocessing, src)
|
|
update_icon()
|
|
to_chat(user, SPAN_NOTICE("[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src]."))
|
|
|
|
/obj/item/device/geiger/update_icon()
|
|
if(!scanning)
|
|
icon_state = "geiger_off"
|
|
update_sound(0)
|
|
return 1
|
|
|
|
if(!sound_token) update_sound(1)
|
|
|
|
switch(radiation_count)
|
|
if(null) icon_state = "geiger_on_1"
|
|
if(-INFINITY to RAD_LEVEL_LOW)
|
|
icon_state = "geiger_on_1"
|
|
geiger_volume = 0
|
|
sound_token.SetVolume(geiger_volume)
|
|
if(RAD_LEVEL_LOW + 0.01 to RAD_LEVEL_MODERATE)
|
|
icon_state = "geiger_on_2"
|
|
geiger_volume = 10
|
|
sound_token.SetVolume(geiger_volume)
|
|
if(RAD_LEVEL_MODERATE + 0.1 to RAD_LEVEL_HIGH)
|
|
icon_state = "geiger_on_3"
|
|
geiger_volume = 25
|
|
sound_token.SetVolume(geiger_volume)
|
|
if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH)
|
|
icon_state = "geiger_on_4"
|
|
geiger_volume = 40
|
|
sound_token.SetVolume(geiger_volume)
|
|
if(RAD_LEVEL_VERY_HIGH + 1 to INFINITY)
|
|
icon_state = "geiger_on_5"
|
|
geiger_volume = 60
|
|
sound_token.SetVolume(geiger_volume)
|