From ca8da172db02332948f73c05919f2c29e80073c0 Mon Sep 17 00:00:00 2001 From: Synthasmagoria Date: Sun, 14 Dec 2025 21:58:25 +0100 Subject: [PATCH] Colors, instance vars, custom types --- .../objDebugInspector.object.gmx | 133 ++++++++++++++---- .../scrDebugInspectorInitialize.gml | 11 +- 2 files changed, 110 insertions(+), 34 deletions(-) diff --git a/add after objDebugList/objDebugInspector.object.gmx b/add after objDebugList/objDebugInspector.object.gmx index cb85727..b663930 100644 --- a/add after objDebugList/objDebugInspector.object.gmx +++ b/add after objDebugList/objDebugInspector.object.gmx @@ -28,7 +28,7 @@ event_inherited(); enum __INSPECTOR_TYPES { - REAL, STRING, ARRAY, BOOL, UNDEFINED, UNKNOWN + NOT_SET, REAL, STRING, ARRAY, BOOL, UNDEFINED, SPRITE_ASSET, COLOR, UNKNOWN } target = noone; @@ -62,9 +62,52 @@ variable_number = -1; 1 - variable_names = variable_instance_get_names(target); -variable_number = array_length_1d(variable_names); -variable_types = array_create(variable_number); + if (global.__synthasmagoria_debug_inspector_show_instance_vars) { + var _instance_variable_names = array_create(22); + var _instance_variable_types = array_create(22); + _instance_variable_names[0] = "solid"; + _instance_variable_types[0] = __INSPECTOR_TYPES.BOOL; + _instance_variable_names[1] = "visible"; + _instance_variable_types[1] = __INSPECTOR_TYPES.BOOL; + _instance_variable_names[2] = "persistent"; + _instance_variable_types[2] = __INSPECTOR_TYPES.BOOL; + _instance_variable_names[3] = "depth"; + _instance_variable_names[4] = "sprite_index"; + _instance_variable_types[4] = __INSPECTOR_TYPES.SPRITE_ASSET; + _instance_variable_names[5] = "sprite_width"; + _instance_variable_names[6] = "sprite_height"; + _instance_variable_names[7] = "sprite_xoffset"; + _instance_variable_names[8] = "sprite_yoffset"; + _instance_variable_names[9] = "image_alpha"; + _instance_variable_names[10] = "image_angle"; + _instance_variable_names[11] = "image_blend"; + _instance_variable_types[11] = __INSPECTOR_TYPES.COLOR; + _instance_variable_names[12] = "image_index"; + _instance_variable_names[13] = "image_number"; + _instance_variable_names[14] = "image_speed"; + _instance_variable_names[15] = "image_xscale"; + _instance_variable_names[16] = "image_yscale"; + _instance_variable_names[17] = "mask_index"; + _instance_variable_types[17] = __INSPECTOR_TYPES.COLOR; + _instance_variable_names[18] = "bbox_bottom"; + _instance_variable_names[19] = "bbox_left"; + _instance_variable_names[20] = "bbox_right"; + _instance_variable_names[21] = "bbox_top"; + var _custom_instance_variable_names = variable_instance_get_names(target); + var _custom_instance_variable_count = array_length_1d(_custom_instance_variable_names); + var _instance_variable_count = array_length_1d(_instance_variable_names); + variable_number = _instance_variable_count + _custom_instance_variable_count; + variable_names = array_create(variable_number); + variable_types = array_create(variable_number); + array_copy(variable_names, 0, _custom_instance_variable_names, 0, _custom_instance_variable_count); + array_copy(variable_names, _custom_instance_variable_count, _instance_variable_names, 0, _instance_variable_count); + array_copy(variable_types, _custom_instance_variable_count, _instance_variable_types, 0, _instance_variable_count); + +} else { + variable_names = variable_instance_get_names(target); + variable_number = array_length_1d(variable_names); + variable_types = array_create(variable_number); +} variable_values = array_create(variable_number); variable_strings = array_create(variable_number); variable_strings_rendered = array_create(variable_number); @@ -73,32 +116,58 @@ var _val; for (var i = 0; i < variable_number; i++) { _val = variable_instance_get(target, variable_names[i]); variable_values[i] = _val; - if (is_undefined(_val)) { - variable_strings[i] = string(_val); - variable_types[i] = __INSPECTOR_TYPES.UNDEFINED; - } else if (is_bool(_val)) { - variable_strings[i] = string(_val); - variable_types[i] = __INSPECTOR_TYPES.BOOL; - } else if (is_real(_val)) { - variable_strings[i] = string(_val); - variable_types[i] = __INSPECTOR_TYPES.REAL; - } else if (is_string(_val)) { - variable_strings[i] = "'" + _val + "'"; - variable_types[i] = __INSPECTOR_TYPES.STRING; - } else if (is_array(_val)) { - var _buf_str = buffer_create(512, buffer_grow, 1); - buffer_write(_buf_str, buffer_text, "["); - for (var ii = 0, nn = array_length_1d(_val); ii < nn; ii++) { - buffer_write(_buf_str, buffer_text, string(_val[ii]) + ", "); + switch (variable_types[i]) { + case __INSPECTOR_TYPES.NOT_SET: + if (is_undefined(_val)) { + variable_strings[i] = string(_val); + variable_types[i] = __INSPECTOR_TYPES.UNDEFINED; + } else if (is_bool(_val)) { + if (_val) { + variable_strings[i] = "true"; + } else { + variable_strings[i] = "false"; + } + variable_types[i] = __INSPECTOR_TYPES.BOOL; + } else if (is_real(_val)) { + variable_strings[i] = string(_val); + variable_types[i] = __INSPECTOR_TYPES.REAL; + } else if (is_string(_val)) { + variable_strings[i] = "'" + _val + "'"; + variable_types[i] = __INSPECTOR_TYPES.STRING; + } else if (is_array(_val)) { + var _buf_str = buffer_create(512, buffer_grow, 1); + buffer_write(_buf_str, buffer_text, "["); + for (var ii = 0, nn = array_length_1d(_val); ii < nn; ii++) { + buffer_write(_buf_str, buffer_text, string(_val[ii]) + ", "); + } + buffer_write(_buf_str, buffer_text, "]"); + buffer_seek(_buf_str, buffer_seek_start, 0); + variable_strings[i] = buffer_read(_buf_str, buffer_text); + buffer_delete(_buf_str); + variable_types[i] = __INSPECTOR_TYPES.ARRAY; + } else { + variable_strings[i] = string(_val); + variable_types[i] = __INSPECTOR_TYPES.UNKNOWN; } - buffer_write(_buf_str, buffer_text, "]"); - buffer_seek(_buf_str, buffer_seek_start, 0); - variable_strings[i] = buffer_read(_buf_str, buffer_text); - buffer_delete(_buf_str); - variable_types[i] = __INSPECTOR_TYPES.ARRAY; - } else { - variable_strings[i] = string(_val); - variable_types[i] = __INSPECTOR_TYPES.UNKNOWN; + break; + + case __INSPECTOR_TYPES.SPRITE_ASSET: + variable_strings[i] = sprite_get_name(_val) + " (" + string(_val) + ")"; + break; + + case __INSPECTOR_TYPES.COLOR: + variable_strings[i] = "{r: " + string(color_get_red(_val)) + ", g: " + string(color_get_blue(_val)) + ", b: " + string(color_get_green(_val)) + "}"; + break; + + case __INSPECTOR_TYPES.BOOL: + if (_val) { + variable_strings[i] = "true"; + } else { + variable_strings[i] = "false"; + } + break; + + // note: the others aren't implemented so if a custom variable type is set then it will crash with DoAdd } variable_strings_rendered[i] = variable_names[i] + ": " + variable_strings[i]; @@ -109,6 +178,12 @@ items = variable_strings_rendered; event_inherited(); +if (global.__synthasmagoria_debug_inspector_show_instance_vars) { + for (var i = array_length_1d(items) - array_length_1d(_instance_variable_names), n = array_length_1d(items); i < n; i++) { + item_colors[i] = c_lime; + } +} + var _view = scrDebugInspectorGetView(0); x = target.bbox_right + box_padding - _view[0]; if (x + width >= _view[2]) { diff --git a/add after objDebugList/scrDebugInspectorInitialize.gml b/add after objDebugList/scrDebugInspectorInitialize.gml index ea4cb7f..ae6ffd7 100644 --- a/add after objDebugList/scrDebugInspectorInitialize.gml +++ b/add after objDebugList/scrDebugInspectorInitialize.gml @@ -1,4 +1,4 @@ -///scrDebugInspectorInitialize(global_game_start_name, [debug_key], [font]) +///scrDebugInspectorInitialize(global_game_start_name, show_instance_vars, [debug_key], [font]) if (instance_exists(objDebugInspectorControl)) { exit; } @@ -8,14 +8,15 @@ if (variable_global_exists(argument0)) { show_error("Global variable '" + argument0 + "' didn't exist", false); global.__synthasmagoria_debug_inspector_global_game_start_name = "@"; } +global.__synthasmagoria_debug_inspector_show_instance_vars = argument1; var _debug_key = -1; -if (argument_count > 1) { - _debug_key = argument[1]; +if (argument_count > 2) { + _debug_key = argument[2]; } global.__synthasmagoria_debug_inspector_debug_key = _debug_key; var _font = -1; -if (argument_count > 2) { - _font = argument[2]; +if (argument_count > 3) { + _font = argument[3]; } global.__synthasmagoria_debug_inspector_font = _font; instance_create(0, 0, objDebugInspectorControl);