Adds the proximity monitor component. Performance improvement for turf/Entered (#14196)

* proximity monitor

* Update code/__HELPERS/unsorted.dm

Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>

* farie review tweaks

* actually I need this

Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
This commit is contained in:
SteelSlayer
2020-09-20 13:31:16 -04:00
committed by GitHub
co-authored by AffectedArc07
parent ead6e898a3
commit 01da8413de
19 changed files with 252 additions and 24 deletions
+4
View File
@@ -12,6 +12,10 @@
var/obj/item/tank/bombtank = null //the second part of the bomb is a plasma tank
origin_tech = "materials=1;engineering=1"
/obj/item/onetankbomb/ComponentInitialize()
. = ..()
AddComponent(/datum/component/proximity_monitor)
/obj/item/onetankbomb/examine(mob/user)
. = ..()
. += bombtank.examine(user)
+8 -2
View File
@@ -41,19 +41,25 @@
if(!A1.remove_item_from_storage(src))
if(user)
user.remove_from_mob(A1)
A1.loc = src
A1.forceMove(src)
if(!A2.remove_item_from_storage(src))
if(user)
user.remove_from_mob(A2)
A2.loc = src
A2.forceMove(src)
A1.holder = src
A2.holder = src
a_left = A1
a_right = A2
if(has_prox_sensors())
AddComponent(/datum/component/proximity_monitor)
name = "[A1.name]-[A2.name] assembly"
update_icon()
return TRUE
/obj/item/assembly_holder/proc/has_prox_sensors()
if(istype(a_left, /obj/item/assembly/prox_sensor) || istype(a_right, /obj/item/assembly/prox_sensor))
return TRUE
return FALSE
/obj/item/assembly_holder/update_icon()
overlays.Cut()
+4
View File
@@ -13,6 +13,10 @@
var/timing = 0
var/time = 10
/obj/item/assembly/prox_sensor/ComponentInitialize()
. = ..()
AddComponent(/datum/component/proximity_monitor)
/obj/item/assembly/prox_sensor/describe()
if(timing)
return "<span class='notice'>The proximity sensor is arming.</span>"
+3 -1
View File
@@ -146,6 +146,7 @@
trigger.forceMove(src)
trigger.master = src
trigger.holder = src
AddComponent(/datum/component/proximity_monitor)
to_chat(user, "<span class='notice'>You attach the [W] to [src].</span>")
return TRUE
else if(istype(W, /obj/item/assembly))
@@ -165,6 +166,7 @@
trigger.master = null
trigger.holder = null
trigger = null
qdel(GetComponent(/datum/component/proximity_monitor))
/obj/item/clothing/mask/muzzle/safety/shock/proc/can_shock(obj/item/clothing/C)
if(istype(C))
@@ -186,7 +188,7 @@
M.Jitter(20)
return
/obj/item/clothing/mask/muzzle/safety/shock/HasProximity(atom/movable/AM as mob|obj)
/obj/item/clothing/mask/muzzle/safety/shock/HasProximity(atom/movable/AM)
if(trigger)
trigger.HasProximity(AM)
@@ -28,6 +28,10 @@
var/attached = 0
/obj/item/clothing/mask/facehugger/ComponentInitialize()
. = ..()
AddComponent(/datum/component/proximity_monitor)
/obj/item/clothing/mask/facehugger/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
..()
if(obj_integrity < 90)
@@ -78,7 +82,7 @@
return HasProximity(finder)
return 0
/obj/item/clothing/mask/facehugger/HasProximity(atom/movable/AM as mob|obj)
/obj/item/clothing/mask/facehugger/HasProximity(atom/movable/AM)
if(CanHug(AM) && Adjacent(AM))
return Attach(AM)
return 0
@@ -210,6 +214,7 @@
icon_state = "[initial(icon_state)]_dead"
item_state = "facehugger_inactive"
stat = DEAD
qdel(GetComponent(/datum/component/proximity_monitor))
visible_message("<span class='danger'>[src] curls up into a ball!</span>")
@@ -179,6 +179,7 @@
to_chat(usr, "<span class='notice'>You detach [assembly] from [src]</span>")
usr.put_in_hands(assembly)
assembly = null
qdel(GetComponent(/datum/component/proximity_monitor))
update_icon()
else
to_chat(usr, "<span class='notice'>There is no assembly to remove.</span>")
@@ -194,7 +195,9 @@
return ..()
assembly = W
user.drop_item()
W.loc = src
W.forceMove(src)
if(assembly.has_prox_sensors())
AddComponent(/datum/component/proximity_monitor)
overlays += "assembly"
else
..()
+3 -1
View File
@@ -126,6 +126,7 @@
usr.visible_message("<span class='notice'>[usr] detaches [rig] from [src].</span>", "<span class='notice'>You detach [rig] from [src].</span>")
rig.forceMove(get_turf(usr))
rig = null
qdel(GetComponent(/datum/component/proximity_monitor))
lastrigger = null
overlays.Cut()
@@ -148,7 +149,8 @@
rig = H
user.drop_item()
H.forceMove(src)
if(rig.has_prox_sensors())
AddComponent(/datum/component/proximity_monitor)
var/icon/test = getFlatIcon(H)
test.Shift(NORTH, 1)
test.Shift(EAST, 6)