mirror of
https://github.com/goonstation/goonstation-2020.git
synced 2026-07-19 11:02:20 +01:00
69 lines
2.9 KiB
Plaintext
69 lines
2.9 KiB
Plaintext
/datum/puzzlewizard/connecttool
|
|
name = "AB TOOL: Connections"
|
|
var/selection
|
|
|
|
var/obj/adventurepuzzle/triggerer/selected
|
|
|
|
initialize()
|
|
selection = unpool(/obj/adventurepuzzle/marker)
|
|
boutput(usr, "<span style=\"color:blue\">Left click a triggerer to select it. Left click a triggerable while a triggerer is selected to assign, right click to unassign. Ctrl+click to finish.</span>")
|
|
boutput(usr, "<span style=\"color:blue\">Valid triggerers: trigger, button, pressure pad, key, remote control</span>")
|
|
boutput(usr, "<span style=\"color:blue\">Valid triggerables: door, spawn location, light emitter, sliding wall, traps</span>")
|
|
|
|
build_click(var/mob/user, var/datum/buildmode_holder/holder, var/list/pa, var/atom/object)
|
|
var/turf/T = get_turf(object)
|
|
if (pa.Find("left"))
|
|
if (pa.Find("ctrl"))
|
|
finished = 1
|
|
clear_markers()
|
|
return
|
|
// disregard the thing below this is the worst thing 2014
|
|
var/use_as = null
|
|
if (istype(object, /obj/adventurepuzzle/triggerable/triggerer))
|
|
use_as = input("Use this object as a: ", "Use as", "triggerable") in list("triggerable", "triggerer")
|
|
// fugliest hack shit 2014. someone will *eventually* decide to change one without mirroring it in the other and the game will break terribly
|
|
if (istype(object, /obj/adventurepuzzle/triggerer) || istype(object, /obj/item/adventurepuzzle/triggerer) || use_as == "triggerer")
|
|
clear_markers()
|
|
selected = object
|
|
boutput(usr, "Selected [object]. Showing connections.")
|
|
equip_markers()
|
|
else if ((istype(object, /obj/adventurepuzzle/triggerable) || use_as == "triggerable") && selected)
|
|
if (object in selected.triggered)
|
|
var/act = selected.triggered[object]
|
|
var/list/acts = object:trigger_actions()
|
|
var/newname = input("Modify trigger action for [selected] on [object].", "Modify action", act) in acts
|
|
selected.triggered[object] = acts[newname]
|
|
selected.special_trigger_input(object)
|
|
else
|
|
var/list/acts = object:trigger_actions()
|
|
var/act = acts[1]
|
|
var/newname = input("Set trigger action for [selected] on [object].", "Set action", act) in acts
|
|
selected.triggered += object
|
|
selected.triggered[object] = acts[newname]
|
|
selected.special_trigger_input(object)
|
|
object.overlays += selection
|
|
else if (istype(object, /obj/adventurepuzzle/triggerable) || use_as == "triggerable")
|
|
boutput(usr, "<span style=\"color:red\">Select a triggerer first!</span>")
|
|
else if (pa.Find("right"))
|
|
if (T)
|
|
if (istype(object, /obj/adventurepuzzle/triggerable))
|
|
if (object in selected.triggered)
|
|
selected.triggered -= object
|
|
selected.special_trigger_remove(object)
|
|
object.overlays -= selection
|
|
|
|
disposing()
|
|
clear_markers()
|
|
pool(selection)
|
|
|
|
proc/clear_markers()
|
|
if (!selected)
|
|
return
|
|
for (var/obj/O in selected.triggered)
|
|
O.overlays -= selection
|
|
|
|
proc/equip_markers()
|
|
if (!selected)
|
|
return
|
|
for (var/obj/O in selected.triggered)
|
|
O.overlays += selection |