Files
Paradise/code/_globalvars/bitfields.dm
Contrabang 9b2cd0abea Adds Bitfields to the VV menu (#27266)
* Adds Bitfields to the VV menu

* oops

* fixed

* oops

* woo

---------

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
2024-11-09 22:49:51 +00:00

96 lines
2.6 KiB
Plaintext

GLOBAL_LIST_INIT(bitfields, generate_bitfields())
/// Specifies a bitfield for smarter debugging
/datum/bitfield
/// The variable name that contains the bitfield
var/variable
/// An associative list of the readable flag and its true value
var/list/flags
/datum/bitfield/can_vv_delete()
return FALSE
/datum/bitfield/vv_edit_var(var_name, var_value)
return FALSE // no.
/// Turns /datum/bitfield subtypes into a list for use in debugging
/proc/generate_bitfields()
var/list/bitfields = list()
for(var/_bitfield in subtypesof(/datum/bitfield))
var/datum/bitfield/bitfield = new _bitfield
bitfields[bitfield.variable] = bitfield.flags
return bitfields
/proc/translate_bitfield(variable_type, variable_name, variable_value)
if(variable_type != VV_BITFIELD)
return variable_value
var/list/flags = list()
for(var/flag in GLOB.bitfields[variable_name])
if(variable_value & GLOB.bitfields[variable_name][flag])
flags += flag
if(length(flags))
return jointext(flags, ", ")
return "NONE"
/proc/input_bitfield(mob/user, bitfield, current_value)
if(!user || !(bitfield in GLOB.bitfields))
return
var/list/currently_checked = list()
for(var/name in GLOB.bitfields[bitfield])
currently_checked[name] = (current_value & GLOB.bitfields[bitfield][name])
var/list/result = tgui_input_checkbox_list(user, "Editing bitfield for [bitfield].", "Editing bitfield", currently_checked)
if(isnull(result) || !islist(result))
return
var/new_result = 0
for(var/name in GLOB.bitfields[bitfield])
if(result[name])
new_result |= GLOB.bitfields[bitfield][name]
return new_result
// MARK: Default byond bitfields
DEFINE_BITFIELD(appearance_flags, list(
"KEEP_APART" = KEEP_APART,
"KEEP_TOGETHER" = KEEP_TOGETHER,
"LONG_GLIDE" = LONG_GLIDE,
"NO_CLIENT_COLOR" = NO_CLIENT_COLOR,
"PIXEL_SCALE" = PIXEL_SCALE,
"PLANE_MASTER" = PLANE_MASTER,
"RESET_ALPHA" = RESET_ALPHA,
"RESET_COLOR" = RESET_COLOR,
"RESET_TRANSFORM" = RESET_TRANSFORM,
"TILE_BOUND" = TILE_BOUND,
"PASS_MOUSE" = PASS_MOUSE,
"TILE_MOVER" = TILE_MOVER,
))
DEFINE_BITFIELD(sight, list(
"BLIND" = BLIND,
"SEE_BLACKNESS" = SEE_BLACKNESS,
"SEE_INFRA" = SEE_INFRA,
"SEE_MOBS" = SEE_MOBS,
"SEE_OBJS" = SEE_OBJS,
"SEE_PIXELS" = SEE_PIXELS,
"SEE_SELF" = SEE_SELF,
"SEE_THRU" = SEE_THRU,
"SEE_TURFS" = SEE_TURFS,
))
DEFINE_BITFIELD(vis_flags, list(
"VIS_HIDE" = VIS_HIDE,
"VIS_INHERIT_DIR" = VIS_INHERIT_DIR,
"VIS_INHERIT_ICON" = VIS_INHERIT_ICON,
"VIS_INHERIT_ICON_STATE" = VIS_INHERIT_ICON_STATE,
"VIS_INHERIT_ID" = VIS_INHERIT_ID,
"VIS_INHERIT_LAYER" = VIS_INHERIT_LAYER,
"VIS_INHERIT_PLANE" = VIS_INHERIT_PLANE,
"VIS_UNDERLAY" = VIS_UNDERLAY,
))
// MARK: Other bitfields