From 3724eb3ef06f3828d946e763ceea79855279a84f Mon Sep 17 00:00:00 2001
From: S34N <12197162+S34NW@users.noreply.github.com>
Date: Thu, 8 Jul 2021 22:16:44 +0100
Subject: [PATCH] Refactors AI slipping machines (#16265)
* refactors AI slipping machines
* spans
* Update code/game/machinery/ai_slipper.dm
Co-authored-by: dearmochi <1496804+dearmochi@users.noreply.github.com>
Co-authored-by: dearmochi <1496804+dearmochi@users.noreply.github.com>
---
code/_onclick/ai.dm | 8 --
code/_onclick/cyborg.dm | 10 ---
code/game/machinery/ai_slipper.dm | 143 ++++++++----------------------
3 files changed, 38 insertions(+), 123 deletions(-)
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index a907a5dfc45..b023aaa4dd0 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -215,11 +215,3 @@
if(!ai_control_check(user))
return
toggle_light(user)
-
-// AI-CONTROLLED SLIP GENERATOR IN AI CORE
-
-/obj/machinery/ai_slipper/AICtrlClick(mob/living/silicon/ai/user) //Turns liquid dispenser on or off
- ToggleOn()
-
-/obj/machinery/ai_slipper/AIAltClick() //Dispenses liquid if on
- Activate()
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 2bf62cdc5c7..e9e27a53387 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -169,16 +169,6 @@
/obj/machinery/power/apc/BorgCtrlClick(mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code.
AICtrlClick(user)
-
-// AI SLIPPER
-
-/obj/machinery/ai_slipper/BorgCtrlClick(mob/living/silicon/robot/user) //Turns liquid dispenser on or off
- ToggleOn()
-
-/obj/machinery/ai_slipper/BorgAltClick(mob/living/silicon/robot/user) //Dispenses liquid if on
- Activate()
-
-
// TURRETCONTROL
/obj/machinery/turretid/BorgCtrlClick(mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code.
diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm
index 45cd917c39b..a9cc35874bb 100644
--- a/code/game/machinery/ai_slipper.dm
+++ b/code/game/machinery/ai_slipper.dm
@@ -4,133 +4,66 @@
icon_state = "liquid_dispenser"
layer = 3
plane = FLOOR_PLANE
- anchored = 1.0
+ anchored = TRUE
max_integrity = 200
armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
var/uses = 20
- var/disabled = TRUE
- var/lethal = 0
- var/locked = TRUE
- var/cooldown_time = 0
- var/cooldown_timeleft = 0
+ var/cooldown_time = 10 SECONDS
var/cooldown_on = FALSE
req_access = list(ACCESS_AI_UPLOAD)
+/obj/machinery/ai_slipper/examine(mob/user)
+ . = ..()
+ . += "A small counter shows it has: [uses] use\s remaining."
+
/obj/machinery/ai_slipper/power_change()
- if(stat & BROKEN)
- update_icon()
+ if(powered())
+ stat &= ~NOPOWER
else
- if( powered() )
- stat &= ~NOPOWER
- else
- stat |= NOPOWER
- disabled = TRUE
- update_icon()
-
-/obj/machinery/ai_slipper/proc/setState(enabled, uses)
- disabled = disabled
- uses = uses
- power_change()
-
-/obj/machinery/ai_slipper/attackby(obj/item/W, mob/user, params)
- if(stat & (NOPOWER|BROKEN))
- return
- if(istype(user, /mob/living/silicon))
- return attack_hand(user)
- if(allowed(usr)) // trying to unlock the interface
- locked = !locked
- to_chat(user, "You [locked ? "lock" : "unlock"] the device.")
- if(locked)
- if(user.machine == src)
- user.unset_machine()
- user << browse(null, "window=ai_slipper")
- else
- if(user.machine == src)
- attack_hand(usr)
- return
- return ..()
-
-/obj/machinery/ai_slipper/proc/ToggleOn()
- if(stat & (NOPOWER|BROKEN))
- return
- disabled = !disabled
+ stat |= NOPOWER
update_icon()
-/obj/machinery/ai_slipper/proc/Activate()
+/obj/machinery/ai_slipper/attack_ai(mob/user)
+ add_hiddenprint(user)
+ return attack_hand(user)
+
+/obj/machinery/ai_slipper/attack_ghost(mob/user)
+ if(user.can_advanced_admin_interact())
+ Activate(user)
+
+/obj/machinery/ai_slipper/attack_hand(mob/user)
+ if(stat & (NOPOWER|BROKEN))
+ to_chat(user, "[src] has no power or is broken!")
+ return
+ if(!allowed(user))
+ to_chat(user, "Access denied.")
+ return
+ Activate(user)
+
+/obj/machinery/ai_slipper/proc/Activate(mob/user)
if(stat & (NOPOWER|BROKEN))
return
- if(cooldown_on || disabled)
+ if(!uses)
+ to_chat(user, "[src] is empty!")
+ return
+ if(cooldown_on)
+ to_chat(user, "[src] is still recharging!")
return
else
new /obj/effect/particle_effect/foam(loc)
uses--
cooldown_on = TRUE
- cooldown_time = world.timeofday + 100
- slip_process()
+ power_change()
+ addtimer(CALLBACK(src, .proc/recharge), cooldown_time)
/obj/machinery/ai_slipper/update_icon()
- if(stat & (NOPOWER|BROKEN) || disabled)
+ if(stat & (NOPOWER|BROKEN) || cooldown_on || !uses)
icon_state = "liquid_dispenser"
else
icon_state = "liquid_dispenser_on"
-/obj/machinery/ai_slipper/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/machinery/ai_slipper/attack_ghost(mob/user)
- return attack_hand(user)
-
-/obj/machinery/ai_slipper/attack_hand(mob/user)
- if(stat & (NOPOWER|BROKEN))
+/obj/machinery/ai_slipper/proc/recharge()
+ if(!uses)
return
-
- if(get_dist(src, user) > 1 && (!issilicon(user) && !user.can_admin_interact()))
- to_chat(user, "Too far away.")
- user.unset_machine()
- user << browse(null, "window=ai_slipper")
- return
-
- user.set_machine(src)
- var/area/myarea = get_area(src)
- var/t = "AI Liquid Dispenser ([myarea.name])
"
-
- if(locked && (!issilicon(user) && !user.can_admin_interact()))
- t += "(Swipe ID card to unlock control panel.)
"
- else
- t += text("Dispenser [] - []?
\n", disabled ? "deactivated" : "activated", disabled ? "Enable" : "Disable")
- t += text("Uses Left: [uses]. Activate the dispenser?
\n")
-
- user << browse(t, "window=computer;size=575x450")
- onclose(user, "computer")
-
-/obj/machinery/ai_slipper/Topic(href, href_list)
- if(..())
- return 1
-
- if(locked && (!issilicon(usr) && !usr.can_admin_interact()))
- to_chat(usr, "Control panel is locked!")
- return 1
-
- if(href_list["toggleOn"])
- ToggleOn()
-
- if(href_list["toggleUse"])
- Activate()
-
- attack_hand(usr)
-
-/obj/machinery/ai_slipper/proc/slip_process()
- while(cooldown_time - world.timeofday > 0)
- var/ticksleft = cooldown_time - world.timeofday
-
- if(ticksleft > 1e5)
- cooldown_time = world.timeofday + 10 // midnight rollover
-
-
- cooldown_timeleft = (ticksleft / 10)
- sleep(5)
- if(uses <= 0)
- return
- if(uses >= 0)
- cooldown_on = FALSE
+ cooldown_on = FALSE
power_change()