auto organize

This commit is contained in:
Tanasart 2024-12-13 13:42:10 +07:00
parent f71d86d5b4
commit ef5c289e33
18 changed files with 521 additions and 12 deletions

View file

@ -223,17 +223,17 @@
{"name":"profiler","order":5,"path":"folders/sprites/profiler.yy",}, {"name":"profiler","order":5,"path":"folders/sprites/profiler.yy",},
{"name":"texture","order":4,"path":"folders/sprites/texture.yy",}, {"name":"texture","order":4,"path":"folders/sprites/texture.yy",},
{"name":"theme","order":6,"path":"folders/sprites/theme.yy",}, {"name":"theme","order":6,"path":"folders/sprites/theme.yy",},
{"name":"font","order":10,"path":"folders/sprites/theme/font.yy",}, {"name":"font","order":9,"path":"folders/sprites/theme/font.yy",},
{"name":"inspector","order":1,"path":"folders/sprites/theme/inspector.yy",}, {"name":"inspector","order":1,"path":"folders/sprites/theme/inspector.yy",},
{"name":"meta","order":2,"path":"folders/sprites/theme/meta.yy",}, {"name":"meta","order":2,"path":"folders/sprites/theme/meta.yy",},
{"name":"node","order":3,"path":"folders/sprites/theme/node.yy",}, {"name":"node","order":3,"path":"folders/sprites/theme/node.yy",},
{"name":"assets","order":31,"path":"folders/sprites/theme/node/assets.yy",}, {"name":"assets","order":31,"path":"folders/sprites/theme/node/assets.yy",},
{"name":"widget","order":32,"path":"folders/sprites/theme/node/widget.yy",}, {"name":"widget","order":32,"path":"folders/sprites/theme/node/widget.yy",},
{"name":"preview","order":4,"path":"folders/sprites/theme/preview.yy",}, {"name":"preview","order":4,"path":"folders/sprites/theme/preview.yy",},
{"name":"timeline","order":6,"path":"folders/sprites/theme/timeline.yy",}, {"name":"timeline","order":5,"path":"folders/sprites/theme/timeline.yy",},
{"name":"tool","order":7,"path":"folders/sprites/theme/tool.yy",}, {"name":"tool","order":6,"path":"folders/sprites/theme/tool.yy",},
{"name":"UI","order":8,"path":"folders/sprites/theme/UI.yy",}, {"name":"UI","order":7,"path":"folders/sprites/theme/UI.yy",},
{"name":"widget","order":9,"path":"folders/sprites/theme/widget.yy",}, {"name":"widget","order":8,"path":"folders/sprites/theme/widget.yy",},
{"name":"widgets","order":334,"path":"folders/widgets.yy",}, {"name":"widgets","order":334,"path":"folders/widgets.yy",},
{"name":"object","order":18,"path":"folders/widgets/object.yy",}, {"name":"object","order":18,"path":"folders/widgets/object.yy",},
], ],
@ -1243,6 +1243,7 @@
{"name":"panel_globalvar","order":1,"path":"scripts/panel_globalvar/panel_globalvar.yy",}, {"name":"panel_globalvar","order":1,"path":"scripts/panel_globalvar/panel_globalvar.yy",},
{"name":"panel_gm_explorer","order":13,"path":"scripts/panel_gm_explorer/panel_gm_explorer.yy",}, {"name":"panel_gm_explorer","order":13,"path":"scripts/panel_gm_explorer/panel_gm_explorer.yy",},
{"name":"panel_gradient","order":2,"path":"scripts/panel_gradient/panel_gradient.yy",}, {"name":"panel_gradient","order":2,"path":"scripts/panel_gradient/panel_gradient.yy",},
{"name":"panel_graph_auto_organize","order":10,"path":"scripts/panel_graph_auto_organize/panel_graph_auto_organize.yy",},
{"name":"panel_graph_connection_settings","order":6,"path":"scripts/panel_graph_connection_settings/panel_graph_connection_settings.yy",}, {"name":"panel_graph_connection_settings","order":6,"path":"scripts/panel_graph_connection_settings/panel_graph_connection_settings.yy",},
{"name":"panel_graph_export_image_dialog","order":5,"path":"scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.yy",}, {"name":"panel_graph_export_image_dialog","order":5,"path":"scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.yy",},
{"name":"panel_graph_export_image","order":4,"path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",}, {"name":"panel_graph_export_image","order":4,"path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",},
@ -1903,7 +1904,7 @@
{"name":"s_discord","order":52,"path":"sprites/s_discord/s_discord.yy",}, {"name":"s_discord","order":52,"path":"sprites/s_discord/s_discord.yy",},
{"name":"s_display_palette","order":53,"path":"sprites/s_display_palette/s_display_palette.yy",}, {"name":"s_display_palette","order":53,"path":"sprites/s_display_palette/s_display_palette.yy",},
{"name":"s_duplicate","order":54,"path":"sprites/s_duplicate/s_duplicate.yy",}, {"name":"s_duplicate","order":54,"path":"sprites/s_duplicate/s_duplicate.yy",},
{"name":"s_empty","order":5,"path":"sprites/s_empty/s_empty.yy",}, {"name":"s_empty","order":10,"path":"sprites/s_empty/s_empty.yy",},
{"name":"s_fade_up","order":3,"path":"sprites/s_fade_up/s_fade_up.yy",}, {"name":"s_fade_up","order":3,"path":"sprites/s_fade_up/s_fade_up.yy",},
{"name":"s_feedback_16","order":55,"path":"sprites/s_feedback_16/s_feedback_16.yy",}, {"name":"s_feedback_16","order":55,"path":"sprites/s_feedback_16/s_feedback_16.yy",},
{"name":"s_feedback_24","order":56,"path":"sprites/s_feedback_24/s_feedback_24.yy",}, {"name":"s_feedback_24","order":56,"path":"sprites/s_feedback_24/s_feedback_24.yy",},
@ -2614,6 +2615,8 @@
{"name":"s_noti_icon_log","order":148,"path":"sprites/s_noti_icon_log/s_noti_icon_log.yy",}, {"name":"s_noti_icon_log","order":148,"path":"sprites/s_noti_icon_log/s_noti_icon_log.yy",},
{"name":"s_noti_icon_tick","order":149,"path":"sprites/s_noti_icon_tick/s_noti_icon_tick.yy",}, {"name":"s_noti_icon_tick","order":149,"path":"sprites/s_noti_icon_tick/s_noti_icon_tick.yy",},
{"name":"s_noti_icon_warning","order":150,"path":"sprites/s_noti_icon_warning/s_noti_icon_warning.yy",}, {"name":"s_noti_icon_warning","order":150,"path":"sprites/s_noti_icon_warning/s_noti_icon_warning.yy",},
{"name":"s_obj_auto_align","order":27,"path":"sprites/s_obj_auto_align/s_obj_auto_align.yy",},
{"name":"s_obj_auto_organize","order":26,"path":"sprites/s_obj_auto_organize/s_obj_auto_organize.yy",},
{"name":"s_obj_distribute_h","order":16,"path":"sprites/s_obj_distribute_h/s_obj_distribute_h.yy",}, {"name":"s_obj_distribute_h","order":16,"path":"sprites/s_obj_distribute_h/s_obj_distribute_h.yy",},
{"name":"s_obj_distribute_v","order":17,"path":"sprites/s_obj_distribute_v/s_obj_distribute_v.yy",}, {"name":"s_obj_distribute_v","order":17,"path":"sprites/s_obj_distribute_v/s_obj_distribute_v.yy",},
{"name":"s_onion_skin","order":151,"path":"sprites/s_onion_skin/s_onion_skin.yy",}, {"name":"s_onion_skin","order":151,"path":"sprites/s_onion_skin/s_onion_skin.yy",},

View file

@ -1849,6 +1849,7 @@
{"id":{"name":"panel_globalvar","path":"scripts/panel_globalvar/panel_globalvar.yy",},}, {"id":{"name":"panel_globalvar","path":"scripts/panel_globalvar/panel_globalvar.yy",},},
{"id":{"name":"panel_gm_explorer","path":"scripts/panel_gm_explorer/panel_gm_explorer.yy",},}, {"id":{"name":"panel_gm_explorer","path":"scripts/panel_gm_explorer/panel_gm_explorer.yy",},},
{"id":{"name":"panel_gradient","path":"scripts/panel_gradient/panel_gradient.yy",},}, {"id":{"name":"panel_gradient","path":"scripts/panel_gradient/panel_gradient.yy",},},
{"id":{"name":"panel_graph_auto_organize","path":"scripts/panel_graph_auto_organize/panel_graph_auto_organize.yy",},},
{"id":{"name":"panel_graph_connection_settings","path":"scripts/panel_graph_connection_settings/panel_graph_connection_settings.yy",},}, {"id":{"name":"panel_graph_connection_settings","path":"scripts/panel_graph_connection_settings/panel_graph_connection_settings.yy",},},
{"id":{"name":"panel_graph_export_image_dialog","path":"scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.yy",},}, {"id":{"name":"panel_graph_export_image_dialog","path":"scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.yy",},},
{"id":{"name":"panel_graph_export_image","path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",},}, {"id":{"name":"panel_graph_export_image","path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",},},
@ -3350,6 +3351,8 @@
{"id":{"name":"s_noti_icon_log","path":"sprites/s_noti_icon_log/s_noti_icon_log.yy",},}, {"id":{"name":"s_noti_icon_log","path":"sprites/s_noti_icon_log/s_noti_icon_log.yy",},},
{"id":{"name":"s_noti_icon_tick","path":"sprites/s_noti_icon_tick/s_noti_icon_tick.yy",},}, {"id":{"name":"s_noti_icon_tick","path":"sprites/s_noti_icon_tick/s_noti_icon_tick.yy",},},
{"id":{"name":"s_noti_icon_warning","path":"sprites/s_noti_icon_warning/s_noti_icon_warning.yy",},}, {"id":{"name":"s_noti_icon_warning","path":"sprites/s_noti_icon_warning/s_noti_icon_warning.yy",},},
{"id":{"name":"s_obj_auto_align","path":"sprites/s_obj_auto_align/s_obj_auto_align.yy",},},
{"id":{"name":"s_obj_auto_organize","path":"sprites/s_obj_auto_organize/s_obj_auto_organize.yy",},},
{"id":{"name":"s_obj_distribute_h","path":"sprites/s_obj_distribute_h/s_obj_distribute_h.yy",},}, {"id":{"name":"s_obj_distribute_h","path":"sprites/s_obj_distribute_h/s_obj_distribute_h.yy",},},
{"id":{"name":"s_obj_distribute_v","path":"sprites/s_obj_distribute_v/s_obj_distribute_v.yy",},}, {"id":{"name":"s_obj_distribute_v","path":"sprites/s_obj_distribute_v/s_obj_distribute_v.yy",},},
{"id":{"name":"s_onion_skin","path":"sprites/s_onion_skin/s_onion_skin.yy",},}, {"id":{"name":"s_onion_skin","path":"sprites/s_onion_skin/s_onion_skin.yy",},},

Binary file not shown.

View file

@ -173,7 +173,7 @@ function Panel_Linear_Setting() : PanelContent() constructor {
if(bg_y == -1) bg_y = bg_y_to; if(bg_y == -1) bg_y = bg_y_to;
else bg_y = lerp_float(bg_y, bg_y_to, 2); else bg_y = lerp_float(bg_y, bg_y_to, 2);
if(hk_editing != noone) { if(hk_editing != noone) {
if(keyboard_check_pressed(vk_enter)) hk_editing = noone; if(keyboard_check_pressed(vk_enter)) hk_editing = noone;
else hotkey_editing(hk_editing); else hotkey_editing(hk_editing);

View file

@ -265,4 +265,180 @@ function node_snap_grid(nodeList, spacing = 16) {
_node.x = value_snap(_node.x, spacing); _node.x = value_snap(_node.x, spacing);
_node.y = value_snap(_node.y, spacing); _node.y = value_snap(_node.y, spacing);
} }
}
////- Auto organize
function node_auto_organize_parameter() constructor {
padd_w = 32;
padd_h = 16;
snap = true;
snap_size = 16;
gridmap = [];
}
function __node_auto_organize_graph(node) {
var children = [];
var froms = node.getNodeFrom();
node.__organize_sorted = false;
for( var i = 0, n = array_length(froms); i < n; i++ )
children[i] = __node_auto_organize_graph(froms[i]);
return { node, children, w: 0, h: 0, depth: 0 };
}
function __node_auto_organize_size(node, param) {
if(array_empty(node.children)) {
if(node.node == noone) return node;
node.w = node.node.w;
node.h = node.node.h;
return node;
}
var tw = 0;
var th = 0;
for( var i = 0, n = array_length(node.children); i < n; i++ ) {
var _s = __node_auto_organize_size(node.children[i], param);
tw = max(tw, _s.node.w);
th += _s.h + param.padd_h * bool(i);
}
node.w = tw;
node.h = th;
return node;
}
function __node_auto_organize(node, param, _x = 0, _y = 0, _cap = false) {
var ch = [];
var tw = node.w;
var _sx = _x - tw - param.padd_w;
var _sy = _y;
if(param.snap) {
_sx = value_snap(_sx, param.snap_size);
_sy = value_snap(_sy, param.snap_size);
}
var miny = 0;
var maxy = 0;
for( var i = 0, n = array_length(node.children); i < n; i++ ) {
var _n = node.children[i];
__node_auto_organize(_n, param, _sx, _sy, _cap);
if(!_n.node.__organize_sorted) {
_n.node.x = _sx;
_n.node.y = _sy;
} else {
_n.node.x = min(_n.node.x, _sx);
_n.node.y = min(_n.node.y, _sy);
}
miny = i == 0? _n.node.y : min(miny, _n.node.y);
maxy = i == 0? _n.node.y + _n.node.h : max(maxy, _n.node.y + _n.node.h);
_n.node.__organize_sorted = true;
_sy += _n.h + param.padd_h;
if(param.snap) _sy = value_snap(_sy, param.snap_size);
}
if(_cap && node.node) miny = max(miny, node.node.y);
if(n) node.h = maxy - miny;
if(node.node) node.h = max(node.h, node.node.h);
}
function __node_bbox_recal(node, param) {
node.bbox = [ 0, 0, 0, 0 ];
node.h = 0;
if(node.node) node.node.__organize_sorted = false;
if(array_empty(node.children)) {
if(node.node == noone) return node;
node.bbox[0] = node.node.x;
node.bbox[1] = node.node.y;
node.bbox[2] = node.node.x + node.node.w;
node.bbox[3] = node.node.y + node.node.h;
node.h = node.bbox[3] - node.bbox[1];
return node;
}
for( var i = 0, n = array_length(node.children); i < n; i++ ) {
var _n = node.children[i];
__node_bbox_recal(_n, param);
node.bbox[0] = min(node.bbox[0], _n.bbox[0]);
node.bbox[1] = min(node.bbox[1], _n.bbox[1]);
node.bbox[2] = max(node.bbox[2], _n.bbox[2]);
node.bbox[3] = max(node.bbox[3], _n.bbox[3]);
}
if(node.node) node.bbox[1] = max(node.bbox[1], node.node.y);
node.h = node.bbox[3] - node.bbox[1];
return node;
}
function node_auto_organize(nodeList, param = new node_auto_organize_parameter()) {
if(array_empty(nodeList)) return;
var cx = 0, cy = 0;
for( var i = 0, n = array_length(nodeList); i < n; i++ ) {
var _n = nodeList[i];
cx += _n.x + _n.w / 2;
cy += _n.y + _n.h / 2;
}
cx /= n; cy /= n;
var root = { node: noone, children: [], w: 0, h: 0, depth: 0 };
for( var i = 0, n = array_length(nodeList); i < n; i++ ) {
var _n = nodeList[i];
var _nto = _n.getNodeTo();
var _isRoot = array_empty(_nto) || array_empty(array_union(_nto, nodeList));
if(_isRoot) array_push(root.children, __node_auto_organize_graph(_n));
}
array_sort(root.children, function(a, b) /*=>*/ {return a.node.y - b.node.y});
__node_auto_organize_size(root, param);
__node_auto_organize(root, param, 0, 0);
repeat(1) {
__node_bbox_recal(root, param);
__node_auto_organize(root, param, 0, 0, true);
}
var ncx = 0, ncy = 0;
for( var i = 0, n = array_length(nodeList); i < n; i++ ) {
var _n = nodeList[i];
ncx += _n.x + _n.w / 2;
ncy += _n.y + _n.h / 2;
}
ncx /= n; ncy /= n;
var dx = ncx - cx;
var dy = ncy - cy;
if(param.snap) {
dx = value_snap(dx, param.snap_size);
dy = value_snap(dy, param.snap_size);
}
for( var i = 0, n = array_length(nodeList); i < n; i++ ) {
var _n = nodeList[i];
_n.x = _n.x - dx;
_n.y = _n.y - dy;
}
PANEL_GRAPH.draw_refresh = true;
} }

View file

@ -769,7 +769,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(attributes.node_height) h = max(h, attributes.node_height); if(attributes.node_height) h = max(h, attributes.node_height);
} }
static getJunctionList = function() { ////getJunctionList static getJunctionList = function() {
inputDisplayList = []; inputDisplayList = [];
var iamo = getInputAmount(); var iamo = getInputAmount();
@ -886,6 +886,35 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
return _vto; return _vto;
} }
static getNodeFrom = function() {
var _nodes = [];
for(var i = 0, n = array_length(inputDisplayList); i < n; i++) { //inputs
var jun = inputDisplayList[i];
var _fr = jun.value_from;
if(_fr != noone && _fr.node.active) array_push(_nodes, _fr.node);
}
// for( var i = 0, n = array_length(inputs); i < n; i++ ) {
// var _fr = inputs[i].value_from;
// }
return array_unique(_nodes);
}
static getNodeTo = function() {
var _nodes = [];
for (var j = 0; j < array_length(outputs); j++) {
var _to = outputs[j].value_to;
for( var i = 0, n = array_length(_to); i < n; i++ )
if(_to[i].node.active) array_push(_nodes, _to[i].node);
}
return array_unique(_nodes);
}
static checkConnectGroup = function(_io) { static checkConnectGroup = function(_io) {
var _y = y; var _y = y;
@ -1881,6 +1910,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
for( var i = 0; i < __draw_inputs_len; i++ ) { for( var i = 0; i < __draw_inputs_len; i++ ) {
_jun = __draw_inputs[i]; _jun = __draw_inputs[i];
_jun.drawLineIndexRaw = i;
_jun.drawLineIndex = 1 + (i > __draw_inputs_len / 2? (__draw_inputs_len - 1 - i) : i) * 0.5; _jun.drawLineIndex = 1 + (i > __draw_inputs_len / 2? (__draw_inputs_len - 1 - i) : i) * 0.5;
} }
} }

View file

@ -146,6 +146,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
draw_line_blend = 1; draw_line_blend = 1;
draw_line_feed = false; draw_line_feed = false;
drawLineIndex = 1; drawLineIndex = 1;
drawLineIndexRaw = 1;
draw_line_vb = noone; draw_line_vb = noone;
draw_junction_index = type; draw_junction_index = type;

View file

@ -39,6 +39,7 @@
function panel_graph_copy() { CALL("graph_copy"); PANEL_GRAPH.doCopy(); } function panel_graph_copy() { CALL("graph_copy"); PANEL_GRAPH.doCopy(); }
function panel_graph_paste() { CALL("graph_paste"); PANEL_GRAPH.doPaste(); } function panel_graph_paste() { CALL("graph_paste"); PANEL_GRAPH.doPaste(); }
function panel_graph_auto_organize() { CALL("graph_auto_organize"); node_auto_organize(PANEL_GRAPH.nodes_selecting); }
function panel_graph_auto_align() { CALL("graph_auto_align"); node_auto_align(PANEL_GRAPH.nodes_selecting); } function panel_graph_auto_align() { CALL("graph_auto_align"); node_auto_align(PANEL_GRAPH.nodes_selecting); }
function panel_graph_snap_nodes() { CALL("graph_snap_nodes"); node_snap_grid(PANEL_GRAPH.nodes_selecting, PANEL_GRAPH.project.graphGrid.size); } function panel_graph_snap_nodes() { CALL("graph_snap_nodes"); node_snap_grid(PANEL_GRAPH.nodes_selecting, PANEL_GRAPH.project.graphGrid.size); }
function panel_graph_search() { CALL("graph_search"); PANEL_GRAPH.toggleSearch(); } function panel_graph_search() { CALL("graph_search"); PANEL_GRAPH.toggleSearch(); }
@ -109,6 +110,7 @@
registerFunction("Graph", "Zoom", "", MOD_KEY.alt | MOD_KEY.ctrl, panel_graph_zoom ).setMenu("graph_zoom") registerFunction("Graph", "Zoom", "", MOD_KEY.alt | MOD_KEY.ctrl, panel_graph_zoom ).setMenu("graph_zoom")
registerFunction("Graph", "Auto Align", "L", MOD_KEY.none, panel_graph_auto_align ).setMenu("graph_auto_align") registerFunction("Graph", "Auto Align", "L", MOD_KEY.none, panel_graph_auto_align ).setMenu("graph_auto_align")
registerFunction("Graph", "Auto Organize", "L", MOD_KEY.ctrl, function() /*=>*/ { dialogPanelCall(new Panel_Graph_Auto_Organize(PANEL_GRAPH.nodes_selecting)) } ).setMenu("graph_auto_organize")
registerFunction("Graph", "Snap Nodes", "", MOD_KEY.none, panel_graph_snap_nodes ).setMenu("graph_snap_nodes") registerFunction("Graph", "Snap Nodes", "", MOD_KEY.none, panel_graph_snap_nodes ).setMenu("graph_snap_nodes")
registerFunction("Graph", "Search", "F", MOD_KEY.ctrl, panel_graph_search ).setMenu("graph_search") registerFunction("Graph", "Search", "F", MOD_KEY.ctrl, panel_graph_search ).setMenu("graph_search")
registerFunction("Graph", "Toggle Minimap", "M", MOD_KEY.ctrl, panel_graph_toggle_minimap ).setMenu("graph_toggle_minimap") registerFunction("Graph", "Toggle Minimap", "M", MOD_KEY.ctrl, panel_graph_toggle_minimap ).setMenu("graph_toggle_minimap")
@ -575,6 +577,11 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
[ THEME.obj_distribute_v, function() /*=>*/ {return 0}, function() /*=>*/ {return ""}, function(param) /*=>*/ { node_vdistribute(nodes_selecting); } ], [ THEME.obj_distribute_v, function() /*=>*/ {return 0}, function() /*=>*/ {return ""}, function(param) /*=>*/ { node_vdistribute(nodes_selecting); } ],
]; ];
toolbars_auto_arrange = [
[ THEME.obj_auto_align, function() /*=>*/ {return 0}, function() /*=>*/ {return "Auto align"}, function(param) /*=>*/ { node_auto_align(nodes_selecting); } ],
[ THEME.obj_auto_organize, function() /*=>*/ {return 0}, function() /*=>*/ {return "Auto organize"}, function(param) /*=>*/ { dialogPanelCall(new Panel_Graph_Auto_Organize(PANEL_GRAPH.nodes_selecting), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }) } ],
];
distribution_spacing = 0; distribution_spacing = 0;
toolbars_distrib_space = [ toolbars_distrib_space = [
[ THEME.obj_distribute_h, function() /*=>*/ {return 0}, function() /*=>*/ {return ""}, function(param) /*=>*/ { node_hdistribute_dist(nodes_selecting, nodes_select_anchor, distribution_spacing); } ], [ THEME.obj_distribute_h, function() /*=>*/ {return 0}, function() /*=>*/ {return ""}, function(param) /*=>*/ { node_hdistribute_dist(nodes_selecting, nodes_select_anchor, distribution_spacing); } ],
@ -2556,9 +2563,9 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
toolbars = [ toolbars_general ]; toolbars = [ toolbars_general ];
if(array_length(nodes_selecting) > 1) { if(array_length(nodes_selecting) > 1) {
if(array_exists(nodes_selecting, nodes_select_anchor)) if(array_exists(nodes_selecting, nodes_select_anchor))
array_push(toolbars, toolbars_halign, toolbars_valign, toolbars_distrib_space); array_push(toolbars, toolbars_halign, toolbars_valign, toolbars_distrib_space, toolbars_auto_arrange);
else else
array_push(toolbars, toolbars_halign, toolbars_valign, toolbars_distrib); array_push(toolbars, toolbars_halign, toolbars_valign, toolbars_distrib, toolbars_auto_arrange);
} }
graph_cx = (w / 2) / graph_s - graph_x; graph_cx = (w / 2) / graph_s - graph_x;

View file

@ -0,0 +1,90 @@
function Panel_Graph_Auto_Organize(_nodes) : PanelContent() constructor {
title = __txt("Auto Organize");
w = ui(400);
h = ui(320);
auto_pin = true;
nodes = _nodes;
param = new node_auto_organize_parameter();
wdgw = ui(180);
bg_y = -1;
bg_y_to = -1;
bg_a = 0;
selecting_menu = noone;
static node_organize = function() {
node_auto_organize(nodes, param);
} node_organize();
properties = [
new __Panel_Linear_Setting_Item(
__txt("Horzontal padding"),
new textBox(TEXTBOX_INPUT.number, function(v) /*=>*/ { param.padd_w = v; node_organize(); }),
function() /*=>*/ {return param.padd_w}
),
new __Panel_Linear_Setting_Item(
__txt("Vertical padding"),
new textBox(TEXTBOX_INPUT.number, function(v) /*=>*/ { param.padd_h = v; node_organize(); }),
function() /*=>*/ {return param.padd_h}
),
];
static setHeight = function() { h = ui(12 + 36 * array_length(properties)); }
setHeight();
function drawContent(panel) {
draw_clear_alpha(COLORS.panel_bg_clear, 1);
var yy = ui(24);
var th = ui(36);
var ww = max(wdgw, w * 0.5);
var wh = TEXTBOX_HEIGHT;
var _hov = false;
if(bg_y) draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, ui(4), bg_y, w - ui(8), th, COLORS.panel_prop_bg, 0.5 * bg_a);
for( var i = 0, n = array_length(properties); i < n; i++ ) {
var _prop = properties[i];
var _text = _prop.name;
var _data = _prop.data;
var _widg = _prop.editWidget;
if(is_callable(_data)) _data = _data();
_widg.setFocusHover(pFOCUS, pHOVER);
_widg.register();
var _whover = false;
if(pHOVER && point_in_rectangle(mx, my, 0, yy - th / 2, w, yy + th / 2)) {
bg_y_to = yy - th / 2;
_hov = true;
_whover = true;
}
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text);
draw_text_add(ui(16), yy, _text);
var _x1 = w - ui(8);
var _wdw = ww;
if(_prop.getDefault != noone)
_wdw -= ui(32 + 8);
var params = new widgetParam(_x1 - ww, yy - wh / 2, _wdw, wh, _data, {}, [ mx, my ], x, y);
if(is_instanceof(_widg, checkBox)) {
params.halign = fa_center;
params.valign = fa_center;
}
_widg.drawParam(params);
yy += th;
}
bg_a = lerp_float(bg_a, _hov, 2);
if(bg_y == -1) bg_y = bg_y_to;
else bg_y = lerp_float(bg_y, bg_y_to, 2);
}
}

View file

@ -0,0 +1,14 @@
{
"$GMScript":"v1",
"%Name":"panel_graph_auto_organize",
"isCompatibility":false,
"isDnD":false,
"name":"panel_graph_auto_organize",
"parent":{
"name":"graph",
"path":"folders/panels/graph.yy",
},
"resourceType":"GMScript",
"resourceVersion":"2.0",
"tags":[],
}

View file

@ -845,11 +845,14 @@ function Panel_Inspector() : PanelContent() constructor {
var lbh = viewMode? ui(32) : ui(26); var lbh = viewMode? ui(32) : ui(26);
var lbw = con_w; var lbw = con_w;
var togl = array_safe_get_fast(jun, 2, noone); var togl = array_safe_get_fast(jun, 2, noone);
var toging = false;
if(togl != noone) { if(togl != noone) {
lbx += ui(40); lbx += ui(40);
lbw -= ui(40); lbw -= ui(40);
var toging = _inspecting.getInputData(togl); toging = _inspecting.getInputData(togl);
if(is_array(toging)) toging = false;
} }
var righ = array_safe_get_fast(jun, 3, noone); var righ = array_safe_get_fast(jun, 3, noone);

View file

@ -287,6 +287,8 @@ function Theme() constructor {
curve_presets = s_inspector_curve_presets; curve_presets = s_inspector_curve_presets;
inspector_channel = s_inspector_channel; inspector_channel = s_inspector_channel;
inspector_checkbox = s_inspector_checkbox; inspector_checkbox = s_inspector_checkbox;
obj_auto_align = s_obj_auto_align;
obj_auto_organize = s_obj_auto_organize;
obj_angle = s_inspector_obj_angle; obj_angle = s_inspector_obj_angle;
obj_direction = s_inspector_direction; obj_direction = s_inspector_direction;
obj_distribute_h = s_obj_distribute_h; obj_distribute_h = s_obj_distribute_h;

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

View file

@ -0,0 +1,90 @@
{
"$GMSprite":"",
"%Name":"s_obj_auto_align",
"bboxMode":0,
"bbox_bottom":20,
"bbox_left":1,
"bbox_right":23,
"bbox_top":1,
"collisionKind":1,
"collisionTolerance":0,
"DynamicTexturePage":false,
"edgeFiltering":false,
"For3D":false,
"frames":[
{"$GMSpriteFrame":"","%Name":"3b47b91b-6de1-4c08-9960-297ecf43e59c","name":"3b47b91b-6de1-4c08-9960-297ecf43e59c","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
],
"gridX":0,
"gridY":0,
"height":24,
"HTile":false,
"layers":[
{"$GMImageLayer":"","%Name":"56c7a534-51f6-43ea-8f49-f60e650a7573","blendMode":0,"displayName":"default","isLocked":false,"name":"56c7a534-51f6-43ea-8f49-f60e650a7573","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
],
"name":"s_obj_auto_align",
"nineSlice":null,
"origin":4,
"parent":{
"name":"inspector",
"path":"folders/sprites/theme/inspector.yy",
},
"preMultiplyAlpha":false,
"resourceType":"GMSprite",
"resourceVersion":"2.0",
"sequence":{
"$GMSequence":"",
"%Name":"s_obj_auto_align",
"autoRecord":true,
"backdropHeight":768,
"backdropImageOpacity":0.5,
"backdropImagePath":"",
"backdropWidth":1366,
"backdropXOffset":0.0,
"backdropYOffset":0.0,
"events":{
"$KeyframeStore<MessageEventKeyframe>":"",
"Keyframes":[],
"resourceType":"KeyframeStore<MessageEventKeyframe>",
"resourceVersion":"2.0",
},
"eventStubScript":null,
"eventToFunction":{},
"length":1.0,
"lockOrigin":false,
"moments":{
"$KeyframeStore<MomentsEventKeyframe>":"",
"Keyframes":[],
"resourceType":"KeyframeStore<MomentsEventKeyframe>",
"resourceVersion":"2.0",
},
"name":"s_obj_auto_align",
"playback":1,
"playbackSpeed":30.0,
"playbackSpeedType":0,
"resourceType":"GMSequence",
"resourceVersion":"2.0",
"showBackdrop":true,
"showBackdropImage":false,
"timeUnits":1,
"tracks":[
{"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"3b47b91b-6de1-4c08-9960-297ecf43e59c","path":"sprites/s_obj_auto_align/s_obj_auto_align.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"0e721c84-e757-4279-8e0d-8953b7ac212e","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange":null,
"volume":1.0,
"xorigin":12,
"yorigin":12,
},
"swatchColours":null,
"swfPrecision":0.5,
"textureGroupId":{
"name":"Default",
"path":"texturegroups/Default",
},
"type":0,
"VTile":false,
"width":24,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

View file

@ -0,0 +1,90 @@
{
"$GMSprite":"",
"%Name":"s_obj_auto_organize",
"bboxMode":0,
"bbox_bottom":21,
"bbox_left":3,
"bbox_right":23,
"bbox_top":1,
"collisionKind":1,
"collisionTolerance":0,
"DynamicTexturePage":false,
"edgeFiltering":false,
"For3D":false,
"frames":[
{"$GMSpriteFrame":"","%Name":"b2b673fd-48ed-4e46-b7cb-a1cdbe95ef05","name":"b2b673fd-48ed-4e46-b7cb-a1cdbe95ef05","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
],
"gridX":0,
"gridY":0,
"height":24,
"HTile":false,
"layers":[
{"$GMImageLayer":"","%Name":"63454752-bcb3-44c6-910a-3e6bd248c585","blendMode":0,"displayName":"default","isLocked":false,"name":"63454752-bcb3-44c6-910a-3e6bd248c585","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
],
"name":"s_obj_auto_organize",
"nineSlice":null,
"origin":4,
"parent":{
"name":"inspector",
"path":"folders/sprites/theme/inspector.yy",
},
"preMultiplyAlpha":false,
"resourceType":"GMSprite",
"resourceVersion":"2.0",
"sequence":{
"$GMSequence":"",
"%Name":"s_obj_auto_organize",
"autoRecord":true,
"backdropHeight":768,
"backdropImageOpacity":0.5,
"backdropImagePath":"",
"backdropWidth":1366,
"backdropXOffset":0.0,
"backdropYOffset":0.0,
"events":{
"$KeyframeStore<MessageEventKeyframe>":"",
"Keyframes":[],
"resourceType":"KeyframeStore<MessageEventKeyframe>",
"resourceVersion":"2.0",
},
"eventStubScript":null,
"eventToFunction":{},
"length":1.0,
"lockOrigin":false,
"moments":{
"$KeyframeStore<MomentsEventKeyframe>":"",
"Keyframes":[],
"resourceType":"KeyframeStore<MomentsEventKeyframe>",
"resourceVersion":"2.0",
},
"name":"s_obj_auto_organize",
"playback":1,
"playbackSpeed":30.0,
"playbackSpeedType":0,
"resourceType":"GMSequence",
"resourceVersion":"2.0",
"showBackdrop":true,
"showBackdropImage":false,
"timeUnits":1,
"tracks":[
{"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"b2b673fd-48ed-4e46-b7cb-a1cdbe95ef05","path":"sprites/s_obj_auto_organize/s_obj_auto_organize.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"ad163094-5415-4ef6-8b51-7f9e5d1f2000","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange":null,
"volume":1.0,
"xorigin":12,
"yorigin":12,
},
"swatchColours":null,
"swfPrecision":0.5,
"textureGroupId":{
"name":"Default",
"path":"texturegroups/Default",
},
"type":0,
"VTile":false,
"width":24,
}