Files
Aurora.3/code/modules/admin/buildmode/edit.dm
Fluffy 513facdb0d Refactored deletion observables to use the COMSIG_QDELETING signal (#20121)
Refactored deletion observables to use the COMSIG_QDELETING signal
instead, removed the observable.
2024-11-04 21:51:18 +00:00

82 lines
2.9 KiB
Plaintext

/datum/build_mode/edit
name = "Edit"
icon_state = "buildmode3"
var/var_to_edit = "name"
var/value_to_set = "derp"
/datum/build_mode/edit/Destroy()
ClearValue()
. = ..()
/datum/build_mode/edit/Help()
to_chat(user, SPAN_NOTICE("***********************************************************"))
to_chat(user, SPAN_NOTICE("Right Click on Build Mode Button = Select var & value"))
to_chat(user, SPAN_NOTICE("Left Click = Sets the var's value"))
to_chat(user, SPAN_NOTICE("Right Click = Reset the var's value"))
to_chat(user, SPAN_NOTICE("***********************************************************"))
/datum/build_mode/edit/Configurate()
var/var_name = input("Enter variable name:", "Name", var_to_edit) as text|null
if(!var_name)
return
var/thetype = input("Select variable type:", "Type") as null|anything in list("text","number","mob-reference","obj-reference","turf-reference")
if(!thetype) return
var/new_value
switch(thetype)
if("text")
new_value = input(usr,"Enter variable value:" ,"Value", value_to_set) as text|null
if("number")
new_value = input(usr,"Enter variable value:" ,"Value", value_to_set) as num|null
if("mob-reference")
new_value = input(usr,"Enter variable value:" ,"Value", value_to_set) as null|mob in GLOB.mob_list
if("obj-reference")
new_value = input(usr,"Enter variable value:" ,"Value", value_to_set) as null|obj in world
if("turf-reference")
new_value = input(usr,"Enter variable value:" ,"Value", value_to_set) as null|turf in world
if(var_name && new_value)
var_to_edit = var_name
SetValue(new_value)
/datum/build_mode/edit/OnClick(var/atom/A, var/list/parameters)
if(var_to_edit in VVlocked)
if(!check_rights(R_DEBUG)) return
if(var_to_edit in VVckey_edit)
if(!check_rights(R_SPAWN|R_DEBUG)) return
if(var_to_edit in VVicon_edit_lock)
if(!check_rights(R_FUN|R_DEBUG)) return
if(!(var_to_edit in A.vars))
to_chat(user, SPAN_WARNING("\The [A] does not have a var '[var_to_edit]'"))
return
var/old_value = A.vars[var_to_edit]
var/new_value
if(parameters["left"])
new_value = value_to_set
if(parameters["right"])
new_value = initial(A.vars[var_to_edit])
if(old_value == new_value)
return
A.vars[var_to_edit] = new_value
to_chat(user, SPAN_NOTICE("Changed the value of [var_to_edit] from '[old_value]' to '[new_value]'."))
Log("[log_info_line(A)] - [var_to_edit] - [old_value] -> [new_value]")
/datum/build_mode/edit/proc/SetValue(var/new_value)
if(value_to_set == new_value)
return
ClearValue()
value_to_set = new_value
RegisterSignal(value_to_set, COMSIG_QDELETING, /datum/build_mode/edit/proc/ClearValue)
/datum/build_mode/edit/proc/ClearValue(var/feedback)
if(!istype(value_to_set, /datum))
return
UnregisterSignal(value_to_set, COMSIG_QDELETING)
value_to_set = initial(value_to_set)
if(feedback)
Warn("The selected reference value was deleted. Default value restored.")