use array for project nodes instead of list

This commit is contained in:
Tanasart 2024-06-08 18:31:27 +07:00
parent 95c2b480bd
commit c566ca84ba
44 changed files with 461 additions and 438 deletions

View file

@ -1989,6 +1989,7 @@
{"name":"s_node_struct","order":1,"path":"sprites/s_node_struct/s_node_struct.yy",}, {"name":"s_node_struct","order":1,"path":"sprites/s_node_struct/s_node_struct.yy",},
{"name":"s_node_surface_from_buffer","order":2,"path":"sprites/s_node_surface_from_buffer/s_node_surface_from_buffer.yy",}, {"name":"s_node_surface_from_buffer","order":2,"path":"sprites/s_node_surface_from_buffer/s_node_surface_from_buffer.yy",},
{"name":"s_node_surface_to_buffer","order":3,"path":"sprites/s_node_surface_to_buffer/s_node_surface_to_buffer.yy",}, {"name":"s_node_surface_to_buffer","order":3,"path":"sprites/s_node_surface_to_buffer/s_node_surface_to_buffer.yy",},
{"name":"s_node_svg","order":38,"path":"sprites/s_node_svg/s_node_svg.yy",},
{"name":"s_node_switch","order":20,"path":"sprites/s_node_switch/s_node_switch.yy",}, {"name":"s_node_switch","order":20,"path":"sprites/s_node_switch/s_node_switch.yy",},
{"name":"s_node_terminal_trigger","order":41,"path":"sprites/s_node_terminal_trigger/s_node_terminal_trigger.yy",}, {"name":"s_node_terminal_trigger","order":41,"path":"sprites/s_node_terminal_trigger/s_node_terminal_trigger.yy",},
{"name":"s_node_text_char_get","order":2,"path":"sprites/s_node_text_char_get/s_node_text_char_get.yy",}, {"name":"s_node_text_char_get","order":2,"path":"sprites/s_node_text_char_get/s_node_text_char_get.yy",},

View file

@ -2570,6 +2570,7 @@
{"id":{"name":"s_node_struct","path":"sprites/s_node_struct/s_node_struct.yy",},}, {"id":{"name":"s_node_struct","path":"sprites/s_node_struct/s_node_struct.yy",},},
{"id":{"name":"s_node_surface_from_buffer","path":"sprites/s_node_surface_from_buffer/s_node_surface_from_buffer.yy",},}, {"id":{"name":"s_node_surface_from_buffer","path":"sprites/s_node_surface_from_buffer/s_node_surface_from_buffer.yy",},},
{"id":{"name":"s_node_surface_to_buffer","path":"sprites/s_node_surface_to_buffer/s_node_surface_to_buffer.yy",},}, {"id":{"name":"s_node_surface_to_buffer","path":"sprites/s_node_surface_to_buffer/s_node_surface_to_buffer.yy",},},
{"id":{"name":"s_node_svg","path":"sprites/s_node_svg/s_node_svg.yy",},},
{"id":{"name":"s_node_switch","path":"sprites/s_node_switch/s_node_switch.yy",},}, {"id":{"name":"s_node_switch","path":"sprites/s_node_switch/s_node_switch.yy",},},
{"id":{"name":"s_node_terminal_trigger","path":"sprites/s_node_terminal_trigger/s_node_terminal_trigger.yy",},}, {"id":{"name":"s_node_terminal_trigger","path":"sprites/s_node_terminal_trigger/s_node_terminal_trigger.yy",},},
{"id":{"name":"s_node_text_char_get","path":"sprites/s_node_text_char_get/s_node_text_char_get.yy",},}, {"id":{"name":"s_node_text_char_get","path":"sprites/s_node_text_char_get/s_node_text_char_get.yy",},},

View file

@ -220,17 +220,18 @@ event_inherited();
//try to connect //try to connect
if(node_called != noone) { //dragging from junction if(node_called != noone) { //dragging from junction
var _call_input = node_called.connect_type == JUNCTION_CONNECT.input; var _call_input = node_called.connect_type == JUNCTION_CONNECT.input;
var _node_list = _call_input? _outputs : _inputs; var _junc_list = _call_input? _outputs : _inputs;
for(var i = 0; i < ds_list_size(_node_list); i++) {
var _target = _node_list[| i]; for(var i = 0; i < ds_list_size(_junc_list); i++) {
var _target = _junc_list[| i];
if(!_target.visible) continue; if(!_target.visible) continue;
if(_target.auto_connect) { if(_target.auto_connect) {
if(_call_input && node_called.isConnectable(_node_list[| i])) { if(_call_input && node_called.isConnectable(_junc_list[| i])) {
node_called.setFrom(_node_list[| i]); node_called.setFrom(_junc_list[| i]);
_new_node.x -= _new_node.w; _new_node.x -= _new_node.w;
} else if(!_call_input && _node_list[| i].isConnectable(node_called)) } else if(!_call_input && _junc_list[| i].isConnectable(node_called))
_node_list[| i].setFrom(node_called); _junc_list[| i].setFrom(node_called);
break; break;
} }
} }

View file

@ -11,7 +11,7 @@ if(PROJECT.active && !PROJECT.safeMode) { #region node step
try { try {
if(PANEL_MAIN != 0) PANEL_MAIN.step(); if(PANEL_MAIN != 0) PANEL_MAIN.step();
array_foreach(PROJECT.nodeArray, function(_node) { array_foreach(PROJECT.allNodes, function(_node) {
if(!_node.active) return; if(!_node.active) return;
_node.triggerCheck(); _node.triggerCheck();
_node.step(); _node.step();

View file

@ -126,7 +126,7 @@ _HOVERING_ELEMENT = noone;
if(PROJECT.active) { if(PROJECT.active) {
PROJECT.animator.is_simulating = false; PROJECT.animator.is_simulating = false;
array_foreach(PROJECT.nodeArray, function(_node) { if(!_node.active) return; _node.stepBegin(); }); array_foreach(PROJECT.allNodes, function(_node) { if(!_node.active) return; _node.stepBegin(); });
if(PROGRAM_ARGUMENTS._run) { if(PROGRAM_ARGUMENTS._run) {
if(PROJECT != noone && PROJECT.path != "") { if(PROJECT != noone && PROJECT.path != "") {

View file

@ -3,16 +3,16 @@
"%Name":"o_main", "%Name":"o_main",
"eventList":[ "eventList":[
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":2,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":62,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":4,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":3,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":5,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":5,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":60,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":2,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":3,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":4,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":20,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":20,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":60,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":62,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":68,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":68,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":69,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":69,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
{"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":70,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":70,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},

View file

@ -17,8 +17,8 @@ function Node_Iterator(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
iterated = 0; iterated = 0;
static isActiveDynamic = function(frame = CURRENT_FRAME) { #region static isActiveDynamic = function(frame = CURRENT_FRAME) { #region
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) for( var i = 0, n = array_length(nodes); i < n; i++ )
if(nodes[| i].isActiveDynamic(frame)) return true; if(nodes[i].isActiveDynamic(frame)) return true;
return false; return false;
} #endregion } #endregion
@ -51,9 +51,9 @@ function Node_Iterator(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
var _nodes = []; var _nodes = [];
for( var i = 0; i < ds_list_size(nodes); i++ ) { // check if every node is updated for( var i = 0; i < array_length(nodes); i++ ) { // check if every node is updated
if(!nodes[| i].rendered) { if(!nodes[i].rendered) {
LOG_IF(global.FLAG.render == 1, $"Skipped due to node {nodes[| i].internalName} not rendered."); LOG_IF(global.FLAG.render == 1, $"Skipped due to node {nodes[i].internalName} not rendered.");
LOG_BLOCK_END(); LOG_BLOCK_END();
return _nodes; return _nodes;
} }
@ -92,16 +92,16 @@ function Node_Iterator(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
static iterationUpdate = function() { #region static iterationUpdate = function() { #region
var maxIter = getIterationCount(); var maxIter = getIterationCount();
for( var i = 0; i < ds_list_size(nodes); i++ ) // check if every node is updated for( var i = 0; i < array_length(nodes); i++ ) // check if every node is updated
if(!nodes[| i].rendered) { if(!nodes[i].rendered) {
LOG_LINE_IF(global.FLAG.render, $"------------------< Iteration update: {iterated} / {maxIter} [RENDER FAILED by {nodes[| i]}] >------------------"); LOG_LINE_IF(global.FLAG.render, $"------------------< Iteration update: {iterated} / {maxIter} [RENDER FAILED by {nodes[i]}] >------------------");
return; return;
} }
iterated++; iterated++;
for( var i = 0; i < ds_list_size(nodes); i++ ) for( var i = 0; i < array_length(nodes); i++ )
nodes[| i].clearInputCache(); nodes[i].clearInputCache();
if(iterated == maxIter) { if(iterated == maxIter) {
LOG_LINE_IF(global.FLAG.render, $"------------------< Iteration update: {iterated} / {maxIter} [COMPLETE] >------------------"); LOG_LINE_IF(global.FLAG.render, $"------------------< Iteration update: {iterated} / {maxIter} [COMPLETE] >------------------");

View file

@ -64,14 +64,7 @@
static resetAnimation = function() { #region static resetAnimation = function() { #region
INLINE INLINE
var _key = ds_map_find_first(PROJECT.nodeMap); array_foreach(PROJECT.allNodes, function(node) { node.resetAnimation(); });
var amo = ds_map_size(PROJECT.nodeMap);
repeat(amo) {
var _node = PROJECT.nodeMap[? _key];
_node.resetAnimation();
_key = ds_map_find_next(PROJECT.nodeMap, _key);
}
} #endregion } #endregion
static toggle = function() { #region static toggle = function() { #region

View file

@ -10,13 +10,13 @@ function APPEND(_path, context = PANEL_GRAPH.getCurrentContext()) { #region
} }
var node_create = __APPEND_MAP(_map, context); var node_create = __APPEND_MAP(_map, context);
recordAction(ACTION_TYPE.collection_loaded, array_create_from_list(node_create), _path); recordAction(ACTION_TYPE.collection_loaded, array_clone(node_create), _path);
log_message("FILE", "append file " + _path, THEME.noti_icon_file_load); log_message("FILE", "append file " + _path, THEME.noti_icon_file_load);
return node_create; return node_create;
} #endregion } #endregion
function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext(), appended_list = ds_list_create()) { #region function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext(), appended_list = []) { #region
static log = false; static log = false;
UNDO_HOLDING = true; UNDO_HOLDING = true;
@ -32,7 +32,7 @@ function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext(), appended_
if(!struct_has(_map, "nodes")) return noone; if(!struct_has(_map, "nodes")) return noone;
var _node_list = _map.nodes; var _node_list = _map.nodes;
var node_create = ds_list_create(); var node_create = [];
APPENDING = true; APPENDING = true;
@ -44,17 +44,17 @@ function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext(), appended_
var ex = ds_map_exists(APPEND_MAP, _node_list[i].id); var ex = ds_map_exists(APPEND_MAP, _node_list[i].id);
var _node = nodeLoad(_node_list[i], true, context); var _node = nodeLoad(_node_list[i], true, context);
if(_node && !ex) ds_list_add(appended_list, _node); if(_node && !ex) array_push(appended_list, _node);
} }
printIf(log, "Load time: " + string(current_time - t)); t = current_time; printIf(log, "Load time: " + string(current_time - t)); t = current_time;
try { try {
for(var i = 0; i < ds_list_size(appended_list); i++) { for(var i = 0; i < array_length(appended_list); i++) {
var _node = appended_list[| i]; var _node = appended_list[i];
_node.loadGroup(context); _node.loadGroup(context);
if(_node.group == context) if(_node.group == context)
ds_list_add(node_create, _node); array_push(node_create, _node);
} }
} catch(e) { } catch(e) {
log_warning("APPEND, node", exception_print(e)); log_warning("APPEND, node", exception_print(e));
@ -62,38 +62,38 @@ function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext(), appended_
printIf(log, "Load group time: " + string(current_time - t)); t = current_time; printIf(log, "Load group time: " + string(current_time - t)); t = current_time;
try { try {
for(var i = 0; i < ds_list_size(appended_list); i++) for(var i = 0; i < array_length(appended_list); i++)
appended_list[| i].postDeserialize(); appended_list[i].postDeserialize();
} catch(e) { } catch(e) {
log_warning("APPEND, deserialize", exception_print(e)); log_warning("APPEND, deserialize", exception_print(e));
} }
printIf(log, "Deserialize time: " + string(current_time - t)); t = current_time; printIf(log, "Deserialize time: " + string(current_time - t)); t = current_time;
try { try {
for(var i = 0; i < ds_list_size(appended_list); i++) for(var i = 0; i < array_length(appended_list); i++)
appended_list[| i].applyDeserialize(); appended_list[i].applyDeserialize();
} catch(e) { } catch(e) {
log_warning("LOAD, apply deserialize", exception_print(e)); log_warning("LOAD, apply deserialize", exception_print(e));
} }
printIf(log, "Apply deserialize time: " + string(current_time - t)); t = current_time; printIf(log, "Apply deserialize time: " + string(current_time - t)); t = current_time;
try { try {
for(var i = 0; i < ds_list_size(appended_list); i++) for(var i = 0; i < array_length(appended_list); i++)
appended_list[| i].preConnect(); appended_list[i].preConnect();
for(var i = 0; i < ds_list_size(appended_list); i++) for(var i = 0; i < array_length(appended_list); i++)
appended_list[| i].connect(); appended_list[i].connect();
for(var i = 0; i < ds_list_size(appended_list); i++) for(var i = 0; i < array_length(appended_list); i++)
appended_list[| i].postConnect(); appended_list[i].postConnect();
} catch(e) { } catch(e) {
log_warning("APPEND, connect", exception_print(e)); log_warning("APPEND, connect", exception_print(e));
} }
printIf(log, "Connect time: " + string(current_time - t)); t = current_time; printIf(log, "Connect time: " + string(current_time - t)); t = current_time;
try { try {
for(var i = 0; i < ds_list_size(appended_list); i++) for(var i = 0; i < array_length(appended_list); i++)
appended_list[| i].doUpdate(); appended_list[i].doUpdate();
} catch(e) { } catch(e) {
log_warning("APPEND, update", exception_print(e)); log_warning("APPEND, update", exception_print(e));
} }
@ -126,22 +126,19 @@ function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext(), appended_
printIf(log, "Conflict time: " + string(current_time - t)); t = current_time; printIf(log, "Conflict time: " + string(current_time - t)); t = current_time;
try { try {
for(var i = 0; i < ds_list_size(appended_list); i++) for(var i = 0; i < array_length(appended_list); i++)
appended_list[| i].postLoad(); appended_list[i].postLoad();
} catch(e) { } catch(e) {
log_warning("APPEND, connect", exception_print(e)); log_warning("APPEND, connect", exception_print(e));
} }
UNDO_HOLDING = false; UNDO_HOLDING = false;
ds_list_destroy(appended_list);
APPENDING = false; APPENDING = false;
if(struct_has(_map, "metadata")) { if(struct_has(_map, "metadata")) {
var meta = _map.metadata; var meta = _map.metadata;
for( var i = 0; i < ds_list_size(node_create); i++ ) { for( var i = 0; i < array_length(node_create); i++ ) {
var _node = node_create[| i]; var _node = node_create[i];
if(!struct_has(_node, "metadata")) continue; if(!struct_has(_node, "metadata")) continue;
_node.metadata.deserialize(meta, true); _node.metadata.deserialize(meta, true);

View file

@ -5,7 +5,7 @@
globalvar APPENDING, APPEND_MAP, APPEND_LIST; globalvar APPENDING, APPEND_MAP, APPEND_LIST;
APPEND_MAP = ds_map_create(); APPEND_MAP = ds_map_create();
APPEND_LIST = ds_list_create(); APPEND_LIST = [];
LOADING = false; LOADING = false;
LOADING_VERSION = 0; LOADING_VERSION = 0;

View file

@ -136,14 +136,14 @@ function LOAD_AT(path, readonly = false, override = false) { #region
printIf(log, $" > Load meta : {(get_timer() - t1) / 1000} ms"); t1 = get_timer(); printIf(log, $" > Load meta : {(get_timer() - t1) / 1000} ms"); t1 = get_timer();
var create_list = ds_list_create(); var create_list = [];
if(struct_has(_load_content, "nodes")) { if(struct_has(_load_content, "nodes")) {
try { try {
var _node_list = _load_content.nodes; var _node_list = _load_content.nodes;
for(var i = 0, n = array_length(_node_list); i < n; i++) { for(var i = 0, n = array_length(_node_list); i < n; i++) {
// printIf(log, $" >> Loading nodes : {_node_list[i].type}"); // printIf(log, $" >> Loading nodes : {_node_list[i].type}");
var _node = nodeLoad(_node_list[i]); var _node = nodeLoad(_node_list[i]);
if(_node) ds_list_add(create_list, _node); if(_node) array_push(create_list, _node);
} }
} catch(e) { } catch(e) {
log_warning("LOAD", exception_print(e)); log_warning("LOAD", exception_print(e));
@ -216,8 +216,8 @@ function LOAD_AT(path, readonly = false, override = false) { #region
ds_queue_clear(CONNECTION_CONFLICT); ds_queue_clear(CONNECTION_CONFLICT);
try { try {
for(var i = 0; i < ds_list_size(create_list); i++) array_foreach(create_list, function(node) { node.loadGroup(); } );
create_list[| i].loadGroup();
} catch(e) { } catch(e) {
log_warning("LOAD, group", exception_print(e)); log_warning("LOAD, group", exception_print(e));
return false; return false;
@ -226,8 +226,7 @@ function LOAD_AT(path, readonly = false, override = false) { #region
printIf(log, $" > Load group : {(get_timer() - t1) / 1000} ms"); t1 = get_timer(); printIf(log, $" > Load group : {(get_timer() - t1) / 1000} ms"); t1 = get_timer();
try { try {
for(var i = 0; i < ds_list_size(create_list); i++) array_foreach(create_list, function(node) { node.postDeserialize(); } );
create_list[| i].postDeserialize();
} catch(e) { } catch(e) {
log_warning("LOAD, deserialize", exception_print(e)); log_warning("LOAD, deserialize", exception_print(e));
} }
@ -235,8 +234,7 @@ function LOAD_AT(path, readonly = false, override = false) { #region
printIf(log, $" > Deserialize: {(get_timer() - t1) / 1000} ms"); t1 = get_timer(); printIf(log, $" > Deserialize: {(get_timer() - t1) / 1000} ms"); t1 = get_timer();
try { try {
for(var i = 0; i < ds_list_size(create_list); i++) array_foreach(create_list, function(node) { node.applyDeserialize(); } );
create_list[| i].applyDeserialize();
} catch(e) { } catch(e) {
log_warning("LOAD, apply deserialize", exception_print(e)); log_warning("LOAD, apply deserialize", exception_print(e));
} }
@ -244,12 +242,9 @@ function LOAD_AT(path, readonly = false, override = false) { #region
printIf(log, $" > Apply deserialize : {(get_timer() - t1) / 1000} ms"); t1 = get_timer(); printIf(log, $" > Apply deserialize : {(get_timer() - t1) / 1000} ms"); t1 = get_timer();
try { try {
for(var i = 0; i < ds_list_size(create_list); i++) array_foreach(create_list, function(node) { node.preConnect(); } );
create_list[| i].preConnect(); array_foreach(create_list, function(node) { node.connect(); } );
for(var i = 0; i < ds_list_size(create_list); i++) array_foreach(create_list, function(node) { node.postConnect(); } );
create_list[| i].connect();
for(var i = 0; i < ds_list_size(create_list); i++)
create_list[| i].postConnect();
} catch(e) { } catch(e) {
log_warning("LOAD, connect", exception_print(e)); log_warning("LOAD, connect", exception_print(e));
} }
@ -278,8 +273,7 @@ function LOAD_AT(path, readonly = false, override = false) { #region
printIf(log, $" > Conflict : {(get_timer() - t1) / 1000} ms"); t1 = get_timer(); printIf(log, $" > Conflict : {(get_timer() - t1) / 1000} ms"); t1 = get_timer();
try { try {
for(var i = 0; i < ds_list_size(create_list); i++) array_foreach(create_list, function(node) { node.postLoad(); } );
create_list[| i].postLoad();
} catch(e) { } catch(e) {
log_warning("LOAD, connect", exception_print(e)); log_warning("LOAD, connect", exception_print(e));
} }
@ -287,8 +281,7 @@ function LOAD_AT(path, readonly = false, override = false) { #region
printIf(log, $" > Post load : {(get_timer() - t1) / 1000} ms"); t1 = get_timer(); printIf(log, $" > Post load : {(get_timer() - t1) / 1000} ms"); t1 = get_timer();
try { try {
for(var i = 0; i < ds_list_size(create_list); i++) array_foreach(create_list, function(node) { node.clearInputCache(); } );
create_list[| i].clearInputCache();
} catch(e) { } catch(e) {
log_warning("LOAD, connect", exception_print(e)); log_warning("LOAD, connect", exception_print(e));
} }
@ -316,7 +309,7 @@ function LOAD_AT(path, readonly = false, override = false) { #region
if(!IS_CMD) run_in(1, PANEL_GRAPH.toCenterNode); if(!IS_CMD) run_in(1, PANEL_GRAPH.toCenterNode);
printIf(log, $"========== Load {ds_map_size(PROJECT.nodeMap)} nodes completed in {(get_timer() - t0) / 1000} ms =========="); printIf(log, $"========== Load {array_length(PROJECT.allNodes)} nodes completed in {(get_timer() - t0) / 1000} ms ==========");
return true; return true;
} #endregion } #endregion

View file

@ -10,7 +10,7 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
update_on_frame = true; update_on_frame = true;
managedRenderOrder = true; managedRenderOrder = true;
topoList = ds_list_create(); topoList = [];
ungroupable = false; ungroupable = false;
preview_node = noone; preview_node = noone;
allCached = false; allCached = false;
@ -34,15 +34,15 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
insp2UpdateIcon = [ THEME.cache, 0, COLORS._main_icon ]; insp2UpdateIcon = [ THEME.cache, 0, COLORS._main_icon ];
static onInspector2Update = function() { #region static onInspector2Update = function() { #region
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var node = nodes[| i]; var node = nodes[i];
node.clearCache(); node.clearCache();
} }
} #endregion } #endregion
static reset = function() { #region static reset = function() { #region
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var node = nodes[| i]; var node = nodes[i];
if(!struct_has(node, "reset")) continue; if(!struct_has(node, "reset")) continue;
node.reset(); node.reset();
} }
@ -65,8 +65,8 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
node.doUpdate(i); node.doUpdate(i);
} }
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var node = nodes[| i]; var node = nodes[i];
if(!struct_has(node, "resetSeed")) continue; if(!struct_has(node, "resetSeed")) continue;
node.resetSeed(); node.resetSeed();
} }
@ -77,8 +77,8 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
NodeListSort(topoList, nodes); NodeListSort(topoList, nodes);
allCached = true; allCached = true;
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var node = nodes[| i]; var node = nodes[i];
if(!node.recoverCache()) allCached = false; if(!node.recoverCache()) allCached = false;
} }
@ -86,8 +86,8 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
reset(); reset();
if(allCached) { if(allCached) {
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) for( var i = 0, n = array_length(nodes); i < n; i++ )
nodes[| i].setRenderStatus(true); nodes[i].setRenderStatus(true);
setRenderStatus(true); setRenderStatus(true);
} }
} #endregion } #endregion
@ -95,8 +95,8 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
static ononDoubleClick = function(panel) { #region static ononDoubleClick = function(panel) { #region
preview_node = noone; preview_node = noone;
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var node = nodes[| i]; var node = nodes[i];
if(is_instanceof(node, Node_VFX_Renderer_Output) || if(is_instanceof(node, Node_VFX_Renderer_Output) ||
is_instanceof(node, Node_VFX_Renderer)) { is_instanceof(node, Node_VFX_Renderer)) {
preview_node = node; preview_node = node;

View file

@ -4,7 +4,7 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
icon = THEME.vfx; icon = THEME.vfx;
is_root = false; is_root = false;
topoList = ds_list_create(); topoList = [];
inputs[| 0] = nodeValue("Loop", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true ) inputs[| 0] = nodeValue("Loop", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true )
.rejectArray(); .rejectArray();
@ -38,8 +38,8 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
static getNextNodes = function() { return __nodeLeafList(nodes); } static getNextNodes = function() { return __nodeLeafList(nodes); }
static reset = function() { #region static reset = function() { #region
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var node = nodes[| i]; var node = nodes[i];
if(!struct_has(node, "reset")) continue; if(!struct_has(node, "reset")) continue;
node.reset(); node.reset();
} }
@ -61,8 +61,8 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
node.doUpdate(i); node.doUpdate(i);
} }
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var node = nodes[| i]; var node = nodes[i];
if(!struct_has(node, "resetSeed")) continue; if(!struct_has(node, "resetSeed")) continue;
node.resetSeed(); node.resetSeed();
} }

View file

@ -2,13 +2,11 @@ function rearrange_priority(node, newpri) {
if(node.anim_priority == floor(newpri)) return; if(node.anim_priority == floor(newpri)) return;
node.anim_priority = newpri; node.anim_priority = newpri;
var amo = ds_map_size(PROJECT.nodeMap);
var k = ds_map_find_first(PROJECT.nodeMap); var k = ds_map_find_first(PROJECT.nodeMap);
var pr = ds_priority_create(); var pr = ds_priority_create();
repeat(amo) { for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) {
var _node = PROJECT.nodeMap[? k]; var _node = PROJECT.allNodes[i];
k = ds_map_find_next(PROJECT.nodeMap, k);
if(!_node.active) continue; if(!_node.active) continue;
ds_priority_add(pr, _node, _node.anim_priority); ds_priority_add(pr, _node, _node.anim_priority);

View file

@ -121,8 +121,7 @@ function groupNodes(nodeArray, _group = noone, record = true, check_connect = tr
function upgroupNode(collection, record = true) { #region function upgroupNode(collection, record = true) { #region
UNDO_HOLDING = true; UNDO_HOLDING = true;
var _content = [], _deleted = []; var _content = [], _deleted = [];
var node_list = collection.getNodeList(); var _node_arr = collection.getNodeList();
var _node_arr = ds_list_to_array(node_list);
var _conn_to = collection.getJunctionTos(); var _conn_to = collection.getJunctionTos();
var _cx = 0, _cy = 0; var _cx = 0, _cy = 0;
@ -169,8 +168,8 @@ function upgroupNode(collection, record = true) { #region
} #endregion } #endregion
function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
nodes = ds_list_create(); nodes = [];
node_length = ds_list_size(nodes); node_length = 0;
ungroupable = true; ungroupable = true;
auto_render_time = false; auto_render_time = false;
@ -239,9 +238,9 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
static onInspector2Update = function() { #region static onInspector2Update = function() { #region
var i = 0; var i = 0;
repeat(ds_list_size(nodes)) { repeat(array_length(nodes)) {
if(nodes[| i].hasInspector2Update()) if(nodes[i].hasInspector2Update())
nodes[| i].inspector2Update(); nodes[i].inspector2Update();
i++; i++;
} }
} #endregion } #endregion
@ -254,12 +253,12 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
hasInsp1 = false; hasInsp1 = false;
hasInsp2 = false; hasInsp2 = false;
node_length = ds_list_size(nodes); node_length = array_length(nodes);
var i = 0; var i = 0;
repeat(node_length) { repeat(node_length) {
hasInsp1 |= nodes[| i].hasInspector1Update(); hasInsp1 |= nodes[i].hasInspector1Update();
hasInsp2 |= nodes[| i].hasInspector2Update(); hasInsp2 |= nodes[i].hasInspector2Update();
i++; i++;
} }
@ -361,7 +360,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
return nextNodes; return nextNodes;
} #endregion } #endregion
static clearTopoSorted = function() { INLINE topoSorted = false; for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { nodes[| i].clearTopoSorted(); } } static clearTopoSorted = function() { INLINE topoSorted = false; for( var i = 0, n = array_length(nodes); i < n; i++ ) { nodes[i].clearTopoSorted(); } }
static setRenderStatus = function(result) { #region static setRenderStatus = function(result) { #region
LOG_BLOCK_START(); LOG_BLOCK_START();
@ -402,15 +401,15 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
static exitGroup = function() {} static exitGroup = function() {}
static add = function(_node) { #region static add = function(_node) { #region
ds_list_add(getNodeList(), _node); array_push(getNodeList(), _node);
var list = _node.group == noone? PANEL_GRAPH.nodes_list : _node.group.getNodeList(); var list = _node.group == noone? PANEL_GRAPH.nodes_list : _node.group.getNodeList();
ds_list_remove(list, _node); array_remove(list, _node);
recordAction(ACTION_TYPE.group_added, self, _node); recordAction(ACTION_TYPE.group_added, self, _node);
_node.group = self; _node.group = self;
will_refresh = true; will_refresh = true;
node_length = ds_list_size(nodes); node_length = array_length(nodes);
} #endregion } #endregion
static remove = function(_node) { #region static remove = function(_node) { #region
@ -420,8 +419,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
var node_list = getNodeList(); var node_list = getNodeList();
var list = group == noone? PANEL_GRAPH.nodes_list : group.getNodeList(); var list = group == noone? PANEL_GRAPH.nodes_list : group.getNodeList();
ds_list_remove(node_list, _node); array_remove(node_list, _node);
ds_list_add(list, _node); array_push(list, _node);
} }
recordAction(ACTION_TYPE.group_removed, self, _node); recordAction(ACTION_TYPE.group_removed, self, _node);
@ -433,14 +432,11 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
else _node.group = group; else _node.group = group;
will_refresh = true; will_refresh = true;
node_length = ds_list_size(nodes); node_length = array_length(nodes);
} #endregion } #endregion
static clearCache = function() { #region static clearCache = function() { #region
var node_list = getNodeList(); array_foreach(getNodeList(), function(node) { node.clearCache(); });
for(var i = 0; i < ds_list_size(node_list); i++) {
node_list[| i].clearCache();
}
} #endregion } #endregion
static stepBegin = function() { #region static stepBegin = function() { #region
@ -451,9 +447,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
static step = function() { #region static step = function() { #region
if(combine_render_time) { if(combine_render_time) {
render_time = 0; render_time = 0;
var node_list = getNodeList(); array_foreach(getNodeList(), function(node) { render_time += node.render_time; });
for(var i = 0; i < ds_list_size(node_list); i++)
render_time += node_list[| i].render_time;
} }
onStep(); onStep();
@ -517,8 +511,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
} #endregion } #endregion
static getTool = function() { #region static getTool = function() { #region
for(var i = 0, n = ds_list_size(nodes); i < n; i++) { for(var i = 0, n = array_length(nodes); i < n; i++) {
var _node = nodes[| i]; var _node = nodes[i];
if(!_node.active) continue; if(!_node.active) continue;
if(_node.isTool) return _node.getTool(); if(_node.isTool) return _node.getTool();
} }
@ -534,8 +528,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
var dups = ds_list_create(); var dups = ds_list_create();
for(var i = 0, n = ds_list_size(nodes); i < n; i++) { for(var i = 0, n = array_length(nodes); i < n; i++) {
var _node = nodes[| i]; var _node = nodes[i];
var _cnode = _node.clone(target); var _cnode = _node.clone(target);
ds_list_add(dups, _cnode); ds_list_add(dups, _cnode);
@ -554,16 +548,12 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
static enable = function() { #region static enable = function() { #region
active = true; active = true;
var node_list = getNodeList(); array_foreach(getNodeList(), function(node) { node.enable(); });
for( var i = 0; i < ds_list_size(node_list); i++ )
node_list[| i].enable();
} #endregion } #endregion
static disable = function() { #region static disable = function() { #region
active = false; active = false;
var node_list = getNodeList(); array_foreach(getNodeList(), function(node) { node.disable(); });
for( var i = 0; i < ds_list_size(node_list); i++ )
node_list[| i].disable();
} #endregion } #endregion
static resetRender = function(_clearCache = false) { #region static resetRender = function(_clearCache = false) { #region
@ -573,8 +563,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
if(_clearCache) clearInputCache(); if(_clearCache) clearInputCache();
if(reset_all_child) if(reset_all_child)
for(var i = 0, n = ds_list_size(nodes); i < n; i++) for(var i = 0, n = array_length(nodes); i < n; i++)
nodes[| i].resetRender(_clearCache); nodes[i].resetRender(_clearCache);
} #endregion } #endregion
static setInstance = function(node) { #region static setInstance = function(node) { #region
@ -606,10 +596,10 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
static getGraphPreviewSurface = function() { #region static getGraphPreviewSurface = function() { #region
var _output_junc = outputs[| preview_channel]; var _output_junc = outputs[| preview_channel];
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
if(!nodes[| i].active) continue; if(!nodes[i].active) continue;
if(is_instanceof(nodes[| i], Node_Group_Thumbnail)) if(is_instanceof(nodes[i], Node_Group_Thumbnail))
_output_junc = nodes[| i].inputs[| 0]; _output_junc = nodes[i].inputs[| 0];
} }
if(!is_instanceof(_output_junc, NodeValue)) return noone; if(!is_instanceof(_output_junc, NodeValue)) return noone;
@ -625,12 +615,12 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
static enable = function() { #region static enable = function() { #region
active = true; timeline_item.active = true; active = true; timeline_item.active = true;
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) nodes[| i].enable(); for( var i = 0, n = array_length(nodes); i < n; i++ ) nodes[i].enable();
} #endregion } #endregion
static disable = function() { #region static disable = function() { #region
active = false; timeline_item.active = false; active = false; timeline_item.active = false;
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) nodes[| i].disable(); for( var i = 0, n = array_length(nodes); i < n; i++ ) nodes[i].disable();
} #endregion } #endregion
static attributeSerialize = function() { #region static attributeSerialize = function() { #region

View file

@ -1,6 +1,6 @@
function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
attributes.members = []; attributes.members = [];
nodes = ds_list_create(); nodes = [];
group_vertex = []; group_vertex = [];
group_dragging = false; group_dragging = false;
group_adding = false; group_adding = false;
@ -27,7 +27,7 @@ function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) c
static removeNode = function(node) { #region static removeNode = function(node) { #region
array_remove(attributes.members, node.node_id); array_remove(attributes.members, node.node_id);
ds_list_remove(nodes, node); array_remove(nodes, node);
if(node.inline_context == self) if(node.inline_context == self)
node.inline_context = noone; node.inline_context = noone;
@ -42,9 +42,7 @@ function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) c
node.inline_context = self; node.inline_context = self;
array_push_unique(attributes.members, node.node_id); array_push_unique(attributes.members, node.node_id);
array_push_unique(nodes, node);
if(!ds_list_exist(nodes, node))
ds_list_add(nodes, node);
onAddNode(node); onAddNode(node);
} #endregion } #endregion
@ -77,7 +75,7 @@ function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) c
} #endregion } #endregion
static refreshMember = function() { #region static refreshMember = function() { #region
ds_list_clear(nodes); nodes = [];
for( var i = 0, n = array_length(attributes.members); i < n; i++ ) { for( var i = 0, n = array_length(attributes.members); i < n; i++ ) {
if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) { if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) {
@ -93,8 +91,8 @@ function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) c
var _hash = ""; var _hash = "";
var _ind = 0; var _ind = 0;
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var _node = nodes[| i]; var _node = nodes[i];
if(!_node.active) continue; if(!_node.active) continue;
_hash += $"{_node.x},{_node.y},{_node.w},{_node.h}|"; _hash += $"{_node.x},{_node.y},{_node.w},{_node.h}|";
_ind++; _ind++;
@ -116,8 +114,8 @@ function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) c
var _vtrx = array_create(_ind * 4 * (90 / 30 + 1)); var _vtrx = array_create(_ind * 4 * (90 / 30 + 1));
var _ind = 0; var _ind = 0;
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var _node = nodes[| i]; var _node = nodes[i];
if(!_node.active) continue; if(!_node.active) continue;
_ind = getNodeBorder(_ind, _vtrx, _node); _ind = getNodeBorder(_ind, _vtrx, _node);
} }
@ -228,8 +226,8 @@ function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) c
setRenderStatus(false); setRenderStatus(false);
if(_clearCache) clearInputCache(); if(_clearCache) clearInputCache();
for( var i = 0; i < ds_list_size(nodes); i++ ) for( var i = 0; i < array_length(nodes); i++ )
nodes[| i].resetRender(_clearCache); nodes[i].resetRender(_clearCache);
} #endregion } #endregion
static drawNodeBG = function(_x, _y, _mx, _my, _s) { #region static drawNodeBG = function(_x, _y, _mx, _my, _s) { #region

View file

@ -28,12 +28,12 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
destroy_when_upgroup = false; destroy_when_upgroup = false;
var l = _group == noone? PROJECT.nodes : _group.getNodeList(); var l = _group == noone? PROJECT.nodes : _group.getNodeList();
ds_list_add(l, self); array_push(l, self);
active_index = -1; active_index = -1;
active_range = [ 0, TOTAL_FRAMES - 1 ]; active_range = [ 0, TOTAL_FRAMES - 1 ];
array_push(PROJECT.nodeArray, self); array_push(PROJECT.allNodes, self);
inline_context = noone; inline_context = noone;
inline_parent_object = ""; inline_parent_object = "";
@ -261,7 +261,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
#region ---- timeline ---- #region ---- timeline ----
timeline_item = new timelineItemNode(self); timeline_item = new timelineItemNode(self);
anim_priority = ds_map_size(PROJECT.nodeMap); anim_priority = array_length(PROJECT.allNodes);
is_anim_timeline = false; is_anim_timeline = false;
#endregion #endregion
@ -901,7 +901,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
var _inp = inputs[| i].value_from; var _inp = inputs[| i].value_from;
// print($"Checking isLeafList {inputs[| i]} < {_inp} | list {ds_list_to_array(list)}"); // print($"Checking isLeafList {inputs[| i]} < {_inp} | list {ds_list_to_array(list)}");
if(_inp != noone && ds_list_exist(list, _inp.node)) if(_inp != noone && array_exists(list, _inp.node))
return false; return false;
} }
@ -1915,8 +1915,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
return; return;
} }
for( var i = 0; i < ds_list_size(group.nodes); i++ ) for( var i = 0; i < array_length(group.nodes); i++ )
group.nodes[| i].isTool = false; group.nodes[i].isTool = false;
isTool = true; isTool = true;
} #endregion } #endregion
@ -2234,7 +2234,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(!active) return; if(!active) return;
disable(); disable();
ds_list_remove(group == noone? PROJECT.nodes : group.getNodeList(), self); array_remove(group == noone? PROJECT.nodes : group.getNodeList(), self);
if(PANEL_GRAPH.node_hover == self) PANEL_GRAPH.node_hover = noone; if(PANEL_GRAPH.node_hover == self) PANEL_GRAPH.node_hover = noone;
PANEL_GRAPH.nodes_selecting = []; PANEL_GRAPH.nodes_selecting = [];
@ -2284,7 +2284,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(active) return; if(active) return;
enable(); enable();
ds_list_add(group == noone? PROJECT.nodes : group.getNodeList(), self); array_push(group == noone? PROJECT.nodes : group.getNodeList(), self);
onRestore(); onRestore();
if(group) group.refreshNodes(); if(group) group.refreshNodes();

View file

@ -51,8 +51,8 @@ function Node_DynaSurf(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
rendered = result; rendered = result;
if(result) if(result)
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var _n = nodes[| i]; var _n = nodes[i];
if(!is_instanceof(_n, Node_DynaSurf_Out) && if(!is_instanceof(_n, Node_DynaSurf_Out) &&
!is_instanceof(_n, Node_DynaSurf_Out_Width) && !is_instanceof(_n, Node_DynaSurf_Out_Width) &&
@ -73,8 +73,8 @@ function Node_DynaSurf(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
static setDynamicSurface = function() { #region static setDynamicSurface = function() { #region
var _dyna = new compute_dynaSurf(); var _dyna = new compute_dynaSurf();
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var _n = nodes[| i]; var _n = nodes[i];
if(is_instanceof(_n, Node_DynaSurf_Out)) if(is_instanceof(_n, Node_DynaSurf_Out))
_dyna.drawFn = _n.outputs[| 0].getValue(); _dyna.drawFn = _n.outputs[| 0].getValue();

View file

@ -21,12 +21,8 @@ MPEG-4 (.mp4)|*.mp4",
function exportAll() { function exportAll() {
if(IS_RENDERING) return; if(IS_RENDERING) return;
var key = ds_map_find_first(PROJECT.nodeMap); for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) {
var node = PROJECT.allNodes[i];
repeat(ds_map_size(PROJECT.nodeMap)) {
var node = PROJECT.nodeMap[? key];
key = ds_map_find_next(PROJECT.nodeMap, key);
if(!node.active) continue; if(!node.active) continue;
if(!is_instanceof(node, Node_Export)) continue; if(!is_instanceof(node, Node_Export)) continue;

View file

@ -164,14 +164,13 @@
} }
function nodeCleanUp() { function nodeCleanUp() {
var key = ds_map_find_first(PROJECT.nodeMap); for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) {
repeat(ds_map_size(PROJECT.nodeMap)) { var _node = PROJECT.allNodes[i];
if(PROJECT.nodeMap[? key]) {
PROJECT.nodeMap[? key].active = false; if(!is_struct(_node)) continue;
PROJECT.nodeMap[? key].cleanUp(); _node.active = false;
delete PROJECT.nodeMap[? key]; _node.cleanUp();
} delete _node;
key = ds_map_find_next(PROJECT.nodeMap, key);
} }
ds_map_clear(APPEND_MAP); ds_map_clear(APPEND_MAP);
@ -185,16 +184,12 @@
function refreshNodeMap() { function refreshNodeMap() {
ds_map_clear(PROJECT.nodeNameMap); ds_map_clear(PROJECT.nodeNameMap);
var key = ds_map_find_first(PROJECT.nodeMap);
var amo = ds_map_size(PROJECT.nodeMap);
repeat(amo) { for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) {
var node = PROJECT.nodeMap[? key]; var node = PROJECT.allNodes[i];
if(node.internalName != "") if(node.internalName != "")
PROJECT.nodeNameMap[? node.internalName] = node; PROJECT.nodeNameMap[? node.internalName] = node;
key = ds_map_find_next(PROJECT.nodeMap, key);
} }
} }

View file

@ -30,7 +30,7 @@ function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inli
APPEND_MAP[? CLONING_GROUP.input_node.node_id] = input; APPEND_MAP[? CLONING_GROUP.input_node.node_id] = input;
APPEND_MAP[? CLONING_GROUP.output_node.node_id] = output; APPEND_MAP[? CLONING_GROUP.output_node.node_id] = output;
ds_list_add(APPEND_LIST, input, output); array_push(APPEND_LIST, input, output);
} }
} #endregion } #endregion
@ -60,7 +60,7 @@ function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inli
} #endregion } #endregion
static refreshMember = function() { #region static refreshMember = function() { #region
ds_list_clear(nodes); nodes = [];
for( var i = 0, n = array_length(attributes.members); i < n; i++ ) { for( var i = 0, n = array_length(attributes.members); i < n; i++ ) {
if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) { if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) {
@ -71,7 +71,7 @@ function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inli
var _node = PROJECT.nodeMap[? attributes.members[i]]; var _node = PROJECT.nodeMap[? attributes.members[i]];
_node.inline_context = self; _node.inline_context = self;
ds_list_add(nodes, _node); array_push(nodes, _node);
if(is_instanceof(_node, Node_Iterator_Each_Inline_Input)) { if(is_instanceof(_node, Node_Iterator_Each_Inline_Input)) {
input_node = _node; input_node = _node;

View file

@ -28,8 +28,8 @@ function Node_Iterate_Filter(_x, _y, _group = noone) : Node_Iterator(_x, _y, _gr
var _int = noone; var _int = noone;
var _oup = noone; var _oup = noone;
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var _n = nodes[| i]; var _n = nodes[i];
if(is_instanceof(_n, Node_Iterator_Filter_Input)) if(is_instanceof(_n, Node_Iterator_Filter_Input))
_int = _n; _int = _n;

View file

@ -29,7 +29,7 @@ function Node_Iterate_Filter_Inline(_x, _y, _group = noone) : Node_Collection_In
APPEND_MAP[? CLONING_GROUP.input_node.node_id] = input; APPEND_MAP[? CLONING_GROUP.input_node.node_id] = input;
APPEND_MAP[? CLONING_GROUP.output_node.node_id] = output; APPEND_MAP[? CLONING_GROUP.output_node.node_id] = output;
ds_list_add(APPEND_LIST, input, output); array_push(APPEND_LIST, input, output);
} }
} #endregion } #endregion
@ -58,7 +58,7 @@ function Node_Iterate_Filter_Inline(_x, _y, _group = noone) : Node_Collection_In
} #endregion } #endregion
static refreshMember = function() { #region static refreshMember = function() { #region
ds_list_clear(nodes); nodes = [];
for( var i = 0, n = array_length(attributes.members); i < n; i++ ) { for( var i = 0, n = array_length(attributes.members); i < n; i++ ) {
if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) { if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) {
@ -68,7 +68,7 @@ function Node_Iterate_Filter_Inline(_x, _y, _group = noone) : Node_Collection_In
var _node = PROJECT.nodeMap[? attributes.members[i]]; var _node = PROJECT.nodeMap[? attributes.members[i]];
_node.inline_context = self; _node.inline_context = self;
ds_list_add(nodes, _node); array_push(nodes, _node);
if(is_instanceof(_node, Node_Iterator_Filter_Inline_Input)) { if(is_instanceof(_node, Node_Iterator_Filter_Inline_Input)) {
input_node = _node; input_node = _node;

View file

@ -11,7 +11,7 @@ function Node_Iterate_Sort(_x, _y, _group = noone) : Node_Collection(_x, _y, _gr
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, noone ); outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, noone );
topoList = ds_list_create(); topoList = [];
custom_input_index = ds_list_size(inputs); custom_input_index = ds_list_size(inputs);
custom_output_index = ds_list_size(inputs); custom_output_index = ds_list_size(inputs);
@ -35,8 +35,8 @@ function Node_Iterate_Sort(_x, _y, _group = noone) : Node_Collection(_x, _y, _gr
} #endregion } #endregion
static isActiveDynamic = function(frame = CURRENT_FRAME) { #region static isActiveDynamic = function(frame = CURRENT_FRAME) { #region
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) for( var i = 0, n = array_length(nodes); i < n; i++ )
if(nodes[| i].isActiveDynamic(frame)) return true; if(nodes[i].isActiveDynamic(frame)) return true;
return false; return false;
} #endregion } #endregion
@ -63,8 +63,8 @@ function Node_Iterate_Sort(_x, _y, _group = noone) : Node_Collection(_x, _y, _gr
var _typ = inputs[| 0].type; var _typ = inputs[| 0].type;
for( var i = 0; i < ds_list_size(nodes); i++ ) { for( var i = 0; i < array_length(nodes); i++ ) {
var _n = nodes[| i]; var _n = nodes[i];
if(!struct_has(_n.attributes, "sort_inputs")) continue; if(!struct_has(_n.attributes, "sort_inputs")) continue;
switch(_n.attributes.sort_inputs) { switch(_n.attributes.sort_inputs) {
@ -83,7 +83,7 @@ function Node_Iterate_Sort(_x, _y, _group = noone) : Node_Collection(_x, _y, _gr
inputReady += 2; inputReady += 2;
break; break;
case 9 : case 9 :
outputNode = nodes[| i].inputs[| 0]; outputNode = nodes[i].inputs[| 0];
inputReady += 4; inputReady += 4;
break; break;
} }

View file

@ -3,7 +3,7 @@ function Node_Iterate_Sort_Inline(_x, _y, _group = noone) : Node_Collection_Inli
color = COLORS.node_blend_loop; color = COLORS.node_blend_loop;
is_root = false; is_root = false;
topoList = ds_list_create(); topoList = [];
input_node = noone; input_node = noone;
output_node = noone; output_node = noone;
@ -31,13 +31,13 @@ function Node_Iterate_Sort_Inline(_x, _y, _group = noone) : Node_Collection_Inli
APPEND_MAP[? CLONING_GROUP.input_node.node_id] = input; APPEND_MAP[? CLONING_GROUP.input_node.node_id] = input;
APPEND_MAP[? CLONING_GROUP.output_node.node_id] = output; APPEND_MAP[? CLONING_GROUP.output_node.node_id] = output;
ds_list_add(APPEND_LIST, input, output); array_push(APPEND_LIST, input, output);
} }
} #endregion } #endregion
static isActiveDynamic = function(frame = CURRENT_FRAME) { #region static isActiveDynamic = function(frame = CURRENT_FRAME) { #region
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) for( var i = 0, n = array_length(nodes); i < n; i++ )
if(nodes[| i].isActiveDynamic(frame)) return true; if(nodes[i].isActiveDynamic(frame)) return true;
return false; return false;
} #endregion } #endregion
@ -47,7 +47,7 @@ function Node_Iterate_Sort_Inline(_x, _y, _group = noone) : Node_Collection_Inli
} #endregion } #endregion
static refreshMember = function() { #region static refreshMember = function() { #region
ds_list_clear(nodes); nodes = [];
for( var i = 0, n = array_length(attributes.members); i < n; i++ ) { for( var i = 0, n = array_length(attributes.members); i < n; i++ ) {
if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) { if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) {
@ -57,7 +57,7 @@ function Node_Iterate_Sort_Inline(_x, _y, _group = noone) : Node_Collection_Inli
var _node = PROJECT.nodeMap[? attributes.members[i]]; var _node = PROJECT.nodeMap[? attributes.members[i]];
_node.inline_context = self; _node.inline_context = self;
ds_list_add(nodes, _node); array_push(nodes, _node);
if(is_instanceof(_node, Node_Iterator_Sort_Inline_Input)) { if(is_instanceof(_node, Node_Iterator_Sort_Inline_Input)) {
input_node = _node; input_node = _node;
@ -153,8 +153,6 @@ function Node_Iterate_Sort_Inline(_x, _y, _group = noone) : Node_Collection_Inli
if(input_node.inputs[| 0].value_from == noone) return; if(input_node.inputs[| 0].value_from == noone) return;
//print($"=============== STARTING SORT with {ds_list_size(topoList)}/{ds_list_size(nodes)} nodes ===============")
var arrIn = input_node.inputs[| 0].getValue(); var arrIn = input_node.inputs[| 0].getValue();
var arrOut = output_node.outputs[| 0].getValue(); var arrOut = output_node.outputs[| 0].getValue();

View file

@ -33,8 +33,8 @@ function Node_Pixel_Builder(_x, _y, _group = noone) : Node_Collection(_x, _y, _g
} #endregion } #endregion
static checkComplete = function() { #region static checkComplete = function() { #region
for( var i = 0; i < ds_list_size(nodes); i++ ) for( var i = 0; i < array_length(nodes); i++ )
if(!nodes[| i].rendered) return []; if(!nodes[i].rendered) return [];
buildPixel(); buildPixel();
@ -56,8 +56,8 @@ function Node_Pixel_Builder(_x, _y, _group = noone) : Node_Collection(_x, _y, _g
var _dim = getInputData(0); var _dim = getInputData(0);
var _surfs = ds_map_create(); var _surfs = ds_map_create();
for( var i = 0; i < ds_list_size(nodes); i++ ) { for( var i = 0; i < array_length(nodes); i++ ) {
var _n = nodes[| i]; var _n = nodes[i];
for( var j = 0; j < ds_list_size(_n.outputs); j++ ) { for( var j = 0; j < ds_list_size(_n.outputs); j++ ) {
var _out = _n.outputs[| j]; var _out = _n.outputs[| j];

View file

@ -178,8 +178,8 @@ function Node_Rigid_Object(_x, _y, _group = noone) : Node(_x, _y, _group) constr
if(gr == noone) return; if(gr == noone) return;
if(previewing == 0) { if(previewing == 0) {
for( var i = 0, n = ds_list_size(gr.nodes); i < n; i++ ) { for( var i = 0, n = array_length(gr.nodes); i < n; i++ ) {
var _node = gr.nodes[| i]; var _node = gr.nodes[i];
if(!is_instanceof(_node, Node_Rigid_Object)) continue; if(!is_instanceof(_node, Node_Rigid_Object)) continue;
var _hov = _node.drawOverlayPreview(active, _x, _y, _s, _mx, _my, _snx, _sny); var _hov = _node.drawOverlayPreview(active, _x, _y, _s, _mx, _my, _snx, _sny);
active &= _hov; active &= _hov;

View file

@ -54,8 +54,8 @@ function Node_Rigid_Object_Spawner(_x, _y, _group = noone) : Node(_x, _y, _group
if(inline_context != noone) gr = inline_context; if(inline_context != noone) gr = inline_context;
if(attributes.show_objects && gr != noone) if(attributes.show_objects && gr != noone)
for( var i = 0, n = ds_list_size(gr.nodes); i < n; i++ ) { for( var i = 0, n = array_length(gr.nodes); i < n; i++ ) {
var _node = gr.nodes[| i]; var _node = gr.nodes[i];
if(!is_instanceof(_node, Node_Rigid_Object)) continue; if(!is_instanceof(_node, Node_Rigid_Object)) continue;
var _hov = _node.drawOverlayPreview(hover, active, _x, _y, _s, _mx, _my, _snx, _sny); var _hov = _node.drawOverlayPreview(hover, active, _x, _y, _s, _mx, _my, _snx, _sny);
active &= !_hov; active &= !_hov;

View file

@ -44,8 +44,8 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr
if(gr == noone) return; if(gr == noone) return;
if(!attributes.show_objects) return; if(!attributes.show_objects) return;
for( var i = 0, n = ds_list_size(gr.nodes); i < n; i++ ) { for( var i = 0, n = array_length(gr.nodes); i < n; i++ ) {
var _node = gr.nodes[| i]; var _node = gr.nodes[i];
if(!is_instanceof(_node, Node_Rigid_Object)) continue; if(!is_instanceof(_node, Node_Rigid_Object)) continue;
var _hov = _node.drawOverlayPreview(hover, active, _x, _y, _s, _mx, _my, _snx, _sny); var _hov = _node.drawOverlayPreview(hover, active, _x, _y, _s, _mx, _my, _snx, _sny);
active &= !_hov; active &= !_hov;

View file

@ -54,8 +54,8 @@ function Node_Rigid_Render_Output(_x, _y, _group = noone) : Node_Group_Output(_x
if(gr == noone) return; if(gr == noone) return;
if(!attributes.show_objects) return; if(!attributes.show_objects) return;
for( var i = 0, n = ds_list_size(gr.nodes); i < n; i++ ) { for( var i = 0, n = array_length(gr.nodes); i < n; i++ ) {
var _node = gr.nodes[| i]; var _node = gr.nodes[i];
if(!is_instanceof(_node, Node_Rigid_Object)) continue; if(!is_instanceof(_node, Node_Rigid_Object)) continue;
var _hov = _node.drawOverlayPreview(active, _x, _y, _s, _mx, _my, _snx, _sny); var _hov = _node.drawOverlayPreview(active, _x, _y, _s, _mx, _my, _snx, _sny);
active &= !_hov; active &= !_hov;

View file

@ -63,8 +63,8 @@ function Node_Smoke_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _gro
} }
static update = function() { static update = function() {
for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { for( var i = 0, n = array_length(nodes); i < n; i++ ) {
var node = nodes[| i]; var node = nodes[i];
if(node.cacheExist()) node.cachedPropagate(); if(node.cacheExist()) node.cachedPropagate();
} }

View file

@ -1992,10 +1992,8 @@ function Panel_Animation() : PanelContent() constructor {
TOTAL_FRAMES = len; TOTAL_FRAMES = len;
if(_len != len) { if(_len != len) {
var key = ds_map_find_first(PROJECT.nodeMap); for (var m = 0, n = array_length(PROJECT.allNodes); m < n; m++) {
repeat(ds_map_size(PROJECT.nodeMap)) { var _node = PROJECT.allNodes[m];
var _node = PROJECT.nodeMap[? key];
key = ds_map_find_next(PROJECT.nodeMap, key);
if(!_node || !_node.active) continue; if(!_node || !_node.active) continue;
for(var i = 0; i < ds_list_size(_node.inputs); i++) { for(var i = 0; i < ds_list_size(_node.inputs); i++) {

View file

@ -22,10 +22,10 @@ function Panel_Animation_Scaler() : Panel_Linear_Setting() constructor {
static scale = function() { static scale = function() {
var fac = scale_to / TOTAL_FRAMES; var fac = scale_to / TOTAL_FRAMES;
var key = ds_map_find_first(PROJECT.nodeMap);
repeat(ds_map_size(PROJECT.nodeMap)) { for (var k = 0, n = array_length(PROJECT.allNodes); k < n; k++) {
var _node = PROJECT.nodeMap[? key]; var _node = PROJECT.allNodes[k];
key = ds_map_find_next(PROJECT.nodeMap, key);
if(!_node || !_node.active) continue; if(!_node || !_node.active) continue;
for(var i = 0; i < ds_list_size(_node.inputs); i++) { for(var i = 0; i < ds_list_size(_node.inputs); i++) {
@ -37,6 +37,7 @@ function Panel_Animation_Scaler() : Panel_Linear_Setting() constructor {
} }
} }
} }
TOTAL_FRAMES = scale_to; TOTAL_FRAMES = scale_to;
close(); close();
} }

View file

@ -145,15 +145,15 @@ function Panel_Collection() : PanelContent() constructor {
contentPane = new scrollPane(content_w - ui(6), content_h, function(_y, _m) { #region contentPane = new scrollPane(content_w - ui(6), content_h, function(_y, _m) { #region
draw_clear_alpha(c_white, 0); draw_clear_alpha(c_white, 0);
var nodes; var content;
var steamNode = []; var steamNode = [];
if(mode == 0) { if(mode == 0) {
if(!COLLECTIONS.scanned) if(!COLLECTIONS.scanned)
COLLECTIONS.scan([".json", ".pxcc"]); COLLECTIONS.scan([".json", ".pxcc"]);
if(context == root) nodes = STEAM_COLLECTION; if(context == root) content = STEAM_COLLECTION;
else nodes = context.content; else content = context.content;
for( var i = 0; i < ds_list_size(STEAM_COLLECTION); i++ ) { for( var i = 0; i < ds_list_size(STEAM_COLLECTION); i++ ) {
var meta = STEAM_COLLECTION[| i].meta; var meta = STEAM_COLLECTION[| i].meta;
@ -162,15 +162,15 @@ function Panel_Collection() : PanelContent() constructor {
} }
} else if(mode == 1) { } else if(mode == 1) {
nodes = context.content; content = context.content;
} else if(mode == 2) { } else if(mode == 2) {
nodes = context; content = context;
} }
if(search_string != "") nodes = search_list; if(search_string != "") content = search_list;
var node_list = ds_list_size(nodes); var node_list = ds_list_size(content);
var node_count = node_list + array_length(steamNode); var node_count = node_list + array_length(steamNode);
var frame = PREFERENCES.collection_animated? current_time * PREFERENCES.collection_preview_speed / 3000 : 0; var frame = PREFERENCES.collection_animated? current_time * PREFERENCES.collection_preview_speed / 3000 : 0;
var _cw = contentPane.surface_w; var _cw = contentPane.surface_w;
@ -200,7 +200,7 @@ function Panel_Collection() : PanelContent() constructor {
var index = i * col + j; var index = i * col + j;
if(index >= node_count) break; if(index >= node_count) break;
var _node = index < node_list? nodes[| index] : steamNode[index - node_list]; var _node = index < node_list? content[| index] : steamNode[index - node_list];
var _nx = grid_space + (grid_width + grid_space) * j; var _nx = grid_space + (grid_width + grid_space) * j;
var _boxx = _nx + (grid_width - grid_size) / 2; var _boxx = _nx + (grid_width - grid_size) / 2;
_boxx = round(_boxx); _boxx = round(_boxx);
@ -293,7 +293,7 @@ function Panel_Collection() : PanelContent() constructor {
hh += list_height; hh += list_height;
for(var i = 0; i < node_count; i++) { for(var i = 0; i < node_count; i++) {
var _node = i < node_list? nodes[| i] : steamNode[i - node_list]; var _node = i < node_list? content[| i] : steamNode[i - node_list];
if(!_node) continue; if(!_node) continue;
if(yy + list_height >= 0 && yy <= contentPane.surface_h) { if(yy + list_height >= 0 && yy <= contentPane.surface_h) {

View file

@ -55,7 +55,7 @@
function panel_graph_add_display() { CALL("graph_add_disp"); PANEL_GRAPH.createNodeHotkey("Node_Display_Text"); } function panel_graph_add_display() { CALL("graph_add_disp"); PANEL_GRAPH.createNodeHotkey("Node_Display_Text"); }
function panel_graph_add_transform() { CALL("graph_add_transform"); PANEL_GRAPH.doTransform(); } function panel_graph_add_transform() { CALL("graph_add_transform"); PANEL_GRAPH.doTransform(); }
function panel_graph_select_all() { CALL("graph_select_all"); PANEL_GRAPH.nodes_selecting = ds_list_to_array(PANEL_GRAPH.nodes_list); } function panel_graph_select_all() { CALL("graph_select_all"); PANEL_GRAPH.nodes_selecting = PANEL_GRAPH.nodes_list; }
function panel_graph_toggle_grid() { CALL("graph_toggle_grid"); PANEL_GRAPH.display_parameter.show_grid = !PANEL_GRAPH.display_parameter.show_grid; } function panel_graph_toggle_grid() { CALL("graph_toggle_grid"); PANEL_GRAPH.display_parameter.show_grid = !PANEL_GRAPH.display_parameter.show_grid; }
function panel_graph_toggle_preview() { CALL("graph_toggle_preview"); PANEL_GRAPH.setTriggerPreview(); } function panel_graph_toggle_preview() { CALL("graph_toggle_preview"); PANEL_GRAPH.setTriggerPreview(); }
function panel_graph_toggle_parameter() { CALL("graph_toggle_parameter"); PANEL_GRAPH.setTriggerParameter(); } function panel_graph_toggle_parameter() { CALL("graph_toggle_parameter"); PANEL_GRAPH.setTriggerParameter(); }
@ -227,7 +227,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
#endregion #endregion
#region ---- nodes ---- #region ---- nodes ----
node_context = ds_list_create(); node_context = [];
node_dragging = noone; node_dragging = noone;
node_drag_mx = 0; node_drag_mx = 0;
@ -299,10 +299,10 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
toolbar_height = ui(40); toolbar_height = ui(40);
function toCenterNode(_list = nodes_list) { #region function toCenterNode(_arr = nodes_list) { #region
if(!project.active) return; if(!project.active) return;
if(ds_list_empty(_list)) { if(array_empty(_arr)) {
graph_x = round(w / 2 / graph_s); graph_x = round(w / 2 / graph_s);
graph_y = round(h / 2 / graph_s); graph_y = round(h / 2 / graph_s);
return; return;
@ -313,8 +313,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var miny = 99999; var miny = 99999;
var maxy = -99999; var maxy = -99999;
for(var i = 0; i < ds_list_size(_list); i++) { for(var i = 0; i < array_length(_arr); i++) {
var _node = _list[| i]; var _node = _arr[i];
if(!is_struct(_node) || !is_instanceof(_node, Node) || !_node.active) if(!is_struct(_node) || !is_instanceof(_node, Node) || !_node.active)
continue; continue;
@ -544,12 +544,9 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
_blend.inputs[| 1].setFrom(_canvas.outputs[| 0]); _blend.inputs[| 1].setFrom(_canvas.outputs[| 0]);
} #endregion } #endregion
function getFocusingNode() { INLINE return array_empty(nodes_selecting)? noone : nodes_selecting[0]; } function getFocusingNode() { return array_empty(nodes_selecting)? noone : nodes_selecting[0]; }
function getCurrentContext() { #region function getCurrentContext() { return array_empty(node_context)? noone : node_context[array_length(node_context) - 1]; }
if(ds_list_empty(node_context)) return noone;
return node_context[| ds_list_size(node_context) - 1];
} #endregion
function getNodeList(cont = getCurrentContext()) { #region function getNodeList(cont = getCurrentContext()) { #region
return cont == noone? project.nodes : cont.getNodeList(); return cont == noone? project.nodes : cont.getNodeList();
@ -575,8 +572,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var graph = new Panel_Graph(project); var graph = new Panel_Graph(project);
panel.setContent(graph, true); panel.setContent(graph, true);
for( var i = 0; i < ds_list_size(node_context); i++ ) for( var i = 0; i < array_length(node_context); i++ )
graph.addContext(node_context[| i]); graph.addContext(node_context[i]);
graph.addContext(group); graph.addContext(group);
setFocus(panel); setFocus(panel);
@ -714,10 +711,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
function fullView() { #region function fullView() { #region
INLINE INLINE
var _l = ds_list_create_from_array(nodes_selecting); toCenterNode(array_empty(nodes_selecting)? nodes_list : node_selecting);
toCenterNode(array_empty(nodes_selecting)? nodes_list : _l);
ds_list_destroy(_l);
graph_s_to = 1; graph_s_to = 1;
} #endregion } #endregion
@ -846,7 +840,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
//// =========== Context ========== //// =========== Context ==========
function resetContext() { #region function resetContext() { #region
ds_list_clear(node_context); node_context = [];
nodes_list = project.nodes; nodes_list = project.nodes;
toCenterNode(); toCenterNode();
} #endregion } #endregion
@ -856,7 +850,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
setContextFrame(false, _node); setContextFrame(false, _node);
nodes_list = _node.nodes; nodes_list = _node.nodes;
ds_list_add(node_context, _node); array_push(node_context, _node);
node_dragging = noone; node_dragging = noone;
nodes_selecting = []; nodes_selecting = [];
@ -1000,8 +994,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var gr_y = graph_y * graph_s; var gr_y = graph_y * graph_s;
var _hov = false; var _hov = false;
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
var h = nodes_list[| i].drawPreviewBackground(gr_x, gr_y, mx, my, graph_s); var h = nodes_list[i].drawPreviewBackground(gr_x, gr_y, mx, my, graph_s);
_hov |= h; _hov |= h;
} }
@ -1028,16 +1022,16 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
_frame_hovering = frame_hovering; _frame_hovering = frame_hovering;
frame_hovering = noone; frame_hovering = noone;
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
nodes_list[| i].cullCheck(gr_x, gr_y, graph_s, -32, -32, w + 32, h + 64); nodes_list[i].cullCheck(gr_x, gr_y, graph_s, -32, -32, w + 32, h + 64);
nodes_list[| i].preDraw(gr_x, gr_y, graph_s, gr_x, gr_y); nodes_list[i].preDraw(gr_x, gr_y, graph_s, gr_x, gr_y);
} }
printIf(log, $"Predraw time: {get_timer() - t}"); t = get_timer(); printIf(log, $"Predraw time: {get_timer() - t}"); t = get_timer();
#region draw frame #region draw frame
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
if(nodes_list[| i].drawNodeBG(gr_x, gr_y, mx, my, graph_s, display_parameter)) if(nodes_list[i].drawNodeBG(gr_x, gr_y, mx, my, graph_s, display_parameter))
frame_hovering = nodes_list[| i]; frame_hovering = nodes_list[i];
} }
#endregion #endregion
printIf(log, $"Frame draw time: {get_timer() - t}"); t = get_timer(); printIf(log, $"Frame draw time: {get_timer() - t}"); t = get_timer();
@ -1045,8 +1039,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
#region hover #region hover
node_hovering = noone; node_hovering = noone;
if(pHOVER) if(pHOVER)
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
var _node = nodes_list[| i]; var _node = nodes_list[i];
_node.branch_drawing = false; _node.branch_drawing = false;
if(_node.pointIn(gr_x, gr_y, mx, my, graph_s)) if(_node.pointIn(gr_x, gr_y, mx, my, graph_s))
node_hovering = _node; node_hovering = _node;
@ -1100,8 +1094,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
nodes_selecting = [ node_hovering ]; nodes_selecting = [ node_hovering ];
if(!key_mod_press(CTRL)) if(!key_mod_press(CTRL))
for(var i = 0; i < ds_list_size(nodes_list); i++) { //select content for(var i = 0; i < array_length(nodes_list); i++) { //select content
var _node = nodes_list[| i]; var _node = nodes_list[i];
if(_node == node_hovering) continue; if(_node == node_hovering) continue;
if(!_node.selectable) continue; if(!_node.selectable) continue;
@ -1286,13 +1280,13 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
param.active = hoverable; param.active = hoverable;
param.setPos(gr_x, gr_y, graph_s, mx, my); param.setPos(gr_x, gr_y, graph_s, mx, my);
param.setBoundary(-64, -64, w + 64, h + 64); param.setBoundary(-64, -64, w + 64, h + 64);
param.setProp(ds_list_size(nodes_list), display_parameter.highlight); param.setProp(array_length(nodes_list), display_parameter.highlight);
param.setDraw(aa, bg_color); param.setDraw(aa, bg_color);
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
param.cur_layer = i + 1; param.cur_layer = i + 1;
var _hov = nodes_list[| i].drawConnections(param); var _hov = nodes_list[i].drawConnections(param);
if(_hov != noone && is_struct(_hov)) hov = _hov; if(_hov != noone && is_struct(_hov)) hov = _hov;
} }
@ -1336,11 +1330,11 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
#region draw node #region draw node
var t = get_timer(); var t = get_timer();
for(var i = 0; i < ds_list_size(nodes_list); i++) for(var i = 0; i < array_length(nodes_list); i++)
nodes_list[| i].drawNodeBehind(gr_x, gr_y, mx, my, graph_s); nodes_list[i].drawNodeBehind(gr_x, gr_y, mx, my, graph_s);
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
var _node = nodes_list[| i]; var _node = nodes_list[i];
if(is_instanceof(_node, Node_Frame)) continue; if(is_instanceof(_node, Node_Frame)) continue;
try { try {
@ -1354,8 +1348,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
} }
} }
for(var i = 0; i < ds_list_size(nodes_list); i++) for(var i = 0; i < array_length(nodes_list); i++)
nodes_list[| i].drawBadge(gr_x, gr_y, graph_s); nodes_list[i].drawBadge(gr_x, gr_y, graph_s);
if(PANEL_INSPECTOR && PANEL_INSPECTOR.prop_hover != noone) if(PANEL_INSPECTOR && PANEL_INSPECTOR.prop_hover != noone)
value_focus = PANEL_INSPECTOR.prop_hover; value_focus = PANEL_INSPECTOR.prop_hover;
@ -1366,8 +1360,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
if(mouse_press(mb_left)) if(mouse_press(mb_left))
node_dragging = noone; node_dragging = noone;
for(var i = 0; i < ds_list_size(nodes_list); i++) for(var i = 0; i < array_length(nodes_list); i++)
nodes_list[| i].groupCheck(gr_x, gr_y, graph_s, mx, my); nodes_list[i].groupCheck(gr_x, gr_y, graph_s, mx, my);
if(node_dragging && !key_mod_press(ALT)) { if(node_dragging && !key_mod_press(ALT)) {
var nx = node_drag_sx + (mouse_graph_x - node_drag_mx); var nx = node_drag_sx + (mouse_graph_x - node_drag_mx);
@ -1454,8 +1448,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
if(nodes_select_drag == 2) { if(nodes_select_drag == 2) {
draw_sprite_stretched_points_clamp(THEME.ui_selection, 0, nodes_select_mx, nodes_select_my, mx, my, COLORS._main_accent); draw_sprite_stretched_points_clamp(THEME.ui_selection, 0, nodes_select_mx, nodes_select_my, mx, my, COLORS._main_accent);
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
var _node = nodes_list[| i]; var _node = nodes_list[i];
if(!_node.selectable) continue; if(!_node.selectable) continue;
if(is_instanceof(_node, Node_Frame) && !nodes_select_frame) continue; if(is_instanceof(_node, Node_Frame) && !nodes_select_frame) continue;
@ -1752,8 +1746,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var gr_x = graph_x * graph_s; var gr_x = graph_x * graph_s;
var gr_y = graph_y * graph_s; var gr_y = graph_y * graph_s;
for(var i = 0; i < ds_list_size(nodes_list); i++) for(var i = 0; i < array_length(nodes_list); i++)
nodes_list[| i].drawJunctionNames(gr_x, gr_y, mx, my, graph_s); nodes_list[i].drawJunctionNames(gr_x, gr_y, mx, my, graph_s);
} #endregion } #endregion
@ -1778,37 +1772,34 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var bh = toolbar_height - ui(12); var bh = toolbar_height - ui(12);
var tbh = h - toolbar_height / 2; var tbh = h - toolbar_height / 2;
for(var i = -1; i < ds_list_size(node_context); i++) { for(var i = -1; i < array_length(node_context); i++) {
if(i == -1) { if(i == -1) {
tt = __txt("Global"); tt = __txt("Global");
} else { } else {
var _cnt = node_context[| i]; var _cnt = node_context[i];
tt = _cnt.renamed? _cnt.display_name : _cnt.name; tt = _cnt.renamed? _cnt.display_name : _cnt.name;
} }
tw = string_width(tt); tw = string_width(tt);
th = string_height(tt); th = string_height(tt);
if(i < ds_list_size(node_context) - 1) { if(i < array_length(node_context) - 1) {
if(buttonInstant(THEME.button_hide_fill, xx - ui(6), tbh - bh / 2, tw + ui(12), bh, [mx, my], pFOCUS, pHOVER) == 2) { if(buttonInstant(THEME.button_hide_fill, xx - ui(6), tbh - bh / 2, tw + ui(12), bh, [mx, my], pFOCUS, pHOVER) == 2) {
node_hover = noone; node_hover = noone;
nodes_selecting = []; nodes_selecting = [];
PANEL_PREVIEW.resetNodePreview(); PANEL_PREVIEW.resetNodePreview();
setContextFrame(true, node_context[| i + 1]); setContextFrame(true, node_context[i + 1]);
var _nodeFocus = node_context[| i + 1]; var _nodeFocus = node_context[i + 1];
if(i == -1) if(i == -1)
resetContext(); resetContext();
else { else {
for(var j = ds_list_size(node_context) - 1; j > i; j--) array_resize(node_context, i + 1);
ds_list_delete(node_context, j); nodes_list = node_context[i].getNodeList();
nodes_list = node_context[| i].getNodeList();
} }
nodes_selecting = [ _nodeFocus ]; nodes_selecting = [ _nodeFocus ];
var _l = ds_list_create_from_array(nodes_selecting) toCenterNode(nodes_selecting);
toCenterNode(_l);
ds_list_destroy(_l);
break; break;
} }
@ -1816,7 +1807,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
} }
draw_set_color(COLORS._main_text); draw_set_color(COLORS._main_text);
draw_set_alpha(i < ds_list_size(node_context) - 1? 0.33 : 1); draw_set_alpha(i < array_length(node_context) - 1? 0.33 : 1);
draw_text(xx, tbh, tt); draw_text(xx, tbh, tt);
draw_set_alpha(1); draw_set_alpha(1);
xx += tw; xx += tw;
@ -1877,14 +1868,14 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
surface_set_target(minimap_surface); surface_set_target(minimap_surface);
draw_clear_alpha(COLORS.panel_bg_clear_inner, 0.75); draw_clear_alpha(COLORS.panel_bg_clear_inner, 0.75);
if(!ds_list_empty(nodes_list)) { if(!array_empty(nodes_list)) {
var minx = 99999; var minx = 99999;
var maxx = -99999; var maxx = -99999;
var miny = 99999; var miny = 99999;
var maxy = -99999; var maxy = -99999;
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
var _node = nodes_list[| i]; var _node = nodes_list[i];
minx = min(_node.x - 32, minx); minx = min(_node.x - 32, minx);
maxx = max(_node.x + _node.w + 32, maxx); maxx = max(_node.x + _node.w + 32, maxx);
@ -1899,8 +1890,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var ss = min(minimap_w / spw, minimap_h / sph); var ss = min(minimap_w / spw, minimap_h / sph);
draw_set_alpha(0.4); draw_set_alpha(0.4);
for(var i = 0; i < ds_list_size(nodes_list); i++) { for(var i = 0; i < array_length(nodes_list); i++) {
var _node = nodes_list[| i]; var _node = nodes_list[i];
var nx = minimap_w / 2 + (_node.x - cx) * ss; var nx = minimap_w / 2 + (_node.x - cx) * ss;
var ny = minimap_h / 2 + (_node.y - cy) * ss; var ny = minimap_h / 2 + (_node.y - cy) * ss;
@ -2113,7 +2104,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
_map.nodes = _node; _map.nodes = _node;
ds_map_clear(APPEND_MAP); ds_map_clear(APPEND_MAP);
ds_list_clear(APPEND_LIST); APPEND_LIST = [];
CLONING = true; CLONING = true;
var _pmap_keys = variable_struct_get_names(_pmap); var _pmap_keys = variable_struct_get_names(_pmap);
@ -2128,10 +2119,10 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
} }
APPEND_LIST = __APPEND_MAP(_map,, APPEND_LIST); APPEND_LIST = __APPEND_MAP(_map,, APPEND_LIST);
recordAction(ACTION_TYPE.collection_loaded, array_create_from_list(APPEND_LIST)); recordAction(ACTION_TYPE.collection_loaded, array_clone(APPEND_LIST));
CLONING = false; CLONING = false;
if(ds_list_size(APPEND_LIST) == 0) return; if(array_empty(APPEND_LIST)) return;
for(var i = 0; i < array_length(nodes_selecting); i++) { for(var i = 0; i < array_length(nodes_selecting); i++) {
var _orignal = nodes_selecting[i]; var _orignal = nodes_selecting[i];
@ -2148,19 +2139,19 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var x0 = 99999999; var x0 = 99999999;
var y0 = 99999999; var y0 = 99999999;
for(var i = 0; i < ds_list_size(APPEND_LIST); i++) { for(var i = 0; i < array_length(APPEND_LIST); i++) {
var _node = APPEND_LIST[| i]; var _node = APPEND_LIST[i];
x0 = min(x0, _node.x); x0 = min(x0, _node.x);
y0 = min(y0, _node.y); y0 = min(y0, _node.y);
} }
node_dragging = APPEND_LIST[| 0]; node_dragging = APPEND_LIST[0];
node_drag_mx = x0; node_drag_my = y0; node_drag_mx = x0; node_drag_my = y0;
node_drag_sx = x0; node_drag_sy = y0; node_drag_sx = x0; node_drag_sy = y0;
node_drag_ox = x0; node_drag_oy = y0; node_drag_ox = x0; node_drag_oy = y0;
nodes_selecting = array_create_from_list(APPEND_LIST); nodes_selecting = APPEND_LIST;
} #endregion } #endregion
function doInstance() { #region function doInstance() { #region
@ -2215,26 +2206,24 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
if(_app == noone) if(_app == noone)
return; return;
if(ds_list_size(_app) == 0) { if(array_empty(_app))
ds_list_destroy(_app);
return; return;
}
var x0 = 99999999; var x0 = 99999999;
var y0 = 99999999; var y0 = 99999999;
for(var i = 0; i < ds_list_size(_app); i++) { for(var i = 0; i < array_length(_app); i++) {
var _node = _app[| i]; var _node = _app[i];
x0 = min(x0, _node.x); x0 = min(x0, _node.x);
y0 = min(y0, _node.y); y0 = min(y0, _node.y);
} }
node_dragging = _app[| 0]; node_dragging = _app[0];
node_drag_mx = x0; node_drag_my = y0; node_drag_mx = x0; node_drag_my = y0;
node_drag_sx = x0; node_drag_sy = y0; node_drag_sx = x0; node_drag_sy = y0;
node_drag_ox = x0; node_drag_oy = y0; node_drag_ox = x0; node_drag_oy = y0;
nodes_selecting = array_create_from_list(_app); nodes_selecting = _app;
return; return;
} }
@ -2501,25 +2490,25 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var app = APPEND(DRAGGING.data.path, getCurrentContext()); var app = APPEND(DRAGGING.data.path, getCurrentContext());
if(!is_struct(app) && ds_exists(app, ds_type_list)) { if(is_array(app)) {
var cx = 0; var cx = 0;
var cy = 0; var cy = 0;
var amo = array_length(app);
for( var i = 0; i < ds_list_size(app); i++ ) { for( var i = 0; i < amo; i++ ) {
cx += app[| i].x; cx += app[i].x;
cy += app[| i].y; cy += app[i].y;
} }
cx /= ds_list_size(app); cx /= amo;
cy /= ds_list_size(app); cy /= amo;
for( var i = 0; i < ds_list_size(app); i++ ) { for( var i = 0; i < amo; i++ ) {
app[| i].x = app[| i].x - cx + mouse_grid_x; app[i].x = app[i].x - cx + mouse_grid_x;
app[| i].y = app[| i].y - cy + mouse_grid_y; app[i].y = app[i].y - cy + mouse_grid_y;
} }
ds_list_destroy(app); } else if(is_struct(app) && is_instanceof(app, Node)) {
} else {
app.x = mouse_grid_x; app.x = mouse_grid_x;
app.y = mouse_grid_y; app.y = mouse_grid_y;
} }
@ -2538,10 +2527,10 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
} #endregion } #endregion
static bringNodeToFront = function(node) { #region static bringNodeToFront = function(node) { #region
if(!ds_list_exist(nodes_list, node)) return; if(!array_exists(nodes_list, node)) return;
ds_list_remove(nodes_list, node); array_remove(nodes_list, node);
ds_list_add(nodes_list, node); array_push(nodes_list, node);
} #endregion } #endregion
static onFullScreen = function() { run_in(1, fullView); } static onFullScreen = function() { run_in(1, fullView); }

View file

@ -151,10 +151,8 @@ function Panel_Menu() : PanelContent() constructor {
}, [ THEME.sequence_control, 1 ], ["", "Render all"]), }, [ THEME.sequence_control, 1 ], ["", "Render all"]),
menuItem(__txtx("panel_menu_execute_exports", "Execute all export nodes"), function() { menuItem(__txtx("panel_menu_execute_exports", "Execute all export nodes"), function() {
var key = ds_map_find_first(PROJECT.nodeMap); for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) {
repeat(ds_map_size(PROJECT.nodeMap)) { var node = PROJECT.allNodes[i];
var node = PROJECT.nodeMap[? key];
key = ds_map_find_next(PROJECT.nodeMap, key);
if(!node.active) continue; if(!node.active) continue;
if(instanceof(node) != "Node_Export") continue; if(instanceof(node) != "Node_Export") continue;

View file

@ -25,14 +25,14 @@ function Panel_Nodes() : PanelContent() constructor {
sc_nodes.resize(w - ui(padding + padding), h - ui(padding + title_height + 40)); sc_nodes.resize(w - ui(padding + padding), h - ui(padding + title_height + 40));
} }
function drawNodeList(_list, _x0, _x1, _y, _m) { function drawNodeList(_arr, _x0, _x1, _y, _m) {
var ww = sc_nodes.surface_w; var ww = sc_nodes.surface_w;
var hg = ui(28); var hg = ui(28);
var _h = 0; var _h = 0;
for( var i = 0; i < ds_list_size(_list); i++ ) { for( var i = 0; i < array_length(_arr); i++ ) {
var node = _list[| i]; var node = _arr[i];
var name = node.renamed? node.display_name : node.name; var name = node.renamed? node.display_name : node.name;
if(string_lower(search_string) != "" && string_lower(string_pos(search_string, name)) == 0) if(string_lower(search_string) != "" && string_lower(string_pos(search_string, name)) == 0)

View file

@ -16,14 +16,10 @@ function Panel_Tunnels() : PanelContent() constructor {
tunnel_hover = noone; tunnel_hover = noone;
function scanNodes() { function scanNodes() {
var amo = ds_map_size(PROJECT.nodeMap);
var k = ds_map_find_first(PROJECT.nodeMap);
tunnel_ins = []; tunnel_ins = [];
repeat(amo) { for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) {
var node = PROJECT.nodeMap[? k]; var node = PROJECT.allNodes[i];
k = ds_map_find_next(PROJECT.nodeMap, k);
if(instanceof(node) == "Node_Tunnel_In") if(instanceof(node) == "Node_Tunnel_In")
array_push(tunnel_ins, node); array_push(tunnel_ins, node);

View file

@ -17,11 +17,11 @@
readonly = false; /// @is {bool} readonly = false; /// @is {bool}
safeMode = false; safeMode = false;
nodes = ds_list_create(); allNodes = [];
nodeArray = []; nodes = [];
nodeTopo = [];
nodeMap = ds_map_create(); nodeMap = ds_map_create();
nodeNameMap = ds_map_create(); nodeNameMap = ds_map_create();
nodeTopo = ds_list_create();
animator = new AnimationManager(); animator = new AnimationManager();
globalNode = new Node_Global(); globalNode = new Node_Global();
@ -132,14 +132,11 @@
notes = []; notes = [];
static cleanup = function() { #region static cleanup = function() { #region
if(!ds_map_empty(nodeMap)) array_foreach(allNodes, function(_node) {
array_map(ds_map_keys_to_array(nodeMap), function(_key, _ind) {
var _node = nodeMap[? _key];
_node.active = false; _node.active = false;
_node.cleanUp(); _node.cleanUp();
}); });
ds_list_destroy(nodes);
ds_map_destroy(nodeMap); ds_map_destroy(nodeMap);
ds_map_destroy(nodeNameMap); ds_map_destroy(nodeNameMap);

View file

@ -18,42 +18,37 @@ enum RENDER_TYPE {
function ResetAllNodesRender() { #region function ResetAllNodesRender() { #region
LOG_IF(global.FLAG.render == 1, $"XXXXXXXXXXXXXXXXXXXX RESETTING ALL NODES [frame {CURRENT_FRAME}] XXXXXXXXXXXXXXXXXXXX"); LOG_IF(global.FLAG.render == 1, $"XXXXXXXXXXXXXXXXXXXX RESETTING ALL NODES [frame {CURRENT_FRAME}] XXXXXXXXXXXXXXXXXXXX");
var _key = ds_map_find_first(PROJECT.nodeMap); array_foreach(PROJECT.allNodes, function(_node) {
var amo = ds_map_size(PROJECT.nodeMap);
repeat(amo) {
var _node = PROJECT.nodeMap[? _key];
_node.setRenderStatus(false); _node.setRenderStatus(false);
for( var i = 0, n = ds_list_size(_node.inputs); i < n; i++ ) for( var i = 0, n = ds_list_size(_node.inputs); i < n; i++ )
_node.inputs[| i].resetCache(); _node.inputs[| i].resetCache();
return 0;
});
_key = ds_map_find_next(PROJECT.nodeMap, _key);
}
} #endregion } #endregion
function NodeTopoSort() { #region function NodeTopoSort() { #region
LOG_IF(global.FLAG.render == 1, $"======================= RESET TOPO =======================") LOG_IF(global.FLAG.render == 1, $"======================= RESET TOPO =======================")
var _key = ds_map_find_first(PROJECT.nodeMap); var amo = array_length(PROJECT.allNodes);
var amo = ds_map_size(PROJECT.nodeMap);
var _t = get_timer(); var _t = get_timer();
repeat(amo) { array_foreach(PROJECT.allNodes, function(_node) {
var _node = PROJECT.nodeMap[? _key];
_node.clearTopoSorted(); _node.clearTopoSorted();
_key = ds_map_find_next(PROJECT.nodeMap, _key); return 0;
} });
ds_list_clear(PROJECT.nodeTopo); PROJECT.nodeTopo = [];
__topoSort(PROJECT.nodeTopo, PROJECT.nodes); __topoSort(PROJECT.nodeTopo, PROJECT.nodes);
LOG_IF(global.FLAG.render == 1, $"+++++++ Topo Sort Completed: {ds_list_size(PROJECT.nodeTopo)}/{amo} nodes sorted in {(get_timer() - _t) / 1000} ms +++++++"); LOG_IF(global.FLAG.render == 1, $"+++++++ Topo Sort Completed: {array_length(PROJECT.nodeTopo)}/{amo} nodes sorted in {(get_timer() - _t) / 1000} ms +++++++");
} #endregion } #endregion
function NodeListSort(_list, _nodeList) { #region function NodeListSort(_list, _nodeList) { #region
for( var i = 0, n = ds_list_size(_nodeList); i < n; i++ ) array_foreach(_nodeList, function(node) {
_nodeList[| i].clearTopoSorted(); node.clearTopoSorted();
return 0;
});
// print($"===================== NODE LIST SORT =====================") // print($"===================== NODE LIST SORT =====================")
@ -61,7 +56,7 @@ function NodeListSort(_list, _nodeList) { #region
__topoSort(_list, _nodeList); __topoSort(_list, _nodeList);
} #endregion } #endregion
function __sortNode(_list, _node) { #region function __sortNode(_arr, _node) { #region
if(_node.topoSorted) return; if(_node.topoSorted) return;
var _parents = []; var _parents = [];
@ -77,27 +72,27 @@ function __sortNode(_list, _node) { #region
// print($" > Checking {_node.name}: {array_length(_parents)}"); // print($" > Checking {_node.name}: {array_length(_parents)}");
if(is_instanceof(_node, Node_Collection) && !_node.managedRenderOrder) if(is_instanceof(_node, Node_Collection) && !_node.managedRenderOrder)
__topoSort(_list, _node.nodes); __topoSort(_arr, _node.nodes);
for( var i = 0, n = array_length(_parents); i < n; i++ ) for( var i = 0, n = array_length(_parents); i < n; i++ )
__sortNode(_list, _parents[i]); __sortNode(_arr, _parents[i]);
if(!_node.topoSorted) { if(!_node.topoSorted) {
ds_list_add(_list, _node); array_push(_arr, _node);
_node.topoSorted = true; _node.topoSorted = true;
// print($" > Adding > {_node.name}"); // print($" > Adding > {_node.name}");
} }
} #endregion } #endregion
function __topoSort(_list, _nodeList) { #region function __topoSort(_arr, _nodeArr) { #region
var _root = []; var _root = [];
var _leftOver = []; var _leftOver = [];
var _global = _nodeList == PROJECT.nodes; var _global = _nodeArr == PROJECT.nodes;
__temp_nodeList = _nodeList; __temp_nodeList = _nodeArr;
for( var i = 0, n = ds_list_size(_nodeList); i < n; i++ ) { for( var i = 0, n = array_length(_nodeArr); i < n; i++ ) {
var _node = _nodeList[| i]; var _node = _nodeArr[i];
var _isRoot = true; var _isRoot = true;
if(is_instanceof(_node, Node_Collection_Inline) && !_node.is_root) { if(is_instanceof(_node, Node_Collection_Inline) && !_node.is_root) {
@ -113,7 +108,7 @@ function __topoSort(_list, _nodeList) { #region
var _to = _node.outputs[| j].getJunctionTo(); var _to = _node.outputs[| j].getJunctionTo();
if(_global) _isRoot &= array_empty(_to); if(_global) _isRoot &= array_empty(_to);
else _isRoot &= !array_any(_to, function(_val) { return ds_list_exist(__temp_nodeList, _val.node); } ); else _isRoot &= !array_any(_to, function(_val) { return array_exists(__temp_nodeList, _val.node); } );
if(!_isRoot) break; if(!_isRoot) break;
} }
@ -125,23 +120,23 @@ function __topoSort(_list, _nodeList) { #region
// print($"Root: {_root}"); // print($"Root: {_root}");
for( var i = 0, n = array_length(_root); i < n; i++ ) for( var i = 0, n = array_length(_root); i < n; i++ )
__sortNode(_list, _root[i]); __sortNode(_arr, _root[i]);
for( var i = 0, n = array_length(_leftOver); i < n; i++ ) { for( var i = 0, n = array_length(_leftOver); i < n; i++ ) {
if(!_leftOver[i].topoSorted) if(!_leftOver[i].topoSorted)
ds_list_insert(_list, 0, _leftOver[i]); array_insert(_arr, 0, _leftOver[i]);
} }
} #endregion } #endregion
function __nodeLeafList(_list) { #region function __nodeLeafList(_arr) { #region
var nodes = []; var nodes = [];
var nodeNames = []; var nodeNames = [];
for( var i = 0, n = ds_list_size(_list); i < n; i++ ) { for( var i = 0, n = array_length(_arr); i < n; i++ ) {
var _node = _list[| i]; var _node = _arr[i];
if(!_node.active) { LOG_LINE_IF(global.FLAG.render == 1, $"Reject {_node.internalName} [inactive]"); continue; } if(!_node.active) { LOG_LINE_IF(global.FLAG.render == 1, $"Reject {_node.internalName} [inactive]"); continue; }
if(!_node.isLeafList(_list)) { LOG_LINE_IF(global.FLAG.render == 1, $"Reject {_node.internalName} [not leaf]"); continue; } if(!_node.isLeafList(_arr)) { LOG_LINE_IF(global.FLAG.render == 1, $"Reject {_node.internalName} [not leaf]"); continue; }
if(!_node.isRenderable()) { LOG_LINE_IF(global.FLAG.render == 1, $"Reject {_node.internalName} [not renderable]"); continue; } if(!_node.isRenderable()) { LOG_LINE_IF(global.FLAG.render == 1, $"Reject {_node.internalName} [not renderable]"); continue; }
array_push(nodes, _node); array_push(nodes, _node);
@ -188,27 +183,24 @@ function Render(partial = false, runAction = false) { #region
var reset_all = !partial; var reset_all = !partial;
if(reset_all) { if(reset_all) {
LOG_IF(global.FLAG.render == 1, $"xxxxxxxxxx Resetting {ds_list_size(PROJECT.nodeTopo)} nodes xxxxxxxxxx"); LOG_IF(global.FLAG.render == 1, $"xxxxxxxxxx Resetting {array_length(PROJECT.nodeTopo)} nodes xxxxxxxxxx");
var _key = ds_map_find_first(PROJECT.nodeMap);
var amo = ds_map_size(PROJECT.nodeMap);
repeat(amo) { for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) {
var _node = PROJECT.nodeMap[? _key]; var _node = PROJECT.allNodes[i];
_node.setRenderStatus(false); _node.setRenderStatus(false);
_key = ds_map_find_next(PROJECT.nodeMap, _key);
} }
} }
// get leaf node // get leaf node
LOG_IF(global.FLAG.render == 1, $"----- Finding leaf from {ds_list_size(PROJECT.nodeTopo)} nodes -----"); LOG_IF(global.FLAG.render == 1, $"----- Finding leaf from {array_length(PROJECT.nodeTopo)} nodes -----");
RENDER_QUEUE.clear(); RENDER_QUEUE.clear();
for( var i = 0, n = ds_list_size(PROJECT.nodeTopo); i < n; i++ ) { for( var i = 0, n = array_length(PROJECT.nodeTopo); i < n; i++ ) {
var _node = PROJECT.nodeTopo[| i]; var _node = PROJECT.nodeTopo[i];
_node.passiveDynamic = false; _node.passiveDynamic = false;
} }
for( var i = 0, n = ds_list_size(PROJECT.nodeTopo); i < n; i++ ) { for( var i = 0, n = array_length(PROJECT.nodeTopo); i < n; i++ ) {
var _node = PROJECT.nodeTopo[| i]; var _node = PROJECT.nodeTopo[i];
_node.render_time = 0; _node.render_time = 0;
if(!__nodeIsRenderLeaf(_node)) if(!__nodeIsRenderLeaf(_node))
@ -269,18 +261,18 @@ function Render(partial = false, runAction = false) { #region
LOG_END(); LOG_END();
} #endregion } #endregion
function __renderListReset(list) { #region function __renderListReset(arr) { #region
for( var i = 0; i < ds_list_size(list); i++ ) { for( var i = 0; i < array_length(arr); i++ ) {
list[| i].setRenderStatus(false); list[i].setRenderStatus(false);
if(struct_has(list[| i], "nodes")) if(struct_has(list[i], "nodes"))
__renderListReset(list[| i].nodes); __renderListReset(list[i].nodes);
} }
} #endregion } #endregion
function RenderList(list) { #region function RenderList(arr) { #region
LOG_BLOCK_START(); LOG_BLOCK_START();
LOG_IF(global.FLAG.render == 1, $"=============== RENDER LIST START [{ds_list_size(list)}] ==============="); LOG_IF(global.FLAG.render == 1, $"=============== RENDER LIST START [{array_length(arr)}] ===============");
var queue = ds_queue_create(); var queue = ds_queue_create();
try { try {
@ -288,16 +280,16 @@ function RenderList(list) { #region
var error = 0; var error = 0;
var t = current_time; var t = current_time;
__renderListReset(list); __renderListReset(arr);
// get leaf node // get leaf node
for( var i = 0, n = ds_list_size(list); i < n; i++ ) { for( var i = 0, n = array_length(arr); i < n; i++ ) {
var _node = list[| i]; var _node = arr[i];
_node.passiveDynamic = false; _node.passiveDynamic = false;
} }
for( var i = 0, n = ds_list_size(list); i < n; i++ ) { for( var i = 0, n = array_length(arr); i < n; i++ ) {
var _node = list[| i]; var _node = arr[i];
if(!__nodeIsRenderLeaf(_node)) if(!__nodeIsRenderLeaf(_node))
continue; continue;

View file

@ -18,16 +18,14 @@ function save_serialize(project = PROJECT, _outMap = false) { #region
_map.version = SAVE_VERSION; _map.version = SAVE_VERSION;
var _node_list = []; var _node_list = [];
var _key = ds_map_find_first(project.nodeMap); var amo = array_length(project.allNodes);
var i = 0;
repeat(ds_map_size(project.nodeMap)) { repeat(amo) {
var _node = project.nodeMap[? _key]; var _node = project.allNodes[i++];
if(_node.active) array_push(_node_list, _node.serialize());
if(_node.active)
array_push(_node_list, _node.serialize());
_key = ds_map_find_next(project.nodeMap, _key);
} }
_map.nodes = _node_list; _map.nodes = _node_list;
var _anim_map = {}; var _anim_map = {};
@ -156,12 +154,15 @@ function SAVE_COLLECTIONS(_list, _path, save_surface = true, metadata = noone, c
var _nodes = []; var _nodes = [];
var cx = 0; var cx = 0;
var cy = 0; var cy = 0;
for(var i = 0; i < ds_list_size(_list); i++) { var amo = array_length(_list);
cx += _list[| i].x;
cy += _list[| i].y; for(var i = 0; i < amo; i++) {
cx += _list[i].x;
cy += _list[i].y;
} }
cx = round((cx / ds_list_size(_list)) / 32) * 32;
cy = round((cy / ds_list_size(_list)) / 32) * 32; cx = round((cx / amo) / 32) * 32;
cy = round((cy / amo) / 32) * 32;
if(save_surface) { if(save_surface) {
var preview_surface = PANEL_PREVIEW.getNodePreviewSurface(); var preview_surface = PANEL_PREVIEW.getNodePreviewSurface();
@ -171,8 +172,8 @@ function SAVE_COLLECTIONS(_list, _path, save_surface = true, metadata = noone, c
} }
} }
for(var i = 0; i < ds_list_size(_list); i++) for(var i = 0; i < amo; i++)
SAVE_NODE(_nodes, _list[| i], cx, cy, true, context); SAVE_NODE(_nodes, _list[i], cx, cy, true, context);
_content.nodes = _nodes; _content.nodes = _nodes;
json_save_struct(_path, _content, !PREFERENCES.save_file_minify); json_save_struct(_path, _content, !PREFERENCES.save_file_minify);
@ -230,8 +231,8 @@ function SAVE_COLLECTION(_node, _path, save_surface = true, metadata = noone, co
function SAVE_NODE(_arr, _node, dx = 0, dy = 0, scale = false, context = PANEL_GRAPH.getCurrentContext()) { #region function SAVE_NODE(_arr, _node, dx = 0, dy = 0, scale = false, context = PANEL_GRAPH.getCurrentContext()) { #region
if(struct_has(_node, "nodes")) { if(struct_has(_node, "nodes")) {
for(var i = 0; i < ds_list_size(_node.nodes); i++) for(var i = 0; i < array_length(_node.nodes); i++)
SAVE_NODE(_arr, _node.nodes[| i], dx, dy, scale, context); SAVE_NODE(_arr, _node.nodes[i], dx, dy, scale, context);
} }
var m = _node.serialize(scale); var m = _node.serialize(scale);

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,90 @@
{
"$GMSprite":"",
"%Name":"s_node_svg",
"bboxMode":0,
"bbox_bottom":63,
"bbox_left":0,
"bbox_right":63,
"bbox_top":0,
"collisionKind":1,
"collisionTolerance":0,
"DynamicTexturePage":false,
"edgeFiltering":false,
"For3D":false,
"frames":[
{"$GMSpriteFrame":"","%Name":"2d1796d8-b49c-4323-88ed-3801bd585e7a","name":"2d1796d8-b49c-4323-88ed-3801bd585e7a","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
],
"gridX":0,
"gridY":0,
"height":64,
"HTile":false,
"layers":[
{"$GMImageLayer":"","%Name":"40d37a1c-23eb-4c00-887e-7c10c5dd5ad1","blendMode":0,"displayName":"default","isLocked":false,"name":"40d37a1c-23eb-4c00-887e-7c10c5dd5ad1","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
],
"name":"s_node_svg",
"nineSlice":null,
"origin":4,
"parent":{
"name":"IO",
"path":"folders/nodes/icons/IO.yy",
},
"preMultiplyAlpha":false,
"resourceType":"GMSprite",
"resourceVersion":"2.0",
"sequence":{
"$GMSequence":"",
"%Name":"s_node_svg",
"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_node_svg",
"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":"2d1796d8-b49c-4323-88ed-3801bd585e7a","path":"sprites/s_node_svg/s_node_svg.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"4d3405fa-fc9b-4b08-aff2-f96d73d2c2ef","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":32,
"yorigin":32,
},
"swatchColours":null,
"swfPrecision":0.5,
"textureGroupId":{
"name":"Default",
"path":"texturegroups/Default",
},
"type":0,
"VTile":false,
"width":64,
}