mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-14 11:23:05 +00:00
Refactored hitby to be in line with TG's version. Refactored item weight defines to a more clear naming scheme, also in line with TG's version. Refactored how the movement bumps are handled, ported signals to handle them, in preparation for the movement update. Fixed disposal hit bouncing the hitting atom on the wall. Items do not push other items anymore if they are tiny.
139 lines
3.9 KiB
Plaintext
139 lines
3.9 KiB
Plaintext
/obj/item/device/assembly
|
|
name = "assembly"
|
|
desc = "A small electronic device that should never exist."
|
|
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
|
icon_state = ""
|
|
obj_flags = OBJ_FLAG_CONDUCTABLE
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
matter = list(DEFAULT_WALL_MATERIAL = 100)
|
|
recyclable = TRUE
|
|
throwforce = 2
|
|
throw_speed = 3
|
|
throw_range = 10
|
|
drop_sound = 'sound/items/drop/component.ogg'
|
|
pickup_sound = 'sound/items/pickup/component.ogg'
|
|
origin_tech = list(TECH_MAGNET = 1)
|
|
|
|
var/secured = TRUE
|
|
var/list/attached_overlays = null
|
|
var/obj/item/device/assembly_holder/holder = null
|
|
var/cooldown = 0 //To prevent spam
|
|
|
|
/**
|
|
* Wires that the assembly has installed
|
|
*
|
|
* Refer to `code\__DEFINES\wires.dm` in the dedicated section for the supported wires, which _must_ be bitflags
|
|
*
|
|
* At the time of writing this, it supports:
|
|
* * WIRE_RECEIVE_ASSEMBLY
|
|
* * WIRE_PULSE_ASSEMBLY
|
|
* * WIRE_PULSE_SPECIAL
|
|
* * WIRE_RADIO_RECEIVE
|
|
* * WIRE_RADIO_PULSE
|
|
*/
|
|
var/wires = WIRE_RECEIVE_ASSEMBLY | WIRE_PULSE_ASSEMBLY
|
|
|
|
/obj/item/device/assembly/Destroy()
|
|
STOP_PROCESSING(SSprocessing, src)
|
|
|
|
holder = null
|
|
ClearOverlays()
|
|
attached_overlays = null
|
|
|
|
. = ..()
|
|
|
|
/obj/item/device/assembly/proc/holder_movement()
|
|
return
|
|
|
|
//Called via spawn(10) to have it count down the cooldown var
|
|
/obj/item/device/assembly/proc/process_cooldown()
|
|
cooldown--
|
|
if(cooldown <= 0)
|
|
return FALSE
|
|
addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 1 SECOND)
|
|
return TRUE
|
|
|
|
// Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
|
|
/obj/item/device/assembly/proc/pulsed(var/radio = 0)
|
|
if(holder && (wires & WIRE_RECEIVE_ASSEMBLY))
|
|
activate()
|
|
if(radio && (wires & WIRE_RADIO_RECEIVE))
|
|
activate()
|
|
return TRUE
|
|
|
|
// Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
|
|
/obj/item/device/assembly/proc/pulse(var/radio = 0)
|
|
if(holder && (wires & WIRE_PULSE_ASSEMBLY))
|
|
holder.process_activation(src, TRUE, FALSE)
|
|
if(holder && (wires & WIRE_PULSE_SPECIAL))
|
|
holder.process_activation(src, FALSE, TRUE)
|
|
return TRUE
|
|
|
|
/obj/item/device/assembly/proc/activate()
|
|
if(!secured || cooldown)
|
|
return FALSE
|
|
cooldown = 2
|
|
addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 1 SECOND)
|
|
return TRUE
|
|
|
|
/obj/item/device/assembly/proc/toggle_secure()
|
|
secured = !secured
|
|
update_icon()
|
|
return secured
|
|
|
|
// Called when an assembly is attacked by another
|
|
/obj/item/device/assembly/proc/attach_assembly(var/obj/item/device/assembly/A, var/mob/user)
|
|
holder = new /obj/item/device/assembly_holder(get_turf(src))
|
|
if(holder.attach(A, src, user))
|
|
to_chat(user, SPAN_NOTICE("You attach \the [A] to \the [src]!"))
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/obj/item/device/assembly/attackby(obj/item/attacking_item, mob/user)
|
|
if(isassembly(attacking_item))
|
|
var/obj/item/device/assembly/A = attacking_item
|
|
if(!A.secured && !secured)
|
|
attach_assembly(A, user)
|
|
return
|
|
if(attacking_item.isscrewdriver())
|
|
if(toggle_secure())
|
|
to_chat(user, SPAN_NOTICE("\The [src] is ready!"))
|
|
else
|
|
to_chat(user, SPAN_NOTICE("\The [src] can now be attached!"))
|
|
return
|
|
return ..()
|
|
|
|
/obj/item/device/assembly/process()
|
|
STOP_PROCESSING(SSprocessing, src)
|
|
return
|
|
|
|
|
|
/obj/item/device/assembly/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
|
|
. = ..()
|
|
if(distance <= 1 || loc == user)
|
|
if(secured)
|
|
. += "\The [src] is ready!"
|
|
else
|
|
. += "\The [src] can be attached!"
|
|
|
|
|
|
/obj/item/device/assembly/attack_self(mob/user)
|
|
if(!user)
|
|
return FALSE
|
|
interact(user)
|
|
return TRUE
|
|
|
|
/obj/item/device/assembly/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs)
|
|
SIGNAL_HANDLER
|
|
|
|
/obj/item/device/assembly/interact(mob/user)
|
|
return
|
|
|
|
/obj/item/device/assembly/ui_host(mob/user)
|
|
. = ..()
|
|
// Sets the UI host to the transfer valve if its mounted on a transfer_valve
|
|
if(istype(loc,/obj/item/device/transfer_valve))
|
|
return loc
|
|
|
|
return holder || .
|