From c4c36e9add9a6f6675a34125f963b2cbdbf2be7b Mon Sep 17 00:00:00 2001
From: Ghilker <42839747+Ghilker@users.noreply.github.com>
Date: Mon, 12 Oct 2020 18:58:56 +0200
Subject: [PATCH] holosign little refractor (#54287)
---
code/game/objects/items/holosign_creator.dm | 88 ++++++++++-----------
code/game/objects/structures/holosign.dm | 13 ++-
2 files changed, 46 insertions(+), 55 deletions(-)
diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm
index 49a1aba9931..048657b2621 100644
--- a/code/game/objects/items/holosign_creator.dm
+++ b/code/game/objects/items/holosign_creator.dm
@@ -12,49 +12,51 @@
throw_speed = 3
throw_range = 7
item_flags = NOBLUDGEON
- var/list/signs = list()
+ var/list/signs
var/max_signs = 10
var/creation_time = 0 //time to create a holosign in deciseconds.
var/holosign_type = /obj/structure/holosign/wetsign
var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once
-/obj/item/holosign_creator/afterattack(atom/target, mob/user, flag)
+/obj/item/holosign_creator/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
- if(flag)
- if(!check_allowed_items(target, 1))
+ if(!proximity_flag)
+ return
+ if(!check_allowed_items(target, not_inside = TRUE))
+ return
+ var/turf/target_turf = get_turf(target)
+ var/obj/structure/holosign/target_holosign = locate(holosign_type) in target_turf
+ if(target_holosign)
+ to_chat(user, "You use [src] to deactivate [target_holosign].")
+ qdel(target_holosign)
+ return
+ if(target_turf.is_blocked_turf(TRUE)) //can't put holograms on a tile that has dense stuff
+ return
+ if(holocreator_busy)
+ to_chat(user, "[src] is busy creating a hologram.")
+ return
+ if(LAZYLEN(signs) >= max_signs)
+ to_chat(user, "[src] is projecting at max capacity!")
+ return
+ playsound(loc, 'sound/machines/click.ogg', 20, TRUE)
+ if(creation_time)
+ holocreator_busy = TRUE
+ if(!do_after(user, creation_time, target = target))
+ holocreator_busy = FALSE
return
- var/turf/T = get_turf(target)
- var/obj/structure/holosign/H = locate(holosign_type) in T
- if(H)
- to_chat(user, "You use [src] to deactivate [H].")
- qdel(H)
- else
- if(!T.is_blocked_turf(TRUE)) //can't put holograms on a tile that has dense stuff
- if(holocreator_busy)
- to_chat(user, "[src] is busy creating a hologram.")
- return
- if(signs.len < max_signs)
- playsound(src.loc, 'sound/machines/click.ogg', 20, TRUE)
- if(creation_time)
- holocreator_busy = TRUE
- if(!do_after(user, creation_time, target = target))
- holocreator_busy = FALSE
- return
- holocreator_busy = FALSE
- if(signs.len >= max_signs)
- return
- if(T.is_blocked_turf(TRUE)) //don't try to sneak dense stuff on our tile during the wait.
- return
- H = new holosign_type(get_turf(target), src)
- to_chat(user, "You create \a [H] with [src].")
- else
- to_chat(user, "[src] is projecting at max capacity!")
+ holocreator_busy = FALSE
+ if(LAZYLEN(signs) >= max_signs)
+ return
+ if(target_turf.is_blocked_turf(TRUE)) //don't try to sneak dense stuff on our tile during the wait.
+ return
+ target_holosign = new holosign_type(get_turf(target), src)
+ to_chat(user, "You create \a [target_holosign] with [src].")
/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
return
/obj/item/holosign_creator/attack_self(mob/user)
- if(signs.len)
+ if(LAZYLEN(signs))
for(var/H in signs)
qdel(H)
to_chat(user, "You clear all active holograms.")
@@ -114,26 +116,18 @@
to_chat(user, "You clear all active holograms, and reset your projector to normal.")
holosign_type = /obj/structure/holosign/barrier/cyborg
creation_time = 5
- if(signs.len)
- for(var/H in signs)
- qdel(H)
+ for(var/sign in signs)
+ qdel(sign)
shock = 0
return
- else if(R.emagged&&!shock)
+ if(R.emagged&&!shock)
to_chat(user, "You clear all active holograms, and overload your energy projector!")
holosign_type = /obj/structure/holosign/barrier/cyborg/hacked
creation_time = 30
- if(signs.len)
- for(var/H in signs)
- qdel(H)
+ for(var/sign in signs)
+ qdel(sign)
shock = 1
return
- else
- if(signs.len)
- for(var/H in signs)
- qdel(H)
- to_chat(user, "You clear all active holograms.")
- if(signs.len)
- for(var/H in signs)
- qdel(H)
- to_chat(user, "You clear all active holograms.")
+ for(var/sign in signs)
+ qdel(sign)
+ to_chat(user, "You clear all active holograms.")
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index 7946facf6a4..9030b525114 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -9,20 +9,17 @@
armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 20)
var/obj/item/holosign_creator/projector
-/obj/structure/holosign/New(loc, source_projector)
- if(source_projector)
- projector = source_projector
- projector.signs += src
- ..()
-
-/obj/structure/holosign/Initialize()
+/obj/structure/holosign/Initialize(loc, source_projector)
. = ..()
alpha = 0
SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
+ if(source_projector)
+ projector = source_projector
+ LAZYADD(projector.signs, src)
/obj/structure/holosign/Destroy()
if(projector)
- projector.signs -= src
+ LAZYREMOVE(projector.signs, src)
projector = null
return ..()