From 355eb2a26830dd4de85506363ec5135f3aeaaa90 Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Fri, 24 Apr 2020 15:38:58 -0500 Subject: [PATCH] add some procs for duplicate code + antidrop check --- .../game/objects/structures/tank_dispenser.dm | 76 +++++++++---------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 878e74eaf5d..12dbb486a26 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -75,27 +75,13 @@ /obj/structure/dispenser/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/tank/oxygen) || istype(I, /obj/item/tank/air) || istype(I, /obj/item/tank/anesthetic)) - if(stored_oxygen_tanks.len < 10) - user.drop_item() - I.forceMove(src) - stored_oxygen_tanks.Add(I) - update_icon() - to_chat(user, "You put [I] in [src].") - else - to_chat(user, "[src] is full.") - SSnanoui.update_uis(src) + try_insert_tank(user, stored_oxygen_tanks, I) return + if(istype(I, /obj/item/tank/plasma)) - if(stored_plasma_tanks.len < 10) - user.drop_item() - I.forceMove(src) - stored_plasma_tanks.Add(I) - update_icon() - to_chat(user, "You put [I] in [src].") - else - to_chat(user, "[src] is full.") - SSnanoui.update_uis(src) + try_insert_tank(user, stored_plasma_tanks, I) return + if(istype(I, /obj/item/wrench)) if(anchored) to_chat(user, "You lean down and unwrench [src].") @@ -115,37 +101,49 @@ // The oxygen tank button if(href_list["oxygen"]) - if(!stored_oxygen_tanks.len) // No more tanks in the machine - return - - var/obj/item/tank/O = stored_oxygen_tanks[1] // Get the first tank in the list - stored_oxygen_tanks.Remove(O) // remove it from the list since we are ejecting the tank - - if(!usr.put_in_hands(O)) // Try to place it in the user's hands first - O.forceMove(loc) // If hands are full, place it at the location of the tank dispenser - to_chat(usr, "You take [O] out of [src].") - update_icon() + try_remove_tank(usr, stored_oxygen_tanks) // The plasma tank button if(href_list["plasma"]) - if(!stored_plasma_tanks.len) - return - - var/obj/item/tank/P = stored_plasma_tanks[1] - stored_plasma_tanks.Remove(P) - - if(!usr.put_in_hands(P)) - P.forceMove(loc) - to_chat(usr, "You take [P] out of [src].") - update_icon() + try_remove_tank(usr, stored_plasma_tanks) add_fingerprint(usr) updateUsrDialog() - SSnanoui.update_uis(src) + SSnanoui.try_update_ui(usr, src) else SSnanoui.close_user_uis(usr,src) return TRUE +/// Called when the user clicks on the oxygen or plasma tank UI buttons, and tries to withdraw a tank. +/obj/structure/dispenser/proc/try_remove_tank(mob/living/user, list/tank_list) + if(!tank_list.len) + return // There are no tanks left to withdraw. + + var/obj/item/tank/T = tank_list[1] + tank_list.Remove(T) + + if(!user.put_in_hands(T)) + T.forceMove(loc) // If the user's hands are full, place it on the tile of the dispenser. + + to_chat(user, "You take [T] out of [src].") + update_icon() + +/// Called when the user clicks on the dispenser with a tank. Tries to insert the tank into the dispenser, and updates the UI if successful. +/obj/structure/dispenser/proc/try_insert_tank(mob/living/user, list/tank_list, obj/item/tank/T) + if(!tank_list.len >= 10) + to_chat(user, "[src] is full.") + return + + if(!user.drop_item()) // Antidrop check + to_chat(user, "[T] is stuck to your hand!") + return + + T.forceMove(src) + tank_list.Add(T) + update_icon() + to_chat(user, "You put [T] in [src].") + SSnanoui.try_update_ui(user, src) + /obj/structure/tank_dispenser/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) for(var/X in src)