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>
This commit is contained in:
S34N
2021-07-08 22:16:44 +01:00
committed by GitHub
co-authored by dearmochi
parent 3dace39060
commit 3724eb3ef0
3 changed files with 38 additions and 123 deletions
-8
View File
@@ -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()
-10
View File
@@ -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.
+38 -105
View File
@@ -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)
. = ..()
. += "<span class='notice'>A small counter shows it has: [uses] use\s remaining.</span>"
/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, "<span class='warning'>[src] has no power or is broken!</span>")
return
if(!allowed(user))
to_chat(user, "<span class='warning'>Access denied.</span>")
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, "<span class='warning'>[src] is empty!</span>")
return
if(cooldown_on)
to_chat(user, "<span class='warning'>[src] is still recharging!</span>")
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, "<span class='warning'>Too far away.</span>")
user.unset_machine()
user << browse(null, "window=ai_slipper")
return
user.set_machine(src)
var/area/myarea = get_area(src)
var/t = "<TT><B>AI Liquid Dispenser</B> ([myarea.name])<HR>"
if(locked && (!issilicon(user) && !user.can_admin_interact()))
t += "<I>(Swipe ID card to unlock control panel.)</I><BR>"
else
t += text("Dispenser [] - <A href='?src=[UID()];toggleOn=1'>[]?</a><br>\n", disabled ? "deactivated" : "activated", disabled ? "Enable" : "Disable")
t += text("Uses Left: [uses]. <A href='?src=[UID()];toggleUse=1'>Activate the dispenser?</A><br>\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()