From ef7979ff67875e23114f4b831705743af580c03f Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 30 Apr 2023 23:11:13 +0200 Subject: [PATCH] Clickable Storage Backgrounds (#16249) * Clickable Storage Backgrounds * ye --- code/_onclick/hud/screen_objects.dm | 20 ++++++++++- .../objects/items/weapons/storage/storage.dm | 33 ++++++++++--------- .../geeves-clickable_storage_backgrounds.yml | 6 ++++ 3 files changed, 43 insertions(+), 16 deletions(-) create mode 100644 html/changelogs/geeves-clickable_storage_backgrounds.yml diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 636921de252..741c3fff6e0 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -135,6 +135,24 @@ usr.ClickOn(master) return TRUE +/obj/screen/storage/background + name = "background storage" + layer = SCREEN_LAYER+0.01 + +/obj/screen/storage/background/Initialize(mapload, var/obj/set_master, var/set_icon_state) + . = ..() + master = set_master + if(master) + name = master.name + icon_state = set_icon_state + +/obj/screen/storage/background/Click() + if(usr.incapacitated()) + return TRUE + if(master) + usr.ClickOn(master) + return TRUE + /obj/screen/zone_sel name = "damage zone" icon_state = "zone_sel" @@ -505,4 +523,4 @@ add_overlay(handcuff_overlay) /obj/screen/inventory/back - name = "back" \ No newline at end of file + name = "back" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 1fb8e281b07..708e8e430a6 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -28,9 +28,7 @@ var/obj/screen/storage/storage_start //storage UI var/obj/screen/storage/storage_continue var/obj/screen/storage/storage_end - var/obj/screen/storage/stored_start - var/obj/screen/storage/stored_continue - var/obj/screen/storage/stored_end + var/list/storage_screens = list() var/obj/screen/close/closer var/care_about_storage_depth = TRUE var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. @@ -51,9 +49,7 @@ QDEL_NULL(storage_start) QDEL_NULL(storage_continue) QDEL_NULL(storage_end) - QDEL_NULL(stored_start) - QDEL_NULL(stored_continue) - QDEL_NULL(stored_end) + QDEL_NULL_LIST(storage_screens) QDEL_NULL(closer) return ..() @@ -167,7 +163,10 @@ /obj/item/storage/proc/close(mob/user as mob) hide_from(user) user.s_active = null - return + if(!length(can_see_contents())) + storage_start.vis_contents = list() + QDEL_NULL_LIST(storage_screens) + storage_screens = list() /obj/item/storage/proc/close_all() for(var/mob/M in can_see_contents()) @@ -266,10 +265,18 @@ var/startpoint = 0 var/endpoint = 1 + storage_start.vis_contents = list() + QDEL_NULL_LIST(storage_screens) + storage_screens = list() + for(var/obj/item/O in contents) startpoint = endpoint + 1 endpoint += storage_width * O.get_storage_cost()/max_storage_space + var/obj/screen/storage/background/stored_start = new /obj/screen/storage/background(null, O, "stored_start") + var/obj/screen/storage/background/stored_continue = new /obj/screen/storage/background(null, O, "stored_continue") + var/obj/screen/storage/background/stored_end = new /obj/screen/storage/background(null, O, "stored_end") + var/matrix/M_start = matrix() var/matrix/M_continue = matrix() var/matrix/M_end = matrix() @@ -280,11 +287,13 @@ stored_start.transform = M_start stored_continue.transform = M_continue stored_end.transform = M_end - storage_start.add_overlay(list(stored_start, stored_continue, stored_end)) + + storage_screens += list(stored_start, stored_continue, stored_end) + storage_start.vis_contents += list(stored_start, stored_continue, stored_end) O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" O.maptext = "" - O.layer = SCREEN_LAYER+0.01 + O.layer = SCREEN_LAYER+0.02 if (!defer_overlays) storage_start.compile_overlays() @@ -671,12 +680,6 @@ storage_end = new /obj/screen/storage{icon_state = "storage_end"} storage_end.master = src - stored_start = new /obj/storage_bullshit{icon_state = "stored_start"} //we just need these to hold the icon - - stored_continue = new /obj/storage_bullshit{icon_state = "stored_continue"} - - stored_end = new /obj/storage_bullshit{icon_state = "stored_end"} - closer = new /obj/screen/close{ icon_state = "x"; layer = SCREEN_LAYER diff --git a/html/changelogs/geeves-clickable_storage_backgrounds.yml b/html/changelogs/geeves-clickable_storage_backgrounds.yml new file mode 100644 index 00000000000..a4a4e1ac9a6 --- /dev/null +++ b/html/changelogs/geeves-clickable_storage_backgrounds.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "You can now click on the background of an item inside a box/backpack to pick it up. This only affects storages that don't use the square slots for now." \ No newline at end of file