Close storage UI when item becomes inaccessible (#14536)

* add hide_from_all to storage objects, to call by something once it's locked/close

* lockers call hide_from_all on stored storage items

* secure storage calls hide_from_all on lock

* throwing storage closes it

* adding storage to a disposal chute closes it

* adding storage to a crate closes it

* adding storage to the destructive analyzer closes it
This commit is contained in:
nicetoolbox
2020-12-16 11:47:26 -08:00
committed by GitHub
parent 1683c4271a
commit f54b6904b9
7 changed files with 31 additions and 2 deletions
@@ -147,6 +147,7 @@
else
if((href_list["type"] == "R") && (emagged == 0) && (!l_setshort))
locked = 1
hide_from_all()
overlays = null
code = null
close(usr)
@@ -24,6 +24,7 @@
var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile.
var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/use_sound = "rustle" //sound played when used. null for no sound.
var/list/active_users = list() // list of ckey(user.key), who is viewing the inventory?
/// What kind of [/obj/item/stack] can this be folded into. (e.g. Boxes and cardboard)
var/foldable = null
@@ -129,6 +130,8 @@
user.client.screen += closer
user.client.screen += contents
user.s_active = src
if(user.key)
active_users[ckey(user.key)] = TRUE
return
/obj/item/storage/proc/hide_from(mob/user as mob)
@@ -140,8 +143,19 @@
user.client.screen -= src.contents
if(user.s_active == src)
user.s_active = null
if(user.key)
active_users.Remove(ckey(user.key))
return
/obj/item/storage/proc/hide_from_all()
for(var/K in active_users)
var/client/C = get_client_by_ckey(K)
if(C)
var/mob/M = C.mob
if(M)
hide_from(M)
/obj/item/storage/proc/open(mob/user as mob)
if(src.use_sound)
playsound(src.loc, src.use_sound, 50, 1, -5)
@@ -103,6 +103,9 @@
if(!I.anchored)
I.forceMove(src)
itemcount++
if(istype(I, /obj/item/storage))
var/obj/item/storage/S = I
S.hide_from_all()
for(var/mob/M in loc)
if(itemcount >= storage_capacity)
@@ -81,6 +81,9 @@
continue
O.forceMove(src)
itemcount++
if(istype(O, /obj/item/storage))
var/obj/item/storage/S = O
S.hide_from_all()
icon_state = icon_closed
src.opened = FALSE
+3
View File
@@ -629,6 +629,9 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
return
if(thrown_thing)
if(istype(thrown_thing, /obj/item/storage))
var/obj/item/storage/S = thrown_thing
S.hide_from_all()
visible_message("<span class='danger'>[src] has thrown [thrown_thing].</span>")
newtonian_move(get_dir(target, src))
thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src, null, null, null, move_force)
+4 -2
View File
@@ -103,8 +103,8 @@
to_chat(user, "You can't place that item inside the disposal unit.")
return
if(istype(I, /obj/item/storage))
var/obj/item/storage/S = I
var/obj/item/storage/S = I
if(istype(S))
if((S.allow_quick_empty || S.allow_quick_gather) && S.contents.len)
S.hide_from(user)
user.visible_message("[user] empties \the [S] into \the [src].", "You empty \the [S] into \the [src].")
@@ -134,6 +134,8 @@
if(!user.drop_item())
return
if(I)
if(istype(S))
S.hide_from_all()
I.forceMove(src)
to_chat(user, "You place \the [I] into the [src].")
@@ -81,6 +81,9 @@ Note: Must be placed within 3 tiles of the R&D Console
busy = 1
loaded_item = O
O.loc = src
if(istype(O, /obj/item/storage))
var/obj/item/storage/S = O
S.hide_from_all()
to_chat(user, "<span class='notice'>You add the [O.name] to the [src.name]!</span>")
flick("d_analyzer_la", src)
spawn(10)