mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 15:42:35 +00:00
- Removed need for additional sender datum for mass drivers and doors - Updated mass driver sequence for new door receivers
200 lines
6.1 KiB
Plaintext
200 lines
6.1 KiB
Plaintext
//-------------------------------
|
|
// Buttons
|
|
// Sender: intended to be used by buttons, when the button is pressed it will call activate() on all connected /button
|
|
// receivers.
|
|
// Receiver: does whatever the subtype does. deactivate() by default calls activate(), so you will have to override in
|
|
// it in a subtype if you want it to do something.
|
|
//-------------------------------
|
|
/datum/wifi/sender/button/activate(mob/living/user)
|
|
for(var/datum/wifi/receiver/button/B in connected_devices)
|
|
B.activate(user)
|
|
|
|
/datum/wifi/sender/button/deactivate(mob/living/user)
|
|
for(var/datum/wifi/receiver/button/B in connected_devices)
|
|
B.deactivate(user)
|
|
|
|
/datum/wifi/receiver/button/proc/activate(mob/living/user)
|
|
|
|
/datum/wifi/receiver/button/proc/deactivate(mob/living/user)
|
|
activate(user) //override this if you want deactivate to actually do something
|
|
|
|
//-------------------------------
|
|
// Doors
|
|
// Sender: sends an open/close request to all connected /door receivers. Utilises spawn_sync to trigger all doors to
|
|
// open at approximately the same time. Waits until all doors have finished opening before returning.
|
|
// Receiver: will try to open/close the parent door when activate/deactivate is called.
|
|
//-------------------------------
|
|
|
|
// Sender procs
|
|
/datum/wifi/sender/door/activate(var/command)
|
|
if(!command)
|
|
return
|
|
|
|
var/datum/spawn_sync/S = new()
|
|
|
|
for(var/datum/wifi/receiver/button/door/D in connected_devices)
|
|
S.start_worker(D, command)
|
|
S.wait_until_done()
|
|
return
|
|
|
|
//Receiver procs
|
|
/datum/wifi/receiver/button/door/proc/open()
|
|
var/obj/machinery/door/D = parent
|
|
if(istype(D) && D.can_open())
|
|
D.open()
|
|
|
|
/datum/wifi/receiver/button/door/proc/close()
|
|
var/obj/machinery/door/D = parent
|
|
if(istype(D) && D.can_close())
|
|
D.close()
|
|
|
|
/datum/wifi/receiver/button/door/proc/lock()
|
|
var/obj/machinery/door/airlock/D = parent
|
|
if(istype(D))
|
|
D.lock()
|
|
|
|
/datum/wifi/receiver/button/door/proc/unlock()
|
|
var/obj/machinery/door/airlock/D = parent
|
|
if(istype(D))
|
|
D.unlock()
|
|
|
|
/datum/wifi/receiver/button/door/proc/enable_idscan()
|
|
var/obj/machinery/door/airlock/D = parent
|
|
if(istype(D))
|
|
D.set_idscan(1)
|
|
|
|
/datum/wifi/receiver/button/door/proc/disable_idscan()
|
|
var/obj/machinery/door/airlock/D = parent
|
|
if(istype(D))
|
|
D.set_idscan(0)
|
|
|
|
/datum/wifi/receiver/button/door/proc/enable_safeties()
|
|
var/obj/machinery/door/airlock/D = parent
|
|
if(istype(D))
|
|
D.set_safeties(1)
|
|
|
|
/datum/wifi/receiver/button/door/proc/disable_safeties()
|
|
var/obj/machinery/door/airlock/D = parent
|
|
if(istype(D))
|
|
D.set_safeties(0)
|
|
|
|
/datum/wifi/receiver/button/door/proc/electrify()
|
|
var/obj/machinery/door/airlock/D = parent
|
|
if(istype(D))
|
|
D.electrify(-1)
|
|
|
|
/datum/wifi/receiver/button/door/proc/unelectrify()
|
|
var/obj/machinery/door/airlock/D = parent
|
|
if(istype(D))
|
|
D.electrify(0)
|
|
|
|
//-------------------------------
|
|
// Emitter
|
|
// Activates/deactivates the parent emitter.
|
|
//-------------------------------
|
|
/datum/wifi/receiver/button/emitter/activate(mob/living/user)
|
|
..()
|
|
var/obj/machinery/power/emitter/E = parent
|
|
if(istype(E) && !E.active)
|
|
E.activate(user) //if the emitter is not active, trigger the activate proc to toggle it
|
|
|
|
/datum/wifi/receiver/button/emitter/deactivate(mob/living/user)
|
|
var/obj/machinery/power/emitter/E = parent
|
|
if(istype(E) && E.active)
|
|
E.activate(user) //if the emitter is active, trigger the activate proc to toggle it
|
|
|
|
//-------------------------------
|
|
// Crematorium
|
|
// Triggers cremate() on the parent /crematorium.
|
|
//-------------------------------
|
|
/datum/wifi/receiver/button/crematorium/activate(mob/living/user)
|
|
..()
|
|
var/obj/structure/crematorium/C = parent
|
|
if(istype(C))
|
|
C.cremate(user)
|
|
|
|
//-------------------------------
|
|
// Mounted Flash
|
|
// Triggers flash() on the parent /flasher.
|
|
//-------------------------------
|
|
/datum/wifi/receiver/button/flasher/activate(mob/living/user)
|
|
..()
|
|
var/obj/machinery/flasher/F = parent
|
|
if(istype(F))
|
|
F.flash()
|
|
|
|
//-------------------------------
|
|
// Holosign
|
|
// Turns the parent /holosign on/off.
|
|
//-------------------------------
|
|
/datum/wifi/receiver/button/holosign/activate(mob/living/user)
|
|
..()
|
|
var/obj/machinery/holosign/H = parent
|
|
if(istype(H) && !H.lit)
|
|
H.toggle()
|
|
|
|
/datum/wifi/receiver/button/holosign/deactivate(mob/living/user)
|
|
var/obj/machinery/holosign/H = parent
|
|
if(istype(H) && H.lit)
|
|
H.toggle()
|
|
|
|
//-------------------------------
|
|
// Igniter
|
|
// Turns the parent /igniter on/off.
|
|
//-------------------------------
|
|
/datum/wifi/receiver/button/igniter/activate(mob/living/user)
|
|
..()
|
|
var/obj/machinery/igniter/I = parent
|
|
if(istype(I))
|
|
if(!I.on)
|
|
I.ignite()
|
|
|
|
/datum/wifi/receiver/button/igniter/deactivate(mob/living/user)
|
|
if(istype(parent, /obj/machinery/igniter))
|
|
var/obj/machinery/igniter/I = parent
|
|
if(I.on)
|
|
I.ignite()
|
|
|
|
//-------------------------------
|
|
// Sparker
|
|
// Triggers the parent /sparker to ignite().
|
|
//-------------------------------
|
|
/datum/wifi/receiver/button/sparker/activate(mob/living/user)
|
|
..()
|
|
var/obj/machinery/sparker/S = parent
|
|
if(istype(S))
|
|
S.ignite()
|
|
|
|
//-------------------------------
|
|
// Mass Driver
|
|
// Sender: carries out a sequence of first opening all connected doors, then activating all connected mass drivers,
|
|
// then closes all connected doors. It will wait before continuing the sequence after opening/closing the doors.
|
|
// Receiver: Triggers the parent mass dirver to activate.
|
|
//-------------------------------
|
|
/datum/wifi/sender/mass_driver/activate()
|
|
var/datum/spawn_sync/S = new()
|
|
|
|
//tell all doors to open
|
|
for(var/datum/wifi/receiver/button/door/D in connected_devices)
|
|
S.start_worker(D, "open")
|
|
S.wait_until_done()
|
|
S.reset()
|
|
//tell all mass drivers to launch
|
|
for(var/datum/wifi/receiver/button/mass_driver/M in connected_devices)
|
|
spawn()
|
|
M.activate()
|
|
sleep(20)
|
|
|
|
//tell all doors to close
|
|
S.reset()
|
|
for(var/datum/wifi/receiver/button/door/D in connected_devices)
|
|
S.start_worker(D, "close")
|
|
S.wait_until_done()
|
|
return
|
|
|
|
/datum/wifi/receiver/button/mass_driver/activate(mob/living/user)
|
|
..()
|
|
var/obj/machinery/mass_driver/M = parent
|
|
if(istype(M))
|
|
M.drive()
|