new display cases

This commit is contained in:
Archie
2021-10-21 16:58:52 -03:00
parent c471dd0046
commit 47a83d7629
2 changed files with 56 additions and 36 deletions
+56 -36
View File
@@ -1,7 +1,7 @@
/obj/structure/displaycase
name = "display case"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox0"
icon_state = "glassbox"
desc = "A display case for prized possessions."
density = TRUE
anchored = TRUE
@@ -13,6 +13,7 @@
var/alert = TRUE
var/open = FALSE
var/openable = TRUE
var/custom_glass_overlay = FALSE ///If we have a custom glass overlay to use.
var/obj/item/electronics/airlock/electronics
var/start_showpiece_type = null //add type for items on display
var/list/start_showpieces = list() //Takes sublists in the form of list("type" = /obj/item/bikehorn, "trophy_message" = "henk")
@@ -30,6 +31,19 @@
showpiece = new start_showpiece_type (src)
update_icon()
/obj/structure/displaycase/vv_edit_var(vname, vval)
. = ..()
if(vname in list(NAMEOF(src, open), NAMEOF(src, showpiece), NAMEOF(src, custom_glass_overlay)))
update_icon()
/obj/structure/displaycase/handle_atom_del(atom/A)
if(A == electronics)
electronics = null
if(A == showpiece)
showpiece = null
update_icon()
return ..()
/obj/structure/displaycase/Destroy()
if(electronics)
QDEL_NULL(electronics)
@@ -42,62 +56,68 @@
if(alert)
. += "<span class='notice'>Hooked up with an anti-theft system.</span>"
if(showpiece)
. += "<span class='notice'>There's [showpiece] inside.</span>"
. += "<span class='notice'>There's \a [showpiece] inside.</span>"
if(trophy_message)
. += "The plaque reads:"
. += trophy_message
/obj/structure/displaycase/proc/dump()
if (showpiece)
showpiece.forceMove(loc)
showpiece = null
if(QDELETED(showpiece))
return
showpiece.forceMove(drop_location())
showpiece = null
update_icon()
/obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(src.loc, 'sound/effects/glasshit.ogg', 75, 1)
playsound(src, 'sound/effects/glasshit.ogg', 75, 1)
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
playsound(src, 'sound/items/welder.ogg', 100, 1)
/obj/structure/displaycase/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
dump()
if(!disassembled)
new /obj/item/shard( src.loc )
trigger_alarm()
qdel(src)
dump()
if(!broken && !(flags_1 & NODECONSTRUCT_1) && !disassembled)
density = FALSE
broken = TRUE
new /obj/item/shard(drop_location())
playsound(src, "shatter", 70, 1)
update_icon()
trigger_alarm()
else
qdel(src)
/obj/structure/displaycase/obj_break(damage_flag)
. = ..()
if(!broken && !(flags_1 & NODECONSTRUCT_1))
density = FALSE
broken = 1
new /obj/item/shard( src.loc )
broken = TRUE
new /obj/item/shard(drop_location())
playsound(src, "shatter", 70, 1)
update_icon()
trigger_alarm()
/obj/structure/displaycase/proc/trigger_alarm()
//Activate Anti-theft
if(alert)
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)
playsound(src, 'sound/effects/alert.ogg', 50, 1)
if(!alert)
return
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)
playsound(src, 'sound/effects/alert.ogg', 50, TRUE)
/obj/structure/displaycase/update_icon()
var/icon/I
if(open)
I = icon('icons/obj/stationobjs.dmi',"glassbox_open")
else
I = icon('icons/obj/stationobjs.dmi',"glassbox0")
if(broken)
I = icon('icons/obj/stationobjs.dmi',"glassboxb0")
/obj/structure/displaycase/update_overlays()
. = ..()
if(showpiece)
var/icon/S = getFlatIcon(showpiece)
S.Scale(17,17)
I.Blend(S,ICON_UNDERLAY,8,8)
src.icon = I
return
var/mutable_appearance/showpiece_overlay = mutable_appearance(showpiece.icon, showpiece.icon_state)
showpiece_overlay.copy_overlays(showpiece)
showpiece_overlay.transform *= 0.6
. += showpiece_overlay
if(custom_glass_overlay)
return
if(broken)
. += "[initial(icon_state)]_broken"
else if(!open)
. += "[initial(icon_state)]_closed"
/obj/structure/displaycase/attackby(obj/item/W, mob/user, params)
if(W.GetID() && !broken && openable)
@@ -144,7 +164,7 @@
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
if(do_after(user, 20, target = src))
G.use(2)
broken = 0
broken = FALSE
obj_integrity = max_integrity
update_icon()
else
@@ -166,7 +186,7 @@
to_chat(user, "<span class='notice'>You deactivate the hover field built into the case.</span>")
log_combat(user, src, "deactivates the hover field of")
dump()
src.add_fingerprint(user)
add_fingerprint(user)
update_icon()
return
else
@@ -326,7 +346,7 @@
new /obj/effect/decal/cleanable/ash(loc)
QDEL_NULL(showpiece)
else
..()
return ..()
/obj/item/key/displaycase
name = "display case key"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 77 KiB