Files
CHOMPStation2/code/game/objects/items/devices/geiger.dm
2019-03-27 03:55:21 -04:00

92 lines
2.3 KiB
Plaintext

//Geiger counter
//Rewritten version of TG's geiger counter
//I opted to show exact radiation levels
/obj/item/device/geiger
name = "geiger counter"
desc = "A handheld device used for detecting and measuring radiation in an area."
icon_state = "geiger_off"
item_state = "multitool"
w_class = ITEMSIZE_SMALL
var/scanning = 0
var/radiation_count = 0
var/datum/looping_sound/geiger/soundloop
<<<<<<< HEAD
/obj/item/device/geiger/New()
START_PROCESSING(SSobj, src)
/obj/item/device/geiger/Destroy()
=======
/obj/item/device/geiger/Initialize()
START_PROCESSING(SSobj, src)
soundloop = new(list(src), FALSE)
return ..()
/obj/item/device/geiger/Destroy()
STOP_PROCESSING(SSobj, src)
QDEL_NULL(soundloop)
>>>>>>> 5fb77b3... Merge pull request #5791 from Neerti/looping_sounds
return ..()
/obj/item/device/geiger/process()
get_radiation()
/obj/item/device/geiger/proc/get_radiation()
if(!scanning)
return
radiation_count = radiation_repository.get_rads_at_turf(get_turf(src))
update_icon()
update_sound()
/obj/item/device/geiger/examine(mob/user)
..(user)
get_radiation()
to_chat(user, "<span class='warning'>[scanning ? "Ambient" : "Stored"] radiation level: [radiation_count ? radiation_count : "0"]Bq.</span>")
/obj/item/device/geiger/rad_act(amount)
if(!amount || !scanning)
return FALSE
if(amount > radiation_count)
radiation_count = amount
update_icon()
update_sound()
/obj/item/device/geiger/proc/update_sound()
var/datum/looping_sound/geiger/loop = soundloop
if(!scanning)
loop.stop()
return
if(!radiation_count)
loop.stop()
return
loop.last_radiation = radiation_count
loop.start()
/obj/item/device/geiger/attack_self(var/mob/user)
scanning = !scanning
update_icon()
update_sound()
to_chat(user, "<span class='notice'>\icon[src] You switch [scanning ? "on" : "off"] \the [src].</span>")
/obj/item/device/geiger/update_icon()
if(!scanning)
icon_state = "geiger_off"
return 1
switch(radiation_count)
if(null)
icon_state = "geiger_on_1"
if(-INFINITY to RAD_LEVEL_LOW)
icon_state = "geiger_on_1"
if(RAD_LEVEL_LOW to RAD_LEVEL_MODERATE)
icon_state = "geiger_on_2"
if(RAD_LEVEL_MODERATE to RAD_LEVEL_HIGH)
icon_state = "geiger_on_3"
if(RAD_LEVEL_HIGH to RAD_LEVEL_VERY_HIGH)
icon_state = "geiger_on_4"
if(RAD_LEVEL_VERY_HIGH to INFINITY)
icon_state = "geiger_on_5"