Adds direct support for weakrefs to vv (#64521)

* Adds direct support for weakrefs to vv

* Update code/modules/admin/view_variables/get_variables.dm

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Fine, have a readable name.

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
This commit is contained in:
AnturK
2022-02-02 00:34:43 -05:00
committed by GitHub
co-authored by Mothblocks
parent 51b6fcdd2a
commit c244d6c69a
4 changed files with 37 additions and 0 deletions
+3
View File
@@ -25,6 +25,7 @@
#define VV_BITFIELD "Bitfield"
#define VV_TEXT_LOCATE "Custom Reference Locate"
#define VV_PROCCALL_RETVAL "Return Value of Proccall"
#define VV_WEAKREF "Weak Reference Datum"
#define VV_MSG_MARKED "<br><font size='1' color='red'><b>Marked Object</b></font>"
#define VV_MSG_EDITED "<br><font size='1' color='red'><b>Var Edited</b></font>"
@@ -163,3 +164,5 @@
#define VV_HK_SPELL_UNSET_HUMANONLY "spell_unset_humanonly"
/// Abstract mobs such as brains or pAIs can cast this spell.
#define VV_HK_SPELL_UNSET_NONABSTRACT "spell_unset_nonabstract"
#define VV_HK_WEAKREF_RESOLVE "weakref_resolve"
+14
View File
@@ -75,3 +75,17 @@
/datum/weakref/proc/resolve()
var/datum/D = locate(reference)
return (!QDELETED(D) && D.weak_reference == src) ? D : null
/datum/weakref/vv_get_dropdown()
. = ..()
VV_DROPDOWN_OPTION(VV_HK_WEAKREF_RESOLVE, "Go to reference")
/datum/weakref/vv_do_topic(list/href_list)
. = ..()
if(href_list[VV_HK_WEAKREF_RESOLVE])
if(!check_rights(NONE))
return
var/datum/R = resolve()
if(R)
usr.client.debug_variables(R)
@@ -61,6 +61,9 @@
item = "[name_part] = <a href='?_src_=vars;[HrefToken()];Vars=[REF(value)]'>[DV] [DV.type] [REF(value)]</a>"
else
item = "[name_part] = <a href='?_src_=vars;[HrefToken()];Vars=[REF(value)]'>[DV.type] [REF(value)]</a>"
if(istype(value,/datum/weakref))
var/datum/weakref/weakref = value
item += " <a href='?_src_=vars;[HrefToken()];Vars=[REF(weakref.reference)]'>(Resolve)</a>"
else if (islist(value))
var/list/L = value
@@ -28,6 +28,9 @@
else if(istype(var_value, /client))
. = VV_CLIENT
else if(istype(var_value, /datum/weakref))
. = VV_WEAKREF
else if(istype(var_value, /datum))
. = VV_DATUM_REFERENCE
@@ -78,6 +81,7 @@
VV_RESTORE_DEFAULT,
VV_TEXT_LOCATE,
VV_PROCCALL_RETVAL,
VV_WEAKREF,
)
var/markstring
@@ -201,6 +205,19 @@
return
.["value"] = things[value]
if(VV_WEAKREF)
var/type = pick_closest_path(FALSE, get_fancy_list_of_datum_types())
var/subtypes = vv_subtype_prompt(type)
if(subtypes == null)
.["class"] = null
return
var/list/things = vv_reference_list(type, subtypes)
var/value = input("Select reference:", "Reference", current_value) as null|anything in things
if(!value)
.["class"] = null
return
.["value"] = WEAKREF(things[value])
if(VV_CLIENT)
.["value"] = input("Select reference:", "Reference", current_value) as null|anything in GLOB.clients
if(.["value"] == null)