From 79672e9765495a2a423f4a74966e30bda18599ba Mon Sep 17 00:00:00 2001 From: Tanasart Date: Sat, 9 Dec 2023 15:00:35 +0700 Subject: [PATCH] collection settings --- PixelComposer.resource_order | 1 + PixelComposer.yyp | 2 + scripts/node_collection/node_collection.gml | 2 +- .../node_iterate_sort/node_iterate_sort.gml | 2 +- scripts/node_registry/node_registry.gml | 12 +-- scripts/node_scatter/node_scatter.gml | 9 ++- scripts/panel_collection/panel_collection.gml | 15 +++- .../panel_collections_settings.gml | 27 +++++++ .../panel_collections_settings.yy | 11 +++ .../panel_console.gml | 73 +++++++++++++++++++ scripts/render_data/render_data.gml | 72 ++---------------- 11 files changed, 147 insertions(+), 79 deletions(-) create mode 100644 scripts/panel_collections_settings/panel_collections_settings.gml create mode 100644 scripts/panel_collections_settings/panel_collections_settings.yy create mode 100644 scripts/panel_collections_settings/panel_console.gml diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 30d424276..4baa3050c 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -246,6 +246,7 @@ {"name":"button","order":34,"path":"folders/widgets/button.yy",}, {"name":"rotator","order":35,"path":"folders/widgets/rotator.yy",}, {"name":"text","order":36,"path":"folders/widgets/text.yy",}, + {"name":"collection","order":11,"path":"folders/panels/collection.yy",}, ], "ResourceOrderSettings": [ {"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 74e591988..49e53e8e9 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -281,6 +281,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"button","folderPath":"folders/widgets/button.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"rotator","folderPath":"folders/widgets/rotator.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"text","folderPath":"folders/widgets/text.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"collection","folderPath":"folders/panels/collection.yy",}, ], "IncludedFiles": [ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",}, @@ -2854,6 +2855,7 @@ {"id":{"name":"node_level","path":"scripts/node_level/node_level.yy",},}, {"id":{"name":"node_pb","path":"scripts/node_pb/node_pb.yy",},}, {"id":{"name":"panel_test","path":"scripts/panel_test/panel_test.yy",},}, + {"id":{"name":"panel_collections_settings","path":"scripts/panel_collections_settings/panel_collections_settings.yy",},}, {"id":{"name":"o_dialog_warning","path":"objects/o_dialog_warning/o_dialog_warning.yy",},}, {"id":{"name":"s_node_group_output","path":"sprites/s_node_group_output/s_node_group_output.yy",},}, {"id":{"name":"node_path_l_system","path":"scripts/node_path_l_system/node_path_l_system.yy",},}, diff --git a/scripts/node_collection/node_collection.gml b/scripts/node_collection/node_collection.gml index 48643c630..d45161fb2 100644 --- a/scripts/node_collection/node_collection.gml +++ b/scripts/node_collection/node_collection.gml @@ -130,7 +130,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc insp2UpdateIcon = [ THEME.cache, 0, COLORS._main_icon ]; static inspector1Update = function() { onInspector1Update(); } - static onInspector1Update = function() { RenderListAction(nodes, group); } + static onInspector1Update = function() { RenderList(nodes, true); } static hasInspector1Update = function(group = false) { #region for( var i = 0; i < ds_list_size(nodes); i++ ) { if(nodes[| i].hasInspector1Update()) diff --git a/scripts/node_iterate_sort/node_iterate_sort.gml b/scripts/node_iterate_sort/node_iterate_sort.gml index 39248a972..bc1262e93 100644 --- a/scripts/node_iterate_sort/node_iterate_sort.gml +++ b/scripts/node_iterate_sort/node_iterate_sort.gml @@ -111,7 +111,7 @@ function Node_Iterate_Sort(_x, _y, _group = noone) : Node_Collection(_x, _y, _gr inputNodes[1].setValue(val2,,, false); resetRender(true); - RenderList(topoList, false); + RenderList(topoList); var res = outputNode.getValue(); LOG_IF(global.FLAG.render == 1, $"Iterating | Comparing {val1}, {val2} = {res}"); diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 03b155d1d..6bb61d012 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -658,7 +658,7 @@ function __initNodes() { ds_list_add(values, "Numbers"); addNodeObject(values, "Number", s_node_number, "Node_Number", [1, Node_Number]); addNodeObject(values, "To Number", s_node_to_number, "Node_To_Number", [1, Node_To_Number]).setVersion(1145); - addNodeObject(values, "Math", s_node_math, "Node_Math", [0, Node_create_Math], [ "add", "subtract", "multiply", "divide", "power", "modulo", "round", "ceiling", "floor", "sin", "cos", "tan", "abs" ]); + addNodeObject(values, "Math", s_node_math, "Node_Math", [0, Node_create_Math], [ "add", "subtract", "multiply", "divide", "power", "root", "modulo", "round", "ceiling", "floor", "sin", "cos", "tan", "lerp", "abs" ]); addNodeObject(values, "Equation", s_node_equation, "Node_Equation", [0, Node_create_Equation],, "Evaluate string of equation. With an option for setting variables."); addNodeObject(values, "Random", s_node_random, "Node_Random", [1, Node_Random]); addNodeObject(values, "Statistic", s_node_statistic, "Node_Statistic", [0, Node_create_Statistic], ["sum", "average", "mean", "median", "min", "max"]); @@ -670,11 +670,11 @@ function __initNodes() { addNodeObject(values, "Scatter Points", s_node_scatter_point, "Node_Scatter_Points", [1, Node_Scatter_Points],, "Generate array of vector 2 points for scattering.").setVersion(1120); addNodeObject(values, "Translate Point",s_node_translate_point, "Node_Move_Point", [1, Node_Move_Point]).setVersion(1141); addNodeObject(values, "Dot product", s_node_dot_product, "Node_Vector_Dot", [1, Node_Vector_Dot]).setVersion(1141); - addNodeObject(values, "Cross product 3D", s_node_cross_product_2d, "Node_Vector_Cross_3D", [1, Node_Vector_Cross_3D]).setVersion(1141); - addNodeObject(values, "Cross product 2D", s_node_cross_product_3d, "Node_Vector_Cross_2D", [1, Node_Vector_Cross_2D]).setVersion(1141); - addNodeObject(values, "FFT", s_node_FFT, "Node_FFT", [1, Node_FFT], ["frequency analysis"], "Perform fourier transform on number array.").setVersion(1144); - addNodeObject(values, "Transform Array",s_node_transform_array, "Node_Transform_Array", [1, Node_Transform_Array]).setVersion(1146); - + addNodeObject(values, "Cross product 3D", s_node_cross_product_2d, "Node_Vector_Cross_3D", [1, Node_Vector_Cross_3D]).setVersion(1141); + addNodeObject(values, "Cross product 2D", s_node_cross_product_3d, "Node_Vector_Cross_2D", [1, Node_Vector_Cross_2D]).setVersion(1141); + addNodeObject(values, "FFT", s_node_FFT, "Node_FFT", [1, Node_FFT], ["frequency analysis"], "Perform fourier transform on number array.").setVersion(1144); + addNodeObject(values, "Transform Array", s_node_transform_array, "Node_Transform_Array", [1, Node_Transform_Array]).setVersion(1146); + ds_list_add(values, "Texts"); addNodeObject(values, "Text", s_node_text, "Node_String", [1, Node_String]); addNodeObject(values, "To Text", s_node_to_text, "Node_To_Text", [1, Node_To_Text]).setVersion(1145); diff --git a/scripts/node_scatter/node_scatter.gml b/scripts/node_scatter/node_scatter.gml index 35b17679f..9f8e7f3f5 100644 --- a/scripts/node_scatter/node_scatter.gml +++ b/scripts/node_scatter/node_scatter.gml @@ -164,8 +164,11 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c var vCol = array_exists(useV, "Color"); var _posDist = []; - if(_dist == 2 && is_surface(_distMap)) + if(_dist == NODE_SCATTER_DIST.map) { + if(!is_surface(_distMap)) + return _outSurf; _posDist = get_points_from_dist(_distMap, _amount, seed); + } if(_dist == 4) { var path_valid = path != noone && struct_has(path, "getPointRatio"); @@ -204,13 +207,13 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c sp = area_get_random_point(_area, _dist, _scat, i, _amount, _sed); _sed += 20; _x = sp[0]; _y = sp[1]; - } else if(_dist == NODE_SCATTER_DIST.data) { + } else if(_dist == NODE_SCATTER_DIST.map) { sp = array_safe_get(_posDist, i); if(!is_array(sp)) continue; _x = _area[0] + _area[2] * (sp[0] * 2 - 1.); _y = _area[1] + _area[3] * (sp[1] * 2 - 1.); - } else if(_dist == NODE_SCATTER_DIST.map) { + } else if(_dist == NODE_SCATTER_DIST.data) { sp = array_safe_get(_distData, i); if(!is_array(sp)) continue; diff --git a/scripts/panel_collection/panel_collection.gml b/scripts/panel_collection/panel_collection.gml index 3388fa609..ed883c252 100644 --- a/scripts/panel_collection/panel_collection.gml +++ b/scripts/panel_collection/panel_collection.gml @@ -220,7 +220,7 @@ function Panel_Collection() : PanelContent() constructor { if(sprite_exists(_node.spr)) { var sw = sprite_get_width(_node.spr); var sh = sprite_get_height(_node.spr); - var ss = (grid_size - ui(10)) / max(sw, sh); + var ss = (grid_size - ui(10)) * PREFERENCES.collection_scale / max(sw, sh); var xo = (sprite_get_xoffset(_node.spr) - sw / 2) * ss; var yo = (sprite_get_yoffset(_node.spr) - sh / 2) * ss; @@ -426,7 +426,7 @@ function Panel_Collection() : PanelContent() constructor { var by = ui(9); var bs = ui(32); - if(search_string == "") { + if(search_string == "") { #region if(bx > rootx) { view_tooltip.index = contentView; if(buttonInstant(THEME.button_hide, bx, by, bs, bs, [mx, my], pFOCUS, pHOVER, view_tooltip, THEME.view_mode, contentView) == 2) @@ -483,12 +483,21 @@ function Panel_Collection() : PanelContent() constructor { refreshContext(); } bx -= ui(36); - } else { + + if(bx > rootx) { + var txt = __txt("Settings"); + if(buttonInstant(THEME.button_hide, bx, by, bs, bs, [mx, my], pFOCUS, pHOVER, txt, THEME.gear) == 2) + dialogPanelCall(new Panel_Collections_Setting(), x + bx, y + by - 8, { anchor: ANCHOR.bottom | ANCHOR.left }); + } + bx -= ui(36); + #endregion + } else { #region var tb_w = ui(200); var tb_x = w - ui(10) - tb_w; var tb_y = ui(10); tb_search.draw(tb_x, tb_y, tb_w, TEXTBOX_HEIGHT, search_string, [mx, my]); + #endregion } } #endregion } \ No newline at end of file diff --git a/scripts/panel_collections_settings/panel_collections_settings.gml b/scripts/panel_collections_settings/panel_collections_settings.gml new file mode 100644 index 000000000..7c422b599 --- /dev/null +++ b/scripts/panel_collections_settings/panel_collections_settings.gml @@ -0,0 +1,27 @@ +function Panel_Collections_Setting() : Panel_Linear_Setting() constructor { + title = __txtx("collection_settings", "Collection Settings"); + + w = ui(380); + + #region data + properties = [ + new __Panel_Linear_Setting_Item_Preference( + __txtx("coll_animated", "Animated thumbnail"), + "collection_animated", + new checkBox(function() { PREFERENCES.collection_animated = !PREFERENCES.collection_animated; PREF_SAVE(); }), + ), + new __Panel_Linear_Setting_Item_Preference( + __txtx("coll_animated_speed", "Animation speed"), + "collection_preview_speed", + new textBox(TEXTBOX_INPUT.number, function(val) { PREFERENCES.collection_preview_speed = val; PREF_SAVE(); }), + ), + new __Panel_Linear_Setting_Item_Preference( + __txtx("coll_thumbnail_scale", "Thumbnail scale"), + "collection_scale", + new slider(0, 1, 0.01, function(val) { PREFERENCES.collection_scale = clamp(val, 0.1, 1); PREF_SAVE(); }), + ), + ]; + + setHeight(); + #endregion +} \ No newline at end of file diff --git a/scripts/panel_collections_settings/panel_collections_settings.yy b/scripts/panel_collections_settings/panel_collections_settings.yy new file mode 100644 index 000000000..06d5f793a --- /dev/null +++ b/scripts/panel_collections_settings/panel_collections_settings.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "panel_collections_settings", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "collection", + "path": "folders/panels/collection.yy", + }, +} \ No newline at end of file diff --git a/scripts/panel_collections_settings/panel_console.gml b/scripts/panel_collections_settings/panel_console.gml new file mode 100644 index 000000000..5dff86a32 --- /dev/null +++ b/scripts/panel_collections_settings/panel_console.gml @@ -0,0 +1,73 @@ +function Panel_Console() : PanelContent() constructor { + title = "Console"; + w = ui(640); + h = ui(320); + + command = ""; + history = []; + cmd_history = []; + + cmd_index = 0; + + keyboard_string = ""; + + static submit_command = function() { + if(command == "") return; + array_push(history, { txt: command, color: COLORS._main_text_sub }); + array_push(cmd_history, command); + + var cmd = string_splice(command, " "); + + switch(cmd[0]) { + case "flag": + if(array_length(cmd) < 2) break; + var flg = array_safe_get(cmd, 1, ""); + global.FLAG[$ flg] = !global.FLAG[$ flg]; + + array_push(history, { txt: $"Toggled debug flag: {flg} = {global.FLAG[$ flg]? "True" : "False"}", color: COLORS._main_value_positive }); + break; + } + + keyboard_string = ""; + command = ""; + } + + function drawContent(panel) { + HOTKEY_BLOCK = true; + command = keyboard_string; + + draw_clear_alpha(CDEF.main_dkblack, 1); + + draw_set_color(c_black); + draw_set_alpha(0.75); + draw_rectangle(0, h - ui(28), w, h, false); + draw_set_alpha(1); + + draw_set_text(f_code, fa_left, fa_bottom, COLORS._main_text); + draw_text(ui(8), h - ui(4), command); + draw_set_color(COLORS._main_text_sub); + draw_text(ui(8) + string_width(command), h - ui(4), "_"); + + var hy = h - ui(32); + for( var i = 0; i < array_length(history); i++ ) { + var his = history[array_length(history) - i - 1]; + var txt = his.txt; + + draw_set_color(his.color); + draw_text_ext(ui(8), hy, txt, -1, w - ui(16)); + hy -= string_height_ext(txt, -1, w - ui(16)); + + if(hy <= 0) break; + } + + if(keyboard_check_pressed(vk_enter)) + submit_command(); + + if(keyboard_check_pressed(vk_up)) { + cmd_index = max(0, cmd_index - 1); + keyboard_string = array_safe_get(cmd_history, cmd_index, ""); + command = keyboard_string; + } else if(keyboard_check_pressed(vk_anykey)) + cmd_index = array_length(cmd_history); + } +} \ No newline at end of file diff --git a/scripts/render_data/render_data.gml b/scripts/render_data/render_data.gml index 34708fa98..4851222fb 100644 --- a/scripts/render_data/render_data.gml +++ b/scripts/render_data/render_data.gml @@ -249,7 +249,7 @@ function __renderListReset(list) { #region } } #endregion -function RenderList(list, skipInLoop = true) { #region +function RenderList(list, runAction = false) { #region LOG_BLOCK_START(); LOG_IF(global.FLAG.render == 1, "=============== RENDER LIST START ==============="); var queue = ds_queue_create(); @@ -287,18 +287,20 @@ function RenderList(list, skipInLoop = true) { #region while(!ds_queue_empty(queue)) { LOG_BLOCK_START(); rendering = ds_queue_dequeue(queue) - if(!ds_list_exist(list, rendering)) continue; var renderable = rendering.isRenderable(); LOG_IF(global.FLAG.render == 1, $"Rendering {rendering.internalName} ({rendering.display_name}) : {renderable? "Update" : "Pass"}"); if(renderable) { + if(runAction && rendering.hasInspector1Update()) rendering.inspector1Update(); rendering.doUpdate(); var nextNodes = rendering.getNextNodes(); - for( var i = 0, n = array_length(nextNodes); i < n; i++ ) - if(nextNodes[i].isRenderable()) - ds_queue_enqueue(queue, nextNodes[i]); + for( var i = 0, n = array_length(nextNodes); i < n; i++ ) { + var _node = nextNodes[i]; + if(ds_list_exist(list, _node) && _node.isRenderable()) + ds_queue_enqueue(queue, _node); + } } LOG_BLOCK_END(); @@ -312,64 +314,4 @@ function RenderList(list, skipInLoop = true) { #region LOG_END(); ds_queue_destroy(queue); -} #endregion - -function RenderListAction(list, context = PANEL_GRAPH.getCurrentContext()) { #region - printIf(global.FLAG.render, "=== RENDER LIST ACTION START [frame " + string(CURRENT_FRAME) + "] ==="); - - try { - var rendering = noone; - var error = 0; - var t = current_time; - - __renderListReset(list); - - // get leaf node - RENDER_QUEUE.clear(); - for( var i = 0; i < ds_list_size(list); i++ ) { - var _node = list[| i]; - - if(is_undefined(_node)) continue; - if(!is_struct(_node)) continue; - - if(!_node.active) continue; - if(!_node.isRenderActive()) continue; - if(_node.rendered) continue; - - if(_node.isRenderable()) { - RENDER_QUEUE.enqueue(_node); - printIf(global.FLAG.render, $" > Push {_node.internalName} node to queue"); - } - } - - // render forward - while(!RENDER_QUEUE.empty()) { - LOG_BLOCK_START(); - LOG_IF(global.FLAG.render == 1, $"➤➤➤➤➤➤ CURRENT RENDER QUEUE {RENDER_QUEUE}"); - rendering = RENDER_QUEUE.dequeue(); - if(!ds_list_exist(list, rendering)) continue; - var renderable = rendering.isRenderable(); - - LOG_IF(global.FLAG.render == 1, $"Rendering {rendering.internalName} ({rendering.display_name}) : {renderable? "Update" : "Pass"}"); - - if(renderable) { - rendering.doUpdate(); - - var nextNodes = rendering.getNextNodes(); - for( var i = 0, n = array_length(nextNodes); i < n; i++ ) - RENDER_QUEUE.enqueue(nextNodes[i]); - - if(runAction && rendering.hasInspector1Update()) - rendering.inspector1Update(); - } else if(rendering.isRenderActive()) { - RENDER_QUEUE.enqueue(rendering); - } - - LOG_BLOCK_END(); - } - - printIf(global.FLAG.render, "=== RENDER COMPLETE IN {" + string(current_time - t) + "ms} ===\n"); - } catch(e) { - noti_warning(exception_print(e)); - } } #endregion \ No newline at end of file