Files
CHOMPStation2/code/game/mecha/mech_sensor.dm
CHOMPStation2 ab154b48b2 [MIRROR] refactors most spans (#9139)
Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
Co-authored-by: Kashargul <KashL@t-online.de>
2024-10-04 15:00:17 +02:00

96 lines
2.5 KiB
Plaintext

/obj/machinery/mech_sensor
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "airlock_sensor_off"
name = "mechatronic sensor"
desc = "Regulates mech movement."
anchored = TRUE
density = TRUE
throwpass = 1
use_power = USE_POWER_IDLE
layer = ON_WINDOW_LAYER
power_channel = EQUIP
var/on = 0
var/id_tag = null
var/frequency = 1379
var/datum/radio_frequency/radio_connection
/obj/machinery/mech_sensor/CanPass(atom/movable/mover, turf/target)
if(!enabled())
return TRUE
if((get_dir(loc, target) & dir) && src.is_blocked(mover))
src.give_feedback(mover)
return FALSE
return TRUE
/obj/machinery/mech_sensor/proc/is_blocked(O as obj)
if(istype(O, /obj/mecha/medical/odysseus))
var/obj/mecha/medical/odysseus/M = O
for(var/obj/item/mecha_parts/mecha_equipment/ME in M.equipment)
if(istype(ME, /obj/item/mecha_parts/mecha_equipment/tool/sleeper))
var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S = ME
if(S.occupant != null)
return 0
return istype(O, /obj/mecha) || istype(O, /obj/vehicle)
/obj/machinery/mech_sensor/proc/give_feedback(O as obj)
var/block_message = span_warning("Movement control overridden. Area denial active.")
var/feedback_timer = 0
if(feedback_timer)
return
if(istype(O, /obj/mecha))
var/obj/mecha/R = O
if(R && R.occupant)
to_chat(R.occupant,block_message)
else if(istype(O, /obj/vehicle/train/engine))
var/obj/vehicle/train/engine/E = O
if(E && E.load && E.is_train_head())
to_chat(E.load,block_message)
feedback_timer = 1
spawn(50) //Without this timer the feedback becomes horribly spamy
feedback_timer = 0
/obj/machinery/mech_sensor/proc/enabled()
return on && !(stat & NOPOWER)
/obj/machinery/mech_sensor/power_change()
var/old_stat = stat
..()
if(old_stat != stat)
update_icon()
/obj/machinery/mech_sensor/update_icon(var/safety = 0)
if (enabled())
icon_state = "airlock_sensor_standby"
else
icon_state = "airlock_sensor_off"
/obj/machinery/mech_sensor/Initialize()
. = ..()
set_frequency(frequency)
/obj/machinery/mech_sensor/proc/set_frequency(new_frequency)
if(radio_connection)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
if(frequency)
radio_connection = radio_controller.add_object(src, frequency)
/obj/machinery/mech_sensor/receive_signal(datum/signal/signal)
if(stat & NOPOWER)
return
if(!signal.data["tag"] || (signal.data["tag"] != id_tag))
return
if(signal.data["command"] == "enable")
on = 1
else if (signal.data["command"] == "disable")
on = 0
update_icon()