mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-01-23 19:38:05 +01:00
pure function stuff
This commit is contained in:
parent
e0533c8fe5
commit
88511088da
41 changed files with 619 additions and 297 deletions
|
@ -1339,6 +1339,7 @@
|
||||||
{"name":"timeline_data","order":18,"path":"scripts/timeline_data/timeline_data.yy",},
|
{"name":"timeline_data","order":18,"path":"scripts/timeline_data/timeline_data.yy",},
|
||||||
{"name":"toggleGroup","order":7,"path":"scripts/toggleGroup/toggleGroup.yy",},
|
{"name":"toggleGroup","order":7,"path":"scripts/toggleGroup/toggleGroup.yy",},
|
||||||
{"name":"tooltip_hotkey","order":2,"path":"scripts/tooltip_hotkey/tooltip_hotkey.yy",},
|
{"name":"tooltip_hotkey","order":2,"path":"scripts/tooltip_hotkey/tooltip_hotkey.yy",},
|
||||||
|
{"name":"tooltip_recent_files","order":3,"path":"scripts/tooltip_recent_files/tooltip_recent_files.yy",},
|
||||||
{"name":"tooltip_selector_object","order":1,"path":"scripts/tooltip_selector_object/tooltip_selector_object.yy",},
|
{"name":"tooltip_selector_object","order":1,"path":"scripts/tooltip_selector_object/tooltip_selector_object.yy",},
|
||||||
{"name":"transformBox","order":15,"path":"scripts/transformBox/transformBox.yy",},
|
{"name":"transformBox","order":15,"path":"scripts/transformBox/transformBox.yy",},
|
||||||
{"name":"tunnel_server","order":2,"path":"scripts/tunnel_server/tunnel_server.yy",},
|
{"name":"tunnel_server","order":2,"path":"scripts/tunnel_server/tunnel_server.yy",},
|
||||||
|
|
|
@ -1971,6 +1971,7 @@
|
||||||
{"id":{"name":"timer_function","path":"scripts/timer_function/timer_function.yy",},},
|
{"id":{"name":"timer_function","path":"scripts/timer_function/timer_function.yy",},},
|
||||||
{"id":{"name":"toggleGroup","path":"scripts/toggleGroup/toggleGroup.yy",},},
|
{"id":{"name":"toggleGroup","path":"scripts/toggleGroup/toggleGroup.yy",},},
|
||||||
{"id":{"name":"tooltip_hotkey","path":"scripts/tooltip_hotkey/tooltip_hotkey.yy",},},
|
{"id":{"name":"tooltip_hotkey","path":"scripts/tooltip_hotkey/tooltip_hotkey.yy",},},
|
||||||
|
{"id":{"name":"tooltip_recent_files","path":"scripts/tooltip_recent_files/tooltip_recent_files.yy",},},
|
||||||
{"id":{"name":"tooltip_selector_object","path":"scripts/tooltip_selector_object/tooltip_selector_object.yy",},},
|
{"id":{"name":"tooltip_selector_object","path":"scripts/tooltip_selector_object/tooltip_selector_object.yy",},},
|
||||||
{"id":{"name":"transformBox","path":"scripts/transformBox/transformBox.yy",},},
|
{"id":{"name":"transformBox","path":"scripts/transformBox/transformBox.yy",},},
|
||||||
{"id":{"name":"tunnel_server","path":"scripts/tunnel_server/tunnel_server.yy",},},
|
{"id":{"name":"tunnel_server","path":"scripts/tunnel_server/tunnel_server.yy",},},
|
||||||
|
|
|
@ -67,9 +67,9 @@ event_inherited();
|
||||||
|
|
||||||
if(sHOVER && sp_recent.hover && point_in_rectangle(_m[0], _m[1], fx, _y, fx + ww, _y + hg)) {
|
if(sHOVER && sp_recent.hover && point_in_rectangle(_m[0], _m[1], fx, _y, fx + ww, _y + hg)) {
|
||||||
sp_recent.hover_content = true;
|
sp_recent.hover_content = true;
|
||||||
TOOLTIP = [ _dat.getThumbnail(), VALUE_TYPE.surface ];
|
TOOLTIP = new tooltipRecentFile(_rec, sp_recent.rx + fx, sp_recent.ry + _y, ww, hg);
|
||||||
|
|
||||||
draw_sprite_stretched_ext(THEME.node_bg, 1, fx, _y, ww, hg, COLORS._main_accent, 1);
|
draw_sprite_stretched_ext(THEME.ui_panel, 1, fx, _y, ww, hg, COLORS._main_accent, 1);
|
||||||
|
|
||||||
if(mouse_press(mb_left, sFOCUS)) {
|
if(mouse_press(mb_left, sFOCUS)) {
|
||||||
LOAD_PATH(_rec);
|
LOAD_PATH(_rec);
|
||||||
|
|
|
@ -44,6 +44,8 @@ if !ready exit;
|
||||||
draw_text(x0, y0 - ui(4), __txt("Recent files"));
|
draw_text(x0, y0 - ui(4), __txt("Recent files"));
|
||||||
|
|
||||||
sp_recent.setFocusHover(sFOCUS, sHOVER);
|
sp_recent.setFocusHover(sFOCUS, sHOVER);
|
||||||
|
sp_recent.rx = x0 + ui(6);
|
||||||
|
sp_recent.ry = y0;
|
||||||
sp_recent.draw(x0 + ui(6), y0);
|
sp_recent.draw(x0 + ui(6), y0);
|
||||||
draw_sprite_stretched_ext(THEME.ui_panel, 1, x0, y0, x1 - x0, y1 - y0, COLORS.panel_frame);
|
draw_sprite_stretched_ext(THEME.ui_panel, 1, x0, y0, x1 - x0, y1 - y0, COLORS.panel_frame);
|
||||||
|
|
||||||
|
@ -55,11 +57,11 @@ if !ready exit;
|
||||||
RECENT_SAVE();
|
RECENT_SAVE();
|
||||||
}
|
}
|
||||||
|
|
||||||
bx -= ui(28 + 4);
|
// bx -= ui(28 + 4);
|
||||||
txt = recent_thumbnail? __txtx("splash_hide_thumbnail", "Hide thumbnail") : __txtx("splash_show_thumbnail", "Show thumbnail");
|
// txt = recent_thumbnail? __txtx("splash_hide_thumbnail", "Hide thumbnail") : __txtx("splash_show_thumbnail", "Show thumbnail");
|
||||||
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, txt, THEME.splash_thumbnail, recent_thumbnail) == 2) {
|
// if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, txt, THEME.splash_thumbnail, recent_thumbnail) == 2) {
|
||||||
recent_thumbnail = !recent_thumbnail;
|
// recent_thumbnail = !recent_thumbnail;
|
||||||
}
|
// }
|
||||||
|
|
||||||
bx -= ui(28 + 4);
|
bx -= ui(28 + 4);
|
||||||
txt = __txtx("splash_open_autosave", "Open autosave folder");
|
txt = __txtx("splash_open_autosave", "Open autosave folder");
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Set up
|
#region Set up
|
||||||
var t = current_time;
|
var t = get_timer();
|
||||||
|
|
||||||
PREF_LOAD(); log_message("SESSION", $"> init Preferences | complete in {get_timer() - t}"); t = get_timer();
|
PREF_LOAD(); log_message("SESSION", $"> init Preferences | complete in {get_timer() - t}"); t = get_timer();
|
||||||
if(!IS_CMD) { __initLocale(); log_message("SESSION", $"> init Locale | complete in {get_timer() - t}"); t = get_timer(); }
|
if(!IS_CMD) { __initLocale(); log_message("SESSION", $"> init Locale | complete in {get_timer() - t}"); t = get_timer(); }
|
||||||
|
|
|
@ -26,7 +26,7 @@ function Node_VFX_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _group
|
||||||
preview_node = output;
|
preview_node = output;
|
||||||
}
|
}
|
||||||
|
|
||||||
static getNextNodes = function() { return allCached? getNextNodesExternal() : getNextNodesInternal(); }
|
static getNextNodes = function(checkLoop = false) { return allCached? getNextNodesExternal() : getNextNodesInternal(); }
|
||||||
|
|
||||||
setTrigger(2, "Clear cache", [ THEME.cache, 0, COLORS._main_icon ]);
|
setTrigger(2, "Clear cache", [ THEME.cache, 0, COLORS._main_icon ]);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
|
||||||
static onRemoveNode = function(node) { node.in_VFX = noone; }
|
static onRemoveNode = function(node) { node.in_VFX = noone; }
|
||||||
static onAddNode = function(node) { node.in_VFX = self; }
|
static onAddNode = function(node) { node.in_VFX = self; }
|
||||||
|
|
||||||
static getNextNodes = function() { return __nodeLeafList(nodes); }
|
static getNextNodes = function(checkLoop = false) { return __nodeLeafList(nodes); }
|
||||||
|
|
||||||
static reset = function() {
|
static reset = function() {
|
||||||
for( var i = 0, n = array_length(nodes); i < n; i++ ) {
|
for( var i = 0, n = array_length(nodes); i < n; i++ ) {
|
||||||
|
|
|
@ -173,12 +173,16 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
nodes = [];
|
nodes = [];
|
||||||
node_length = 0;
|
node_length = 0;
|
||||||
modifiable = true;
|
modifiable = true;
|
||||||
|
setDimension(w, 0);
|
||||||
|
|
||||||
ungroupable = true;
|
ungroupable = true;
|
||||||
auto_render_time = false;
|
auto_render_time = false;
|
||||||
combine_render_time = true;
|
combine_render_time = true;
|
||||||
previewable = true;
|
previewable = true;
|
||||||
|
|
||||||
|
isPure = false;
|
||||||
|
nodeTopo = [];
|
||||||
|
|
||||||
reset_all_child = false;
|
reset_all_child = false;
|
||||||
isInstancer = false;
|
isInstancer = false;
|
||||||
instanceBase = noone;
|
instanceBase = noone;
|
||||||
|
@ -193,7 +197,6 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
group_output_display_list = [];
|
group_output_display_list = [];
|
||||||
attributes.input_display_list = [];
|
attributes.input_display_list = [];
|
||||||
attributes.output_display_list = [];
|
attributes.output_display_list = [];
|
||||||
attributes.lock_input = false;
|
|
||||||
|
|
||||||
managedRenderOrder = false;
|
managedRenderOrder = false;
|
||||||
|
|
||||||
|
@ -226,11 +229,15 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
attribute_interpolation();
|
attribute_interpolation();
|
||||||
attribute_oversample();
|
attribute_oversample();
|
||||||
|
|
||||||
|
attributes.lock_input = false;
|
||||||
|
attributes.pure_function = true;
|
||||||
|
|
||||||
tool_node = noone;
|
tool_node = noone;
|
||||||
draw_input_overlay = true;
|
draw_input_overlay = true;
|
||||||
|
|
||||||
array_push(attributeEditors, "Group IO");
|
array_push(attributeEditors, "Group");
|
||||||
array_push(attributeEditors, ["Lock Input", function() /*=>*/ {return attributes.lock_input}, new checkBox(function() /*=>*/ { attributes.lock_input = !attributes.lock_input }) ]);
|
array_push(attributeEditors, ["Pure Function", function() /*=>*/ {return attributes.pure_function}, new checkBox(function() /*=>*/ { attributes.pure_function = !attributes.pure_function }) ]);
|
||||||
|
array_push(attributeEditors, ["Lock Input", function() /*=>*/ {return attributes.lock_input}, new checkBox(function() /*=>*/ { attributes.lock_input = !attributes.lock_input }) ]);
|
||||||
array_push(attributeEditors, ["Edit Input Display", function() /*=>*/ {return 0}, button(function() /*=>*/ { dialogCall(o_dialog_group_input_order).setNode(self, CONNECT_TYPE.input); }) ]);
|
array_push(attributeEditors, ["Edit Input Display", function() /*=>*/ {return 0}, button(function() /*=>*/ { dialogCall(o_dialog_group_input_order).setNode(self, CONNECT_TYPE.input); }) ]);
|
||||||
array_push(attributeEditors, ["Edit Output Display", function() /*=>*/ {return 0}, button(function() /*=>*/ { dialogCall(o_dialog_group_input_order).setNode(self, CONNECT_TYPE.output); }) ]);
|
array_push(attributeEditors, ["Edit Output Display", function() /*=>*/ {return 0}, button(function() /*=>*/ { dialogCall(o_dialog_group_input_order).setNode(self, CONNECT_TYPE.output); }) ]);
|
||||||
|
|
||||||
|
@ -259,15 +266,28 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
hasInsp2 = false;
|
hasInsp2 = false;
|
||||||
|
|
||||||
node_length = array_length(nodes);
|
node_length = array_length(nodes);
|
||||||
|
checkPureFunction();
|
||||||
|
}
|
||||||
|
|
||||||
|
static checkPureFunction = function(updateTopo = true) {
|
||||||
|
var p = attributes.pure_function;
|
||||||
|
|
||||||
var i = 0;
|
for( var i = 0, n = array_length(nodes); i < n; i++ ) {
|
||||||
repeat(node_length) {
|
var _node = nodes[i];
|
||||||
hasInsp1 |= nodes[i].hasInspector1Update();
|
hasInsp1 |= _node.hasInspector1Update();
|
||||||
hasInsp2 |= nodes[i].hasInspector2Update();
|
hasInsp2 |= _node.hasInspector2Update();
|
||||||
|
|
||||||
i++;
|
p &= !is(_node, Node_Collection_Inline);
|
||||||
|
p &= !is(_node, Node_Collection);
|
||||||
|
p &= !_node.isAnimated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
icon_blend = p? COLORS._main_value_positive : c_white;
|
||||||
|
|
||||||
|
if(updateTopo || !isPure && p) nodeTopo = NodeListSort(nodes);
|
||||||
|
isPure = p;
|
||||||
|
|
||||||
|
if(group) group.checkPureFunction(updateTopo);
|
||||||
}
|
}
|
||||||
|
|
||||||
static getNodeBase = function() { return instanceBase == noone? self : instanceBase.getNodeBase(); }
|
static getNodeBase = function() { return instanceBase == noone? self : instanceBase.getNodeBase(); }
|
||||||
|
@ -398,7 +418,18 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
|
|
||||||
/////========== RENDERING ===========
|
/////========== RENDERING ===========
|
||||||
|
|
||||||
static getNextNodes = function() { return getNextNodesInternal(); }
|
doUpdate = doUpdateLite;
|
||||||
|
|
||||||
|
static update = function() {
|
||||||
|
if(!isPure) return;
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(nodeTopo); i < n; i++ ) {
|
||||||
|
var _node = nodeTopo[i];
|
||||||
|
_node.doUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static getNextNodes = function(checkLoop = false) { return isPure? getNextNodesExternal() : getNextNodesInternal(); }
|
||||||
|
|
||||||
static getNextNodesInternal = function() { //get node inside the group
|
static getNextNodesInternal = function() { //get node inside the group
|
||||||
LOG_BLOCK_START();
|
LOG_BLOCK_START();
|
||||||
|
|
|
@ -43,18 +43,19 @@ function Node_Condition(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
||||||
newOutput(0, nodeValue_Output("Result", self, VALUE_TYPE.any, []));
|
newOutput(0, nodeValue_Output("Result", self, VALUE_TYPE.any, []));
|
||||||
newOutput(1, nodeValue_Output("Bool", self, VALUE_TYPE.boolean, false));
|
newOutput(1, nodeValue_Output("Bool", self, VALUE_TYPE.boolean, false));
|
||||||
|
|
||||||
|
doUpdate = doUpdateLite;
|
||||||
static update = function(frame = CURRENT_FRAME) {
|
static update = function(frame = CURRENT_FRAME) {
|
||||||
var _true = getInputData(3);
|
var _true = inputs[3].getValue();
|
||||||
var _fals = getInputData(4);
|
var _fals = inputs[4].getValue();
|
||||||
|
|
||||||
var _mode = getInputData(5);
|
var _mode = inputs[5].getValue();
|
||||||
|
|
||||||
var _chck = getInputData(0);
|
var _chck = inputs[0].getValue();
|
||||||
var _cond = getInputData(1);
|
var _cond = inputs[1].getValue();
|
||||||
var _valu = getInputData(2);
|
var _valu = inputs[2].getValue();
|
||||||
var _bool = getInputData(6);
|
var _bool = inputs[6].getValue();
|
||||||
var _txt1 = getInputData(7);
|
var _txt1 = inputs[7].getValue();
|
||||||
var _txt2 = getInputData(8);
|
var _txt2 = inputs[8].getValue();
|
||||||
|
|
||||||
inputs[0].setVisible(_mode == 1, _mode == 1);
|
inputs[0].setVisible(_mode == 1, _mode == 1);
|
||||||
inputs[1].setVisible(_mode == 1);
|
inputs[1].setVisible(_mode == 1);
|
||||||
|
|
|
@ -81,6 +81,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
color = c_white;
|
color = c_white;
|
||||||
icon = noone;
|
icon = noone;
|
||||||
icon_24 = noone;
|
icon_24 = noone;
|
||||||
|
icon_blend = c_white;
|
||||||
bg_spr = THEME.node_bg;
|
bg_spr = THEME.node_bg;
|
||||||
bg_spr_add = 0.1;
|
bg_spr_add = 0.1;
|
||||||
bg_spr_add_clr = c_white;
|
bg_spr_add_clr = c_white;
|
||||||
|
@ -272,6 +273,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
#region ---- rendering ----
|
#region ---- rendering ----
|
||||||
rendered = false;
|
rendered = false;
|
||||||
update_on_frame = false;
|
update_on_frame = false;
|
||||||
|
render_timer = 0;
|
||||||
render_time = 0;
|
render_time = 0;
|
||||||
render_cached = false;
|
render_cached = false;
|
||||||
auto_render_time = true;
|
auto_render_time = true;
|
||||||
|
@ -326,8 +328,6 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
messages_bub = false;
|
messages_bub = false;
|
||||||
messages_dbg = [];
|
messages_dbg = [];
|
||||||
|
|
||||||
render_report_latest = noone;
|
|
||||||
|
|
||||||
static logNode = function(text, noti = 0) {
|
static logNode = function(text, noti = 0) {
|
||||||
var _time = $"{string_lead_zero(current_hour, 2)}:{string_lead_zero(current_minute, 2)}.{string_lead_zero(current_second, 2)}";
|
var _time = $"{string_lead_zero(current_hour, 2)}:{string_lead_zero(current_minute, 2)}.{string_lead_zero(current_second, 2)}";
|
||||||
messages_bub = true;
|
messages_bub = true;
|
||||||
|
@ -961,7 +961,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
targ.setFrom(junctionFrom);
|
targ.setFrom(junctionFrom);
|
||||||
}
|
}
|
||||||
|
|
||||||
static getInputData = function(index, def = 0) { return array_safe_get_fast(inputs_data, index, def); }
|
static getInputData = function(index, def = 0) { array_safe_get_fast(inputs_data, index, def); }
|
||||||
static getInputDataForce = function(index, def = 0) { return inputs[index].getValue(); }
|
static getInputDataForce = function(index, def = 0) { return inputs[index].getValue(); }
|
||||||
|
|
||||||
// static setInputData = function(index, value) {
|
// static setInputData = function(index, value) {
|
||||||
|
@ -981,7 +981,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
var val = _inp.getValue(__frame);
|
var val = _inp.getValue(__frame);
|
||||||
|
|
||||||
_inp.bypass_junc.setValue(val);
|
if(_inp.bypass_junc.visible) _inp.bypass_junc.setValue(val);
|
||||||
inputs_data[i] = val; // setInputData(i, val);
|
inputs_data[i] = val; // setInputData(i, val);
|
||||||
input_value_map[$ _inp.internalName] = val;
|
input_value_map[$ _inp.internalName] = val;
|
||||||
});
|
});
|
||||||
|
@ -996,12 +996,28 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
static postUpdate = function(frame = CURRENT_FRAME) {}
|
static postUpdate = function(frame = CURRENT_FRAME) {}
|
||||||
|
|
||||||
static doUpdate = function(frame = CURRENT_FRAME) {
|
static doUpdateLite = function(frame = CURRENT_FRAME) {
|
||||||
|
render_timer = get_timer();
|
||||||
|
setRenderStatus(true);
|
||||||
|
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
|
||||||
|
if(attributes.update_graph) {
|
||||||
|
try { update(frame); }
|
||||||
|
catch(e) { log_warning("RENDER", exception_print(e), self); }
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
|
||||||
|
render_time = get_timer() - render_timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
static doUpdateFull = function(frame = CURRENT_FRAME) {
|
||||||
|
|
||||||
if(PROJECT.safeMode) return;
|
if(PROJECT.safeMode) return;
|
||||||
if(NODE_EXTRACT) return;
|
if(NODE_EXTRACT) return;
|
||||||
|
|
||||||
var render_timer = get_timer();
|
render_timer = get_timer();
|
||||||
var _updateRender = !is_instanceof(self, Node_Collection) || !managedRenderOrder;
|
var _updateRender = !is_instanceof(self, Node_Collection) || !managedRenderOrder;
|
||||||
if(_updateRender) setRenderStatus(true);
|
if(_updateRender) setRenderStatus(true);
|
||||||
|
|
||||||
|
@ -1049,15 +1065,13 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
updatedOutTrigger.setValue(true);
|
updatedOutTrigger.setValue(true);
|
||||||
|
|
||||||
if(!is_instanceof(self, Node_Collection))
|
if(!is(self, Node_Collection)) render_time = get_timer() - render_timer;
|
||||||
render_time = get_timer() - render_timer;
|
|
||||||
|
|
||||||
LOG_BLOCK_END();
|
LOG_BLOCK_END();
|
||||||
|
|
||||||
render_report_latest = generateNodeRenderReport();
|
|
||||||
if(PROFILER_STAT) array_push(PROFILER_DATA, render_report_latest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
doUpdate = doUpdateFull;
|
||||||
|
|
||||||
static valueUpdate = function(index) {
|
static valueUpdate = function(index) {
|
||||||
onValueUpdate(index);
|
onValueUpdate(index);
|
||||||
|
|
||||||
|
@ -1079,6 +1093,11 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
/////============ RENDER ============
|
/////============ RENDER ============
|
||||||
|
|
||||||
|
static isAnimated = function(frame = CURRENT_FRAME) {
|
||||||
|
if(update_on_frame) return true;
|
||||||
|
return array_any(inputs, function(inp) /*=>*/ {return inp.is_anim});
|
||||||
|
}
|
||||||
|
|
||||||
static isActiveDynamic = function(frame = CURRENT_FRAME) {
|
static isActiveDynamic = function(frame = CURRENT_FRAME) {
|
||||||
if(update_on_frame) return true;
|
if(update_on_frame) return true;
|
||||||
if(!rendered) return true;
|
if(!rendered) return true;
|
||||||
|
@ -1086,11 +1105,6 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
force_requeue = false;
|
force_requeue = false;
|
||||||
__temp_frame = frame;
|
__temp_frame = frame;
|
||||||
return array_any(inputs, function(inp) /*=>*/ {return inp.isActiveDynamic(__temp_frame)});
|
return array_any(inputs, function(inp) /*=>*/ {return inp.isActiveDynamic(__temp_frame)});
|
||||||
|
|
||||||
// for(var i = 0; i < array_length(inputs); i++)
|
|
||||||
// if(inputs[i].isActiveDynamic(frame)) return true;
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static triggerRender = function(resetSelf = true) {
|
static triggerRender = function(resetSelf = true) {
|
||||||
|
@ -1238,35 +1252,42 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
static onGetPreviousNodes = function(arr) {}
|
static onGetPreviousNodes = function(arr) {}
|
||||||
|
|
||||||
static getNextNodes = function() {
|
__nextNodes = noone;
|
||||||
var nodes = [];
|
__nextNodesToLoop = noone;
|
||||||
var nodeNames = [];
|
|
||||||
|
static getNextNodes = function(checkLoop = false) {
|
||||||
LOG_BLOCK_START();
|
if(checkLoop) {
|
||||||
LOG_IF(global.FLAG.render == 1, $"→→→→→ Call get next node from: {INAME}");
|
if(__nextNodesToLoop != noone && __nextNodesToLoop.bypassNextNode())
|
||||||
|
__nextNodesToLoop.getNextNodes();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
__nextNodesToLoop = noone;
|
||||||
for(var i = 0; i < array_length(outputs); i++) {
|
for(var i = 0; i < array_length(outputs); i++) {
|
||||||
var _ot = outputs[i];
|
var _ot = outputs[i];
|
||||||
if(!_ot.forward) continue;
|
if(!_ot.forward) continue;
|
||||||
|
|
||||||
for( var j = 0, n = array_length(_ot.value_to_loop); j < n; j++ ) {
|
for( var j = 0, n = array_length(_ot.value_to_loop); j < n; j++ ) {
|
||||||
var _to = _ot.value_to_loop[j];
|
var _to = _ot.value_to_loop[j];
|
||||||
if(!_to.active) continue;
|
if(!_to.active) continue;
|
||||||
if(!_to.bypassNextNode()) continue;
|
|
||||||
|
|
||||||
LOG_BLOCK_END();
|
__nextNodesToLoop = _to;
|
||||||
|
if(!_to.bypassNextNode()) continue;
|
||||||
return _to.getNextNodes();
|
return _to.getNextNodes();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(__nextNodes != noone) return __nextNodes;
|
||||||
|
var nodes = [];
|
||||||
|
|
||||||
|
for(var i = 0; i < array_length(outputs); i++) {
|
||||||
|
var _ot = outputs[i];
|
||||||
|
if(!_ot.forward) continue;
|
||||||
|
|
||||||
var _tos = _ot.getJunctionTo();
|
var _tos = _ot.getJunctionTo();
|
||||||
for( var j = 0; j < array_length(_tos); j++ ) {
|
for( var j = 0; j < array_length(_tos); j++ ) {
|
||||||
var _to = _tos[j];
|
var _to = _tos[j];
|
||||||
|
|
||||||
array_push(nodes, _to.node);
|
array_push(nodes, _to.node);
|
||||||
array_push(nodeNames, _to.node.internalName);
|
|
||||||
|
|
||||||
//LOG_IF(global.FLAG.render == 1, $"→→ Check output: {_ot.name} connect to node {_to.node.internalName}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1277,7 +1298,6 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
for( var j = 0; j < array_length(_tos); j++ ) {
|
for( var j = 0; j < array_length(_tos); j++ ) {
|
||||||
var _to = _tos[j];
|
var _to = _tos[j];
|
||||||
array_push(nodes, _to.node);
|
array_push(nodes, _to.node);
|
||||||
array_push(nodeNames, _to.node.internalName);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1288,13 +1308,11 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
var _tos = _in.bypass_junc.getJunctionTo();
|
var _tos = _in.bypass_junc.getJunctionTo();
|
||||||
for( var j = 0; j < array_length(_tos); j++ ) {
|
for( var j = 0; j < array_length(_tos); j++ ) {
|
||||||
var _to = _tos[j];
|
var _to = _tos[j];
|
||||||
|
|
||||||
array_push(nodes, _to.node);
|
array_push(nodes, _to.node);
|
||||||
array_push(nodeNames, _to.node.internalName);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_BLOCK_END();
|
__nextNodes = nodes;
|
||||||
return nodes;
|
return nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1497,7 +1515,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
__draw_bbox = BBOX();
|
__draw_bbox = BBOX();
|
||||||
static drawGetBbox = function(xx, yy, _s, label = true) {
|
static drawGetBbox = function(xx, yy, _s, label = true) {
|
||||||
var pad_label = (display_parameter.avoid_label || label) && draw_name;
|
var pad_label = ((display_parameter.avoid_label || label) && draw_name) || label == 2;
|
||||||
|
|
||||||
var x0 = xx;
|
var x0 = xx;
|
||||||
var x1 = xx + w * _s;
|
var x1 = xx + w * _s;
|
||||||
|
@ -1557,8 +1575,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
if(icon) {
|
if(icon) {
|
||||||
tx += _s * 6;
|
tx += _s * 6;
|
||||||
draw_sprite_ui_uniform(icon, 0, round(tx) + 1, round(yy + nh / 2) + 1, _s, c_black, 1);
|
draw_sprite_ui_uniform(icon, 0, round(tx) + 1, round(yy + nh / 2) + 1, _s, c_black, 1);
|
||||||
draw_sprite_ui_uniform(icon, 0, round(tx), round(yy + nh / 2), _s, cc, 1);
|
draw_sprite_ui_uniform(icon, 0, round(tx), round(yy + nh / 2), _s, icon_blend, 1);
|
||||||
tx += _s * 12;
|
tx += _s * 12;
|
||||||
tw -= _s * (12 + 6);
|
tw -= _s * (12 + 6);
|
||||||
}
|
}
|
||||||
|
@ -2905,6 +2923,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
} run_in(1, function() /*=>*/ { checkGroup(); });
|
} run_in(1, function() /*=>*/ { checkGroup(); });
|
||||||
|
|
||||||
|
nextn = [];
|
||||||
static generateNodeRenderReport = function() {
|
static generateNodeRenderReport = function() {
|
||||||
var _report = {};
|
var _report = {};
|
||||||
|
|
||||||
|
@ -2930,23 +2949,26 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
_report.logs = array_clone(messages_dbg);
|
_report.logs = array_clone(messages_dbg);
|
||||||
_report.time = render_time;
|
|
||||||
|
|
||||||
_report.nextn = [];
|
_report.nextn = nextn;
|
||||||
_report.queue = array_clone(RENDER_QUEUE.data, 1);
|
_report.queue = array_clone(RENDER_QUEUE.data, 1);
|
||||||
|
|
||||||
|
nextn = [];
|
||||||
|
|
||||||
return _report;
|
return _report;
|
||||||
}
|
}
|
||||||
|
|
||||||
static summarizeReport = function() {
|
static summarizeReport = function(_startTime) {
|
||||||
var _srcstr = $"{getFullName()}";
|
var _srcstr = $"{getFullName()}";
|
||||||
var _report = render_report_latest;
|
var _report = generateNodeRenderReport();
|
||||||
|
|
||||||
for( var i = 0, n = array_length(_report.nextn); i < n; i++ ) _srcstr += $"{_report.nextn[i].getFullName()}";
|
for( var i = 0, n = array_length(_report.nextn); i < n; i++ ) _srcstr += $"{_report.nextn[i].getFullName()}";
|
||||||
for( var i = 0, n = array_length(_report.queue); i < n; i++ ) _srcstr += $"{_report.queue[i].getFullName()}";
|
for( var i = 0, n = array_length(_report.queue); i < n; i++ ) _srcstr += $"{_report.queue[i].getFullName()}";
|
||||||
|
|
||||||
|
_report.time = get_timer() - _startTime;
|
||||||
|
_report.renderTime = render_time;
|
||||||
_report.search_string = _srcstr;
|
_report.search_string = _srcstr;
|
||||||
|
array_push(PROFILER_DATA, _report);
|
||||||
}
|
}
|
||||||
|
|
||||||
static toString = function() { return $"Node [{internalName}] [{instanceof(self)}]: {node_id}"; }
|
static toString = function() { return $"Node [{internalName}] [{instanceof(self)}]: {node_id}"; }
|
||||||
|
|
|
@ -402,9 +402,13 @@ function Node_Display_Text(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
}
|
}
|
||||||
|
|
||||||
static onValueUpdate = function(index = 0) {
|
static onValueUpdate = function(index = 0) {
|
||||||
if(index == 1 || index == 4) line_update(getInputData(1), getInputData(4));
|
if(index == 1 || index == 4) line_update(inputs[1].getValue(), inputs[4].getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static isRenderable = function() /*=>*/ {return false};
|
||||||
|
static doUpdate = function() {}
|
||||||
|
static update = function() {}
|
||||||
|
|
||||||
static preDraw = function(_x, _y, _s) {
|
static preDraw = function(_x, _y, _s) {
|
||||||
var xx = (x - 3) * _s + _x;
|
var xx = (x - 3) * _s + _x;
|
||||||
var yy = y * _s + _y;
|
var yy = y * _s + _y;
|
||||||
|
@ -434,18 +438,18 @@ function Node_Display_Text(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
}
|
}
|
||||||
|
|
||||||
static drawNodeBase = function(xx, yy, mx, my, _s) {
|
static drawNodeBase = function(xx, yy, mx, my, _s) {
|
||||||
if(draw_graph_culled && !init_size) return;
|
if(draw_graph_culled) return;
|
||||||
|
|
||||||
var color = getInputData(0);
|
var color = inputs[0].getValue();
|
||||||
var txt = getInputData(1);
|
var txt = inputs[1].getValue();
|
||||||
if(txt == "") txt = "..."
|
if(txt == "") txt = "..."
|
||||||
draw_simple = string_pos("<", txt) == 0;
|
draw_simple = string_pos("<", txt) == 0;
|
||||||
|
|
||||||
var sty = getInputData(2);
|
var sty = inputs[2].getValue();
|
||||||
var alp = _color_get_alpha(color);
|
var alp = _color_get_alpha(color);
|
||||||
var wid = getInputData(4);
|
var wid = inputs[4].getValue();
|
||||||
var posi = getInputData(5);
|
var posi = inputs[5].getValue();
|
||||||
line_h = getInputData(6);
|
line_h = inputs[6].getValue();
|
||||||
|
|
||||||
pos_x = posi[0];
|
pos_x = posi[0];
|
||||||
pos_y = posi[1];
|
pos_y = posi[1];
|
||||||
|
@ -504,8 +508,6 @@ function Node_Display_Text(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
draw_scale = _s;
|
draw_scale = _s;
|
||||||
w = ww + 8;
|
w = ww + 8;
|
||||||
h = hh + 8;
|
h = hh + 8;
|
||||||
|
|
||||||
init_size = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static drawJunctions = function(_draw, _x, _y, _mx, _my, _s) {
|
static drawJunctions = function(_draw, _x, _y, _mx, _my, _s) {
|
||||||
|
@ -524,10 +526,6 @@ function Node_Display_Text(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
return hover;
|
return hover;
|
||||||
}
|
}
|
||||||
|
|
||||||
static update = function() {
|
|
||||||
init_size = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static drawNode = function(_draw, _x, _y, _mx, _my, _s) {
|
static drawNode = function(_draw, _x, _y, _mx, _my, _s) {
|
||||||
if(!_draw) return drawJunctions(_draw, _x, _y, _mx, _my, _s);
|
if(!_draw) return drawJunctions(_draw, _x, _y, _mx, _my, _s);
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,9 @@ function Node_Feedback(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
|
||||||
output.inputs[1].setFrom(input.outputs[1]);
|
output.inputs[1].setFrom(input.outputs[1]);
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static getNextNodes = function() { #region
|
static getNextNodes = function(checkLoop = false) {
|
||||||
|
if(checkLoop) return;
|
||||||
|
|
||||||
var allReady = true;
|
var allReady = true;
|
||||||
for(var i = custom_input_index; i < array_length(inputs); i++) {
|
for(var i = custom_input_index; i < array_length(inputs); i++) {
|
||||||
var _in = inputs[i].from;
|
var _in = inputs[i].from;
|
||||||
|
@ -27,5 +29,5 @@ function Node_Feedback(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
|
||||||
if(!allReady) return [];
|
if(!allReady) return [];
|
||||||
|
|
||||||
return __nodeLeafList(getNodeList());
|
return __nodeLeafList(getNodeList());
|
||||||
} #endregion
|
}
|
||||||
}
|
}
|
|
@ -54,22 +54,29 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
input_display_list = [ 0, 1, 3, 4 ];
|
input_display_list = [ 0, 1, 3, 4 ];
|
||||||
|
|
||||||
static onValueUpdate = function(index = 3) { global.__FRAME_LABEL_SCALE = getInputData(3); }
|
static onValueUpdate = function(index = 3) {
|
||||||
|
|
||||||
static setHeight = function() {}
|
|
||||||
|
|
||||||
static update = function() {
|
|
||||||
previewable = true;
|
previewable = true;
|
||||||
|
global.__FRAME_LABEL_SCALE = inputs[3].getValue();
|
||||||
|
|
||||||
var sz = getInputData(0);
|
var sz = inputs[0].getValue();
|
||||||
w = sz[0];
|
w = sz[0];
|
||||||
h = sz[1];
|
h = sz[1];
|
||||||
|
|
||||||
color = getInputData(1);
|
color = inputs[1].getValue();
|
||||||
alpha = _color_get_alpha(color);
|
alpha = _color_get_alpha(color);
|
||||||
|
|
||||||
scale = getInputData(3);
|
scale = inputs[3].getValue();
|
||||||
lcolor = getInputData(4);
|
lcolor = inputs[4].getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
static setHeight = function() {}
|
||||||
|
|
||||||
|
static isRenderable = function() /*=>*/ {return false};
|
||||||
|
static doUpdate = function() {}
|
||||||
|
static update = function() {}
|
||||||
|
|
||||||
|
static postApplyDeserialize = function() {
|
||||||
|
onValueUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
static drawNode = function() { return noone; }
|
static drawNode = function() { return noone; }
|
||||||
|
|
|
@ -363,7 +363,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
switch(_val_type) {
|
switch(_val_type) {
|
||||||
case VALUE_TYPE.trigger :
|
case VALUE_TYPE.trigger :
|
||||||
var bname = getInputData(8);
|
var bname = getInputData(8);
|
||||||
inParent.setDisplay(VALUE_DISPLAY.button, { name: bname, onClick: function() { doTrigger = 1; } });
|
inParent.setDisplay(VALUE_DISPLAY.button, { name: bname, onClick: function() /*=>*/ { doTrigger = 1; } });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,32 +398,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
}
|
}
|
||||||
if(!LOADING && !APPENDING) createInput();
|
if(!LOADING && !APPENDING) createInput();
|
||||||
|
|
||||||
static step = function() {
|
static updateGroupInput = function() {
|
||||||
if(is_undefined(inParent)) return;
|
|
||||||
|
|
||||||
if(inParent.name != display_name) {
|
|
||||||
inParent.name = display_name;
|
|
||||||
group.inputMap[$ string_replace_all(display_name, " ", "_")] = inParent;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(inParent.type != VALUE_TYPE.trigger) return;
|
|
||||||
|
|
||||||
switch(doTrigger) {
|
|
||||||
case 1 :
|
|
||||||
outputs[0].setValue(true);
|
|
||||||
doTrigger = -1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case -1 :
|
|
||||||
outputs[0].setValue(false);
|
|
||||||
doTrigger = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static update = function(frame = CURRENT_FRAME) {
|
|
||||||
if(is_undefined(inParent)) return;
|
|
||||||
|
|
||||||
var _dstype = getInputData(0);
|
var _dstype = getInputData(0);
|
||||||
var _data = getInputData(2);
|
var _data = getInputData(2);
|
||||||
var _dsList = array_safe_get_fast(GROUP_IO_DISPLAY, _data);
|
var _dsList = array_safe_get_fast(GROUP_IO_DISPLAY, _data);
|
||||||
|
@ -431,7 +406,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
|
|
||||||
inputs[0].display_data.data = _dsList;
|
inputs[0].display_data.data = _dsList;
|
||||||
inputs[0].editWidget.data_list = _dsList;
|
inputs[0].editWidget.data_list = _dsList;
|
||||||
|
|
||||||
_dstype = array_safe_get_fast(_dsList, _dstype);
|
_dstype = array_safe_get_fast(_dsList, _dstype);
|
||||||
|
|
||||||
var _datype = array_safe_get_fast(GROUP_IO_TYPE_MAP, _data, VALUE_TYPE.any);
|
var _datype = array_safe_get_fast(GROUP_IO_TYPE_MAP, _data, VALUE_TYPE.any);
|
||||||
|
@ -465,8 +440,46 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
}
|
}
|
||||||
|
|
||||||
visibleCheck();
|
visibleCheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
static step = function() {
|
||||||
|
if(is_undefined(inParent)) return;
|
||||||
|
|
||||||
|
if(inParent.name != display_name) {
|
||||||
|
inParent.name = display_name;
|
||||||
|
group.inputMap[$ string_replace_all(display_name, " ", "_")] = inParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(inParent.type != VALUE_TYPE.trigger) return;
|
||||||
|
|
||||||
|
switch(doTrigger) {
|
||||||
|
case 1 :
|
||||||
|
outputs[0].setValue(true);
|
||||||
|
doTrigger = -1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case -1 :
|
||||||
|
outputs[0].setValue(false);
|
||||||
|
doTrigger = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
doUpdate = doUpdateLite;
|
||||||
|
__dstype = noone;
|
||||||
|
__data = noone;
|
||||||
|
|
||||||
|
static update = function(frame = CURRENT_FRAME) {
|
||||||
outputs[0].setValue(inParent.getValue());
|
outputs[0].setValue(inParent.getValue());
|
||||||
|
|
||||||
|
var _dstype = inputs[0].getValue();
|
||||||
|
var _data = inputs[2].getValue();
|
||||||
|
if(_dstype == __dstype && _data == __data) return;
|
||||||
|
getInputs(frame);
|
||||||
|
updateGroupInput();
|
||||||
|
|
||||||
|
__dstype = _dstype;
|
||||||
|
__data = _data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -28,7 +28,8 @@ function Node_Group_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
|
|
||||||
static onValueUpdate = function(index = 0) { if(is_undefined(outParent)) return; }
|
static onValueUpdate = function(index = 0) { if(is_undefined(outParent)) return; }
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
|
if(checkLoop) return;
|
||||||
if(is_undefined(outParent)) return [];
|
if(is_undefined(outParent)) return [];
|
||||||
|
|
||||||
LOG_BLOCK_START();
|
LOG_BLOCK_START();
|
||||||
|
|
|
@ -9,9 +9,11 @@ function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inli
|
||||||
|
|
||||||
input_node_type = Node_Iterator_Each_Inline_Input;
|
input_node_type = Node_Iterator_Each_Inline_Input;
|
||||||
output_node_type = Node_Iterator_Each_Inline_Output;
|
output_node_type = Node_Iterator_Each_Inline_Output;
|
||||||
|
|
||||||
|
iteration_count = 0;
|
||||||
iterated = 0;
|
iterated = 0;
|
||||||
|
|
||||||
if(!LOADING && !APPENDING) { #region
|
if(!LOADING && !APPENDING) {
|
||||||
var input = nodeBuild("Node_Iterator_Each_Inline_Input", x, y);
|
var input = nodeBuild("Node_Iterator_Each_Inline_Input", x, y);
|
||||||
var output = nodeBuild("Node_Iterator_Each_Inline_Output", x + 256, y);
|
var output = nodeBuild("Node_Iterator_Each_Inline_Output", x + 256, y);
|
||||||
|
|
||||||
|
@ -32,18 +34,18 @@ function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inli
|
||||||
|
|
||||||
array_push(APPEND_LIST, input, output);
|
array_push(APPEND_LIST, input, output);
|
||||||
}
|
}
|
||||||
} #endregion
|
}
|
||||||
|
|
||||||
static getIterationCount = function() { #region
|
static getIterationCount = function() {
|
||||||
var _arr = input_node.inputs[0].getValue();
|
var _arr = input_node.inputs[0].getValue();
|
||||||
return array_length(_arr);
|
return array_length(_arr);
|
||||||
} #endregion
|
}
|
||||||
|
|
||||||
static bypassNextNode = function() { #region
|
static bypassNextNode = function() {
|
||||||
return iterated < getIterationCount();
|
return iterated < getIterationCount();
|
||||||
} #endregion
|
}
|
||||||
|
|
||||||
static getNextNodes = function() { #region
|
static getNextNodes = function(checkLoop = false) {
|
||||||
LOG_BLOCK_START();
|
LOG_BLOCK_START();
|
||||||
LOG_IF(global.FLAG.render == 1, "[outputNextNode] Get next node from inline iterate");
|
LOG_IF(global.FLAG.render == 1, "[outputNextNode] Get next node from inline iterate");
|
||||||
|
|
||||||
|
@ -57,9 +59,9 @@ function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inli
|
||||||
LOG_BLOCK_END();
|
LOG_BLOCK_END();
|
||||||
|
|
||||||
return _nodes;
|
return _nodes;
|
||||||
} #endregion
|
}
|
||||||
|
|
||||||
static refreshMember = function() { #region
|
static refreshMember = function() {
|
||||||
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++ ) {
|
||||||
|
@ -89,9 +91,9 @@ function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inli
|
||||||
if(output_node) output_node.destroy();
|
if(output_node) output_node.destroy();
|
||||||
destroy();
|
destroy();
|
||||||
}
|
}
|
||||||
} #endregion
|
}
|
||||||
|
|
||||||
static update = function() { #region
|
static update = function() {
|
||||||
if(input_node == noone || output_node == noone) {
|
if(input_node == noone || output_node == noone) {
|
||||||
if(input_node) input_node.destroy();
|
if(input_node) input_node.destroy();
|
||||||
if(output_node) output_node.destroy();
|
if(output_node) output_node.destroy();
|
||||||
|
@ -99,8 +101,12 @@ function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inli
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterated = 0;
|
var _itc = getIterationCount();
|
||||||
|
if(_itc != iteration_count) RENDER_ALL_REORDER;
|
||||||
|
iteration_count = _itc;
|
||||||
|
iterated = 0;
|
||||||
|
|
||||||
output_node.outputs[0].setValue([]);
|
output_node.outputs[0].setValue([]);
|
||||||
} #endregion
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -8,6 +8,8 @@ function Node_Iterate_Filter_Inline(_x, _y, _group = noone) : Node_Collection_In
|
||||||
|
|
||||||
input_node_type = Node_Iterator_Filter_Inline_Input;
|
input_node_type = Node_Iterator_Filter_Inline_Input;
|
||||||
output_node_type = Node_Iterator_Filter_Inline_Output;
|
output_node_type = Node_Iterator_Filter_Inline_Output;
|
||||||
|
|
||||||
|
iteration_count = 0;
|
||||||
iterated = 0;
|
iterated = 0;
|
||||||
|
|
||||||
if(!LOADING && !APPENDING) {
|
if(!LOADING && !APPENDING) {
|
||||||
|
@ -42,7 +44,7 @@ function Node_Iterate_Filter_Inline(_x, _y, _group = noone) : Node_Collection_In
|
||||||
return iterated < getIterationCount();
|
return iterated < getIterationCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
LOG_BLOCK_START();
|
LOG_BLOCK_START();
|
||||||
LOG_IF(global.FLAG.render == 1, "[outputNextNode] Get next node from inline iterate");
|
LOG_IF(global.FLAG.render == 1, "[outputNextNode] Get next node from inline iterate");
|
||||||
|
|
||||||
|
@ -96,7 +98,11 @@ function Node_Iterate_Filter_Inline(_x, _y, _group = noone) : Node_Collection_In
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterated = 0;
|
var _itc = getIterationCount();
|
||||||
|
if(_itc != iteration_count) RENDER_ALL_REORDER;
|
||||||
|
iteration_count = _itc;
|
||||||
|
iterated = 0;
|
||||||
|
|
||||||
output_node.outputs[0].setValue([]);
|
output_node.outputs[0].setValue([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,13 +18,14 @@ function Node_Iterate_Inline(_x, _y, _group = noone) : Node_Collection_Inline(_x
|
||||||
junc_out = noone;
|
junc_out = noone;
|
||||||
|
|
||||||
value_buffer = undefined;
|
value_buffer = undefined;
|
||||||
|
iteration_count = 0;
|
||||||
iterated = 0;
|
iterated = 0;
|
||||||
|
|
||||||
static getIterationCount = function() { return getInputData(0); }
|
static getIterationCount = function() { return getInputData(0); }
|
||||||
static bypassConnection = function() { return iterated > 1 && !is_undefined(value_buffer); }
|
static bypassConnection = function() { return iterated > 1 && !is_undefined(value_buffer); }
|
||||||
static bypassNextNode = function() { return iterated < getIterationCount(); }
|
static bypassNextNode = function() { return iterated < getIterationCount(); }
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
LOG_BLOCK_START();
|
LOG_BLOCK_START();
|
||||||
LOG_IF(global.FLAG.render == 1, "[outputNextNode] Get next node from inline iterate");
|
LOG_IF(global.FLAG.render == 1, "[outputNextNode] Get next node from inline iterate");
|
||||||
|
|
||||||
|
@ -85,7 +86,10 @@ function Node_Iterate_Inline(_x, _y, _group = noone) : Node_Collection_Inline(_x
|
||||||
}
|
}
|
||||||
|
|
||||||
static update = function() {
|
static update = function() {
|
||||||
iteration_count = inputs[0].getValue();
|
var _itc = inputs[0].getValue();
|
||||||
|
if(_itc != iteration_count) RENDER_ALL_REORDER;
|
||||||
|
|
||||||
|
iteration_count = _itc;
|
||||||
iterated = 0;
|
iterated = 0;
|
||||||
value_buffer = undefined;
|
value_buffer = undefined;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ function Node_Iterate_Sort(_x, _y, _group = noone) : Node_Collection(_x, _y, _gr
|
||||||
return false;
|
return false;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static getNextNodes = function() { return getNextNodesExternal(); }
|
static getNextNodes = function(checkLoop = false) { return getNextNodesExternal(); }
|
||||||
|
|
||||||
static onStep = function() { #region
|
static onStep = function() { #region
|
||||||
var type = inputs[0].value_from == noone? VALUE_TYPE.any : inputs[0].value_from.type;
|
var type = inputs[0].value_from == noone? VALUE_TYPE.any : inputs[0].value_from.type;
|
||||||
|
|
|
@ -42,7 +42,7 @@ function Node_Iterate_Sort_Inline(_x, _y, _group = noone) : Node_Collection_Inli
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
return output_node.getNextNodes();
|
return output_node.getNextNodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,13 +13,13 @@ function Node_Iterator_Each_Inline_Output(_x, _y, _group = noone) : Node(_x, _y,
|
||||||
|
|
||||||
newOutput(0, nodeValue_Output("Array out", self, VALUE_TYPE.any, [] ));
|
newOutput(0, nodeValue_Output("Array out", self, VALUE_TYPE.any, [] ));
|
||||||
|
|
||||||
static getNextNodes = function() { #region
|
static getNextNodes = function(checkLoop = false) {
|
||||||
if(loop.bypassNextNode())
|
if(loop.bypassNextNode())
|
||||||
return loop.getNextNodes();
|
return loop.getNextNodes();
|
||||||
return getNextNodesRaw();
|
return getNextNodesRaw();
|
||||||
} #endregion
|
}
|
||||||
|
|
||||||
static update = function(frame = CURRENT_FRAME) { #region
|
static update = function(frame = CURRENT_FRAME) {
|
||||||
if(!is_instanceof(loop, Node_Iterate_Each_Inline)) return;
|
if(!is_instanceof(loop, Node_Iterate_Each_Inline)) return;
|
||||||
|
|
||||||
var _typ = inputs[0].value_from == noone? VALUE_TYPE.any : inputs[0].value_from.type;
|
var _typ = inputs[0].value_from == noone? VALUE_TYPE.any : inputs[0].value_from.type;
|
||||||
|
@ -46,5 +46,5 @@ function Node_Iterator_Each_Inline_Output(_x, _y, _group = noone) : Node(_x, _y,
|
||||||
arr[@ itr] = val;
|
arr[@ itr] = val;
|
||||||
|
|
||||||
outputs[0].setValue(arr);
|
outputs[0].setValue(arr);
|
||||||
} #endregion
|
}
|
||||||
}
|
}
|
|
@ -11,7 +11,7 @@ function Node_Iterator_Each_Output(_x, _y, _group = noone) : Node(_x, _y, _group
|
||||||
newOutput(0, nodeValue_Output("Preview", self, VALUE_TYPE.any, 0 ))
|
newOutput(0, nodeValue_Output("Preview", self, VALUE_TYPE.any, 0 ))
|
||||||
.setVisible(false, false);
|
.setVisible(false, false);
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
if(!struct_has(group, "outputNextNode")) return [];
|
if(!struct_has(group, "outputNextNode")) return [];
|
||||||
return group.outputNextNode();
|
return group.outputNextNode();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ function Node_Iterator_Filter_Inline_Output(_x, _y, _group = noone) : Node(_x, _
|
||||||
|
|
||||||
newOutput(0, nodeValue_Output("Array out", self, VALUE_TYPE.any, [] ));
|
newOutput(0, nodeValue_Output("Array out", self, VALUE_TYPE.any, [] ));
|
||||||
|
|
||||||
static getNextNodes = function() { #region
|
static getNextNodes = function(checkLoop = false) { #region
|
||||||
if(loop.bypassNextNode())
|
if(loop.bypassNextNode())
|
||||||
return loop.getNextNodes();
|
return loop.getNextNodes();
|
||||||
return getNextNodesRaw();
|
return getNextNodesRaw();
|
||||||
|
|
|
@ -11,7 +11,7 @@ function Node_Iterator_Filter_Output(_x, _y, _group = noone) : Node(_x, _y, _gro
|
||||||
newInput(1, nodeValue_Bool("Result", self, false ))
|
newInput(1, nodeValue_Bool("Result", self, false ))
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
if(!struct_has(group, "outputNextNode")) return [];
|
if(!struct_has(group, "outputNextNode")) return [];
|
||||||
return group.outputNextNode();
|
return group.outputNextNode();
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ function Node_Iterator_Output(_x, _y, _group = noone) : Node_Group_Output(_x, _y
|
||||||
|
|
||||||
cache_value = -1;
|
cache_value = -1;
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
if(!struct_has(group, "outputNextNode")) return [];
|
if(!struct_has(group, "outputNextNode")) return [];
|
||||||
return group.outputNextNode();
|
return group.outputNextNode();
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ function Node_Iterator_Sort_Output(_x, _y, _group = noone) : Node(_x, _y, _group
|
||||||
|
|
||||||
attributes.sort_inputs = 0;
|
attributes.sort_inputs = 0;
|
||||||
|
|
||||||
static getNextNodes = function() { return []; }
|
static getNextNodes = function(checkLoop = false) { return []; }
|
||||||
|
|
||||||
static step = function() {}
|
static step = function() {}
|
||||||
|
|
||||||
|
|
|
@ -97,9 +97,9 @@ function Node_Math(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
case MATH_OPERATOR.power : return power(a, b);
|
case MATH_OPERATOR.power : return power(a, b);
|
||||||
case MATH_OPERATOR.root : return b == 0? 0 : power(a, 1 / b);
|
case MATH_OPERATOR.root : return b == 0? 0 : power(a, 1 / b);
|
||||||
|
|
||||||
case MATH_OPERATOR.sin : return sin(use_deg? degtorad(a) : a) * b;
|
case MATH_OPERATOR.sin : return (use_deg? dsin(a) : sin(a)) * b;
|
||||||
case MATH_OPERATOR.cos : return cos(use_deg? degtorad(a) : a) * b;
|
case MATH_OPERATOR.cos : return (use_deg? dcos(a) : cos(a)) * b;
|
||||||
case MATH_OPERATOR.tan : return tan(use_deg? degtorad(a) : a) * b;
|
case MATH_OPERATOR.tan : return (use_deg? dtan(a) : tan(a)) * b;
|
||||||
case MATH_OPERATOR.modulo : return safe_mod(a, b);
|
case MATH_OPERATOR.modulo : return safe_mod(a, b);
|
||||||
|
|
||||||
case MATH_OPERATOR.floor : return floor(a);
|
case MATH_OPERATOR.floor : return floor(a);
|
||||||
|
@ -145,93 +145,98 @@ function Node_Math(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static update = function(frame = CURRENT_FRAME) {
|
__mode = noone;
|
||||||
use_mod = getInputData(0);
|
doUpdate = doUpdateLite;
|
||||||
use_deg = getInputData(3);
|
static update = function(frame = CURRENT_FRAME) {
|
||||||
|
|
||||||
var a = getInputData(1);
|
use_mod = inputs[0].getValue();
|
||||||
var b = getInputData(2);
|
use_deg = inputs[3].getValue();
|
||||||
var c = getInputData(5);
|
|
||||||
|
|
||||||
var mode = getInputData(0);
|
var a = inputs[1].getValue();
|
||||||
|
var b = inputs[2].getValue();
|
||||||
inputs[2].setVisible(false, false);
|
var c = inputs[5].getValue();
|
||||||
inputs[3].setVisible(false, false);
|
|
||||||
inputs[5].setVisible(false, false);
|
|
||||||
|
|
||||||
switch(mode) {
|
|
||||||
case MATH_OPERATOR.sin :
|
|
||||||
case MATH_OPERATOR.cos :
|
|
||||||
case MATH_OPERATOR.tan :
|
|
||||||
inputs[3].setVisible(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(mode) {
|
|
||||||
case MATH_OPERATOR.round :
|
|
||||||
case MATH_OPERATOR.floor :
|
|
||||||
case MATH_OPERATOR.ceiling :
|
|
||||||
inputs[4].setVisible(true);
|
|
||||||
|
|
||||||
var int = getInputData(4);
|
|
||||||
if(int) outputs[0].setType(VALUE_TYPE.integer);
|
|
||||||
else outputs[0].setType(VALUE_TYPE.float);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
inputs[4].setVisible(false);
|
|
||||||
|
|
||||||
outputs[0].setType(VALUE_TYPE.float);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(mode) {
|
|
||||||
case MATH_OPERATOR.add :
|
|
||||||
case MATH_OPERATOR.subtract :
|
|
||||||
case MATH_OPERATOR.multiply :
|
|
||||||
case MATH_OPERATOR.divide :
|
|
||||||
case MATH_OPERATOR.power :
|
|
||||||
case MATH_OPERATOR.root :
|
|
||||||
case MATH_OPERATOR.modulo :
|
|
||||||
inputs[2].name = "b";
|
|
||||||
|
|
||||||
inputs[2].setVisible(true, true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MATH_OPERATOR.sin :
|
|
||||||
case MATH_OPERATOR.cos :
|
|
||||||
case MATH_OPERATOR.tan :
|
|
||||||
inputs[2].name = "Amplitude";
|
|
||||||
|
|
||||||
inputs[2].setVisible(true, true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MATH_OPERATOR.lerp :
|
|
||||||
inputs[2].name = "To";
|
|
||||||
inputs[5].name = "Amount";
|
|
||||||
|
|
||||||
inputs[2].setVisible(true, true);
|
|
||||||
inputs[5].setVisible(true, true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MATH_OPERATOR.clamp :
|
|
||||||
inputs[2].name = "Min";
|
|
||||||
inputs[5].name = "Max";
|
|
||||||
|
|
||||||
inputs[2].setVisible(true, true);
|
|
||||||
inputs[5].setVisible(true, true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MATH_OPERATOR.snap :
|
|
||||||
inputs[2].name = "Snap";
|
|
||||||
|
|
||||||
inputs[2].setVisible(true, true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var val = evalArray(a, b, c);
|
var val = evalArray(a, b, c);
|
||||||
outputs[0].setValue(val);
|
outputs[0].setValue(val);
|
||||||
|
|
||||||
|
if(__mode != use_mod) {
|
||||||
|
inputs[2].setVisible(false, false);
|
||||||
|
inputs[3].setVisible(false, false);
|
||||||
|
inputs[5].setVisible(false, false);
|
||||||
|
|
||||||
|
switch(use_mod) {
|
||||||
|
case MATH_OPERATOR.sin :
|
||||||
|
case MATH_OPERATOR.cos :
|
||||||
|
case MATH_OPERATOR.tan :
|
||||||
|
inputs[3].setVisible(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(use_mod) {
|
||||||
|
case MATH_OPERATOR.round :
|
||||||
|
case MATH_OPERATOR.floor :
|
||||||
|
case MATH_OPERATOR.ceiling :
|
||||||
|
inputs[4].setVisible(true);
|
||||||
|
|
||||||
|
var int = getInputData(4);
|
||||||
|
if(int) outputs[0].setType(VALUE_TYPE.integer);
|
||||||
|
else outputs[0].setType(VALUE_TYPE.float);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
inputs[4].setVisible(false);
|
||||||
|
|
||||||
|
outputs[0].setType(VALUE_TYPE.float);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(use_mod) {
|
||||||
|
case MATH_OPERATOR.add :
|
||||||
|
case MATH_OPERATOR.subtract :
|
||||||
|
case MATH_OPERATOR.multiply :
|
||||||
|
case MATH_OPERATOR.divide :
|
||||||
|
case MATH_OPERATOR.power :
|
||||||
|
case MATH_OPERATOR.root :
|
||||||
|
case MATH_OPERATOR.modulo :
|
||||||
|
inputs[2].name = "b";
|
||||||
|
|
||||||
|
inputs[2].setVisible(true, true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MATH_OPERATOR.sin :
|
||||||
|
case MATH_OPERATOR.cos :
|
||||||
|
case MATH_OPERATOR.tan :
|
||||||
|
inputs[2].name = "Amplitude";
|
||||||
|
|
||||||
|
inputs[2].setVisible(true, true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MATH_OPERATOR.lerp :
|
||||||
|
inputs[2].name = "To";
|
||||||
|
inputs[5].name = "Amount";
|
||||||
|
|
||||||
|
inputs[2].setVisible(true, true);
|
||||||
|
inputs[5].setVisible(true, true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MATH_OPERATOR.clamp :
|
||||||
|
inputs[2].name = "Min";
|
||||||
|
inputs[5].name = "Max";
|
||||||
|
|
||||||
|
inputs[2].setVisible(true, true);
|
||||||
|
inputs[5].setVisible(true, true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MATH_OPERATOR.snap :
|
||||||
|
inputs[2].name = "Snap";
|
||||||
|
|
||||||
|
inputs[2].setVisible(true, true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__mode = use_mod;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
|
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
|
||||||
|
|
|
@ -95,7 +95,6 @@ function Node_Number(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
static processNumber = function(_val, _int) {
|
static processNumber = function(_val, _int) {
|
||||||
if(is_string(_val)) return _int? round(toNumber(_val)) : toNumber(_val);
|
|
||||||
if(is_numeric(_val)) return _int? round(_val) : _val;
|
if(is_numeric(_val)) return _int? round(_val) : _val;
|
||||||
|
|
||||||
if(is_array(_val)) {
|
if(is_array(_val)) {
|
||||||
|
@ -147,9 +146,7 @@ function Node_Number(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
slider_value = slider_value == -1? raw : lerp_float(slider_value, raw, 2.5);
|
slider_value = slider_value == -1? raw : lerp_float(slider_value, raw, 2.5);
|
||||||
var _prog = clamp((slider_value - _minn) / (_maxx - _minn), 0., 1.);
|
var _prog = clamp((slider_value - _minn) / (_maxx - _minn), 0., 1.);
|
||||||
|
|
||||||
bbox = drawGetBbox(xx, yy, _s, false);
|
bbox = drawGetBbox(xx, yy, _s, 2);
|
||||||
bbox.fromPoints(bbox.x0, bbox.y0 + 16 * _s, bbox.x1, bbox.y1);
|
|
||||||
|
|
||||||
draw_set_text(f_sdf, fa_center, fa_center, _col);
|
draw_set_text(f_sdf, fa_center, fa_center, _col);
|
||||||
draw_text_transformed(bbox.xc, bbox.y0 + 16 * _s, string_real(val), _s * 0.5, _s * 0.5, 0);
|
draw_text_transformed(bbox.xc, bbox.y0 + 16 * _s, string_real(val), _s * 0.5, _s * 0.5, 0);
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ function Node_PB(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constr
|
||||||
|
|
||||||
static drawOverlayPB = noone;
|
static drawOverlayPB = noone;
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
if(!struct_has(group, "checkComplete")) return [];
|
if(!struct_has(group, "checkComplete")) return [];
|
||||||
|
|
||||||
for( var i = 0; i < array_length(outputs); i++ ) {
|
for( var i = 0; i < array_length(outputs); i++ ) {
|
||||||
|
|
|
@ -17,7 +17,7 @@ function Node_Pixel_Builder(_x, _y, _group = noone) : Node_Collection(_x, _y, _g
|
||||||
RENDER_ALL
|
RENDER_ALL
|
||||||
}
|
}
|
||||||
|
|
||||||
static getNextNodes = function() { #region
|
static getNextNodes = function(checkLoop = false) { #region
|
||||||
var allReady = true;
|
var allReady = true;
|
||||||
for(var i = custom_input_index; i < array_length(inputs); i++) {
|
for(var i = custom_input_index; i < array_length(inputs); i++) {
|
||||||
var _in = inputs[i].from;
|
var _in = inputs[i].from;
|
||||||
|
|
|
@ -36,14 +36,23 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
||||||
_node.inputs[0].setValue(_key);
|
_node.inputs[0].setValue(_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__jfrom = noone;
|
||||||
|
__key = noone;
|
||||||
|
|
||||||
static update = function(frame = CURRENT_FRAME) {
|
static update = function(frame = CURRENT_FRAME) {
|
||||||
onValueUpdate();
|
var _key = inputs[0].getValue();
|
||||||
|
|
||||||
var _frm = inputs[1].value_from;
|
var _frm = inputs[1].value_from;
|
||||||
|
|
||||||
inputs[1].setType( _frm? _frm.type : VALUE_TYPE.any);
|
if(_key != __key) onValueUpdate();
|
||||||
inputs[1].setDisplay(_frm? _frm.display_type : VALUE_DISPLAY._default);
|
|
||||||
inputs[1].updateColor();
|
if(_frm != __jfrom) {
|
||||||
|
inputs[1].setType( _frm? _frm.type : VALUE_TYPE.any);
|
||||||
|
inputs[1].setDisplay(_frm? _frm.display_type : VALUE_DISPLAY._default);
|
||||||
|
inputs[1].updateColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
__key = _key;
|
||||||
|
__jfrom = _frm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static resetMap = function() {
|
static resetMap = function() {
|
||||||
|
@ -110,7 +119,7 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
||||||
value_validation[VALIDATION.error] = error_notification != noone;
|
value_validation[VALIDATION.error] = error_notification != noone;
|
||||||
}
|
}
|
||||||
|
|
||||||
static getNextNodes = function() {
|
static getNextNodes = function(checkLoop = false) {
|
||||||
var nodes = [];
|
var nodes = [];
|
||||||
var nodeNames = [];
|
var nodeNames = [];
|
||||||
var _key = inputs[0].getValue();
|
var _key = inputs[0].getValue();
|
||||||
|
|
|
@ -3,7 +3,6 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
color = COLORS.node_blend_tunnel;
|
color = COLORS.node_blend_tunnel;
|
||||||
is_group_io = true;
|
is_group_io = true;
|
||||||
preview_draw = false;
|
preview_draw = false;
|
||||||
// custom_grid = 8;
|
|
||||||
|
|
||||||
setDimension(32, 32);
|
setDimension(32, 32);
|
||||||
|
|
||||||
|
|
|
@ -498,6 +498,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
node.inputs[attributes.map_index + 1].setAnim(anim);
|
node.inputs[attributes.map_index + 1].setAnim(anim);
|
||||||
|
|
||||||
node.refreshTimeline();
|
node.refreshTimeline();
|
||||||
|
if(NOT_LOAD && node.group) node.group.checkPureFunction();
|
||||||
}
|
}
|
||||||
|
|
||||||
/////============ DISPLAY ===========
|
/////============ DISPLAY ===========
|
||||||
|
@ -2213,12 +2214,10 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
draw_line_shift_e = struct_try_get(_map, "shift_e", -1);
|
draw_line_shift_e = struct_try_get(_map, "shift_e", -1);
|
||||||
is_modified = struct_try_get(_map, "is_modified", false);
|
is_modified = struct_try_get(_map, "is_modified", false);
|
||||||
|
|
||||||
if(struct_has(_map, "attri")) {
|
if(struct_has(_map, "attri")) struct_append(attributes, _map.attri);
|
||||||
struct_append(attributes, _map.attri);
|
|
||||||
|
if(struct_has(attributes, "use_project_dimension") && struct_has(node.load_map, "attri") && struct_has(node.load_map.attri, "use_project_dimension"))
|
||||||
if(struct_has(attributes, "use_project_dimension") && struct_has(node.attributes, "use_project_dimension"))
|
attributes.use_project_dimension = node.load_map.attri.use_project_dimension;
|
||||||
attributes.use_project_dimension = node.attributes.use_project_dimension;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(struct_has(_map, "linked"))
|
if(struct_has(_map, "linked"))
|
||||||
display_data.linked = _map.linked;
|
display_data.linked = _map.linked;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
function nodeValue_Float(_name, _node, _value, _tooltip = "") { return new __NodeValue_Float(_name, _node, _value, _tooltip); }
|
function nodeValue_Float(_name, _node, _value, _tooltip = "") { return new __NodeValue_Float(_name, _node, _value, _tooltip); }
|
||||||
|
|
||||||
function __NodeValue_Float(_name, _node, _value, _tooltip = "") : NodeValue(_name, _node, CONNECT_TYPE.input, VALUE_TYPE.float, _value, _tooltip) constructor {
|
function __NodeValue_Float(_name, _node, _value, _tooltip = "") : NodeValue(_name, _node, CONNECT_TYPE.input, VALUE_TYPE.float, _value, _tooltip) constructor {
|
||||||
|
|
||||||
/////============== GET =============
|
/////============== GET =============
|
||||||
|
@ -55,5 +54,23 @@ function __NodeValue_Float(_name, _node, _value, _tooltip = "") : NodeValue(_nam
|
||||||
return array_empty(animator.values)? 0 : animator.values[0].value;
|
return array_empty(animator.values)? 0 : animator.values[0].value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static arrayLength = arrayLengthSimple;
|
||||||
|
}
|
||||||
|
|
||||||
|
function nodeValue_Float_Simple(_name, _node, _value, _tooltip = "") { return new __NodeValue_Float_Simple(_name, _node, _value, _tooltip); }
|
||||||
|
function __NodeValue_Float_Simple(_name, _node, _value, _tooltip = "") : NodeValue(_name, _node, CONNECT_TYPE.input, VALUE_TYPE.float, _value, _tooltip) constructor {
|
||||||
|
|
||||||
|
/////============== GET =============
|
||||||
|
|
||||||
|
static getValue = function(_time = CURRENT_FRAME, applyUnit = true, arrIndex = 0, useCache = false, log = false) { //// Get value
|
||||||
|
getValueRecursive(self.__curr_get_val, _time);
|
||||||
|
return __curr_get_val[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
static __getAnimValue = function(_time = CURRENT_FRAME) {
|
||||||
|
if(is_anim) return animator.getValue(_time);
|
||||||
|
return array_empty(animator.values)? 0 : animator.values[0].value;
|
||||||
|
}
|
||||||
|
|
||||||
static arrayLength = arrayLengthSimple;
|
static arrayLength = arrayLengthSimple;
|
||||||
}
|
}
|
|
@ -800,6 +800,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
||||||
static setProject = function(project) {
|
static setProject = function(project) {
|
||||||
self.project = project;
|
self.project = project;
|
||||||
nodes_list = project.nodes;
|
nodes_list = project.nodes;
|
||||||
|
connection_draw_update = true;
|
||||||
|
|
||||||
setTitle();
|
setTitle();
|
||||||
run_in(2, function() /*=>*/ {
|
run_in(2, function() /*=>*/ {
|
||||||
|
|
|
@ -1283,8 +1283,9 @@ function Panel_Inspector() : PanelContent() constructor {
|
||||||
else if(context != noone)
|
else if(context != noone)
|
||||||
txt = context.name;
|
txt = context.name;
|
||||||
|
|
||||||
draw_set_text(f_h5, fa_center, fa_center, COLORS._main_text);
|
draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text);
|
||||||
draw_text_add(w / 2, ui(30), txt);
|
var ss = min(.5, (w - ui(96)) / string_width(txt));
|
||||||
|
draw_text_add(w / 2, ui(30), txt, ss);
|
||||||
|
|
||||||
if(PROJECT.meta.steam == FILE_STEAM_TYPE.steamOpen) {
|
if(PROJECT.meta.steam == FILE_STEAM_TYPE.steamOpen) {
|
||||||
var _tw = string_width(txt) / 2;
|
var _tw = string_width(txt) / 2;
|
||||||
|
|
|
@ -31,9 +31,6 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
show_io = true;
|
show_io = true;
|
||||||
show_log_level = 1;
|
show_log_level = 1;
|
||||||
|
|
||||||
count_render_event = 0;
|
|
||||||
count_message_event = 0;
|
|
||||||
|
|
||||||
filter_list_string = "";
|
filter_list_string = "";
|
||||||
tb_list = new textBox( TEXTBOX_INPUT.text, function(str) /*=>*/ { filter_list_string = str; searchData(); })
|
tb_list = new textBox( TEXTBOX_INPUT.text, function(str) /*=>*/ { filter_list_string = str; searchData(); })
|
||||||
.setFont(f_p3)
|
.setFont(f_p3)
|
||||||
|
@ -111,6 +108,61 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
PANEL_GRAPH.nodes_selecting = [ _report.node ];
|
PANEL_GRAPH.nodes_selecting = [ _report.node ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
count_render_event = 0;
|
||||||
|
count_message_event = 0;
|
||||||
|
node_render_time = 0;
|
||||||
|
node_render_time_type = {};
|
||||||
|
node_render_rtim_type = {};
|
||||||
|
node_render_time_amo = {};
|
||||||
|
node_render_time_type_sorted = [];
|
||||||
|
pie_selecting = noone;
|
||||||
|
|
||||||
|
function summarize() {
|
||||||
|
count_render_event = 0;
|
||||||
|
count_message_event = 0;
|
||||||
|
node_render_time = 0;
|
||||||
|
node_render_time_type = {};
|
||||||
|
node_render_rtim_type = {};
|
||||||
|
node_render_time_amo = {};
|
||||||
|
node_render_time_type_sorted = [];
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(PROFILER_DATA); i < n; i++ ) {
|
||||||
|
var _report = PROFILER_DATA[i];
|
||||||
|
var _rtype = _report.type;
|
||||||
|
|
||||||
|
switch(_rtype) {
|
||||||
|
case "render" :
|
||||||
|
var _node = _report.node;
|
||||||
|
var _time = _report.time;
|
||||||
|
node_render_time += _time;
|
||||||
|
|
||||||
|
count_render_event++;
|
||||||
|
|
||||||
|
var _typ = instanceof(_node);
|
||||||
|
node_render_time_type[$ _typ] = struct_try_get(node_render_time_type, _typ, 0) + _time;
|
||||||
|
node_render_rtim_type[$ _typ] = struct_try_get(node_render_rtim_type, _typ, 0) + _report.renderTime;
|
||||||
|
node_render_time_amo[$ _typ] = struct_try_get(node_render_time_amo, _typ, 0) + 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "message" : count_message_event++; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _pr = ds_priority_create();
|
||||||
|
var _nods = variable_struct_get_names(node_render_time_type);
|
||||||
|
for( var i = 0, n = array_length(_nods); i < n; i++ ) {
|
||||||
|
var _typ = _nods[i];
|
||||||
|
var _c = make_color_hsv(random(255), 160, 160);
|
||||||
|
ds_priority_add(_pr, [_typ, node_render_time_type[$ _typ], _c], node_render_time_type[$ _typ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var sz = ds_priority_size(_pr);
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
repeat(sz) node_render_time_type_sorted[i++] = ds_priority_delete_max(_pr);
|
||||||
|
ds_priority_destroy(_pr);
|
||||||
|
}
|
||||||
|
|
||||||
sc_profile_list = new scrollPane(list_w - ui(8), content_h - ui(8), function(_y, _m) {
|
sc_profile_list = new scrollPane(list_w - ui(8), content_h - ui(8), function(_y, _m) {
|
||||||
draw_clear_alpha(COLORS.panel_bg_clear_inner, 1);
|
draw_clear_alpha(COLORS.panel_bg_clear_inner, 1);
|
||||||
var _h = ui(8);
|
var _h = ui(8);
|
||||||
|
@ -188,7 +240,10 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
|
|
||||||
sc_profile_detail = new scrollPane(detail_w - ui(8), content_h - ui(8), function(_y, _m) {
|
sc_profile_detail = new scrollPane(detail_w - ui(8), content_h - ui(8), function(_y, _m) {
|
||||||
draw_clear_alpha(COLORS.panel_bg_clear_inner, 1);
|
draw_clear_alpha(COLORS.panel_bg_clear_inner, 1);
|
||||||
var _h = 0;
|
var _h = 0;
|
||||||
|
var _ww = sc_profile_detail.surface_w;
|
||||||
|
var _hh = sc_profile_detail.surface_h;
|
||||||
|
var _hov = sc_profile_detail.hover;
|
||||||
|
|
||||||
if(report_selecting == noone) {
|
if(report_selecting == noone) {
|
||||||
if(run == 0) {
|
if(run == 0) {
|
||||||
|
@ -198,17 +253,91 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
var _tx = ui(8);
|
var _tx = ui(8);
|
||||||
var _ty = ui(8);
|
var _ty = _y + ui(8);
|
||||||
|
|
||||||
draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text_sub);
|
draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text_sub);
|
||||||
draw_text_add(_tx, _ty, $"{count_render_event} render events");
|
draw_text_add(_tx, _ty, $"{count_render_event} render events");
|
||||||
|
|
||||||
_ty += ui(20); _h += ui(20);
|
_ty += ui(20); _h += ui(20);
|
||||||
draw_text_add(_tx, _ty, $"Render time : {render_time / 1000}ms ({render_time})");
|
draw_text_add(_tx, _ty, $"Render time : {render_time / 1000}ms ({node_render_time} / {render_time})");
|
||||||
return 0;
|
|
||||||
|
_ty += ui(28); _h += ui(28);
|
||||||
|
|
||||||
|
var _a = 90;
|
||||||
|
var pr = ui(120);
|
||||||
|
var px = ui(16) + pr;
|
||||||
|
var py = max(ui(8), _ty) + pr;
|
||||||
|
|
||||||
|
var tx_amo = px + pr + ui(32);
|
||||||
|
var tx_name = tx_amo + ui(40);
|
||||||
|
var tx_time = tx_name + ui(200);
|
||||||
|
var tx_per = tx_time + ui(80);
|
||||||
|
var tx_pern = tx_per + ui(80);
|
||||||
|
var tx_rtim = tx_pern + ui(80);
|
||||||
|
|
||||||
|
draw_set_text(f_p3, fa_left, fa_top, COLORS._main_text_sub);
|
||||||
|
draw_text_add(tx_name, _ty, "type");
|
||||||
|
|
||||||
|
draw_set_halign(fa_right);
|
||||||
|
draw_text_add(tx_time + ui(80 - 8), _ty, "time (ns)");
|
||||||
|
draw_text_add(tx_per + ui(80 - 8), _ty, "%");
|
||||||
|
draw_text_add(tx_pern + ui(80 - 8), _ty, "time/node");
|
||||||
|
draw_text_add(tx_rtim + ui(80 - 8), _ty, "render");
|
||||||
|
|
||||||
|
if(_hov && point_in_rectangle(_m[0], _m[1], tx_name, _ty, tx_time, _ty + ui(19))) TOOLTIP = "Node type";
|
||||||
|
if(_hov && point_in_rectangle(_m[0], _m[1], tx_time, _ty, tx_per, _ty + ui(19))) TOOLTIP = "Total processing time (including graph propagation, debug data collection)";
|
||||||
|
if(_hov && point_in_rectangle(_m[0], _m[1], tx_per, _ty, tx_pern, _ty + ui(19))) TOOLTIP = "Total time as percentage";
|
||||||
|
if(_hov && point_in_rectangle(_m[0], _m[1], tx_pern, _ty, tx_rtim, _ty + ui(19))) TOOLTIP = "Total time per node";
|
||||||
|
if(_hov && point_in_rectangle(_m[0], _m[1], tx_rtim, _ty, tx_rtim + ui(80), _ty + ui(19))) TOOLTIP = "Processing time";
|
||||||
|
_ty += ui(20); _h += ui(20);
|
||||||
|
|
||||||
|
var _pie_selecting = noone;
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(node_render_time_type_sorted); i < n; i++ ) {
|
||||||
|
var _timn = node_render_time_type_sorted[i];
|
||||||
|
var _node = _timn[0];
|
||||||
|
var _time = _timn[1];
|
||||||
|
var _colr = _timn[2];
|
||||||
|
|
||||||
|
var _as = _time / node_render_time * 360;
|
||||||
|
var _at = _a + _as;
|
||||||
|
draw_set_color(_colr);
|
||||||
|
if(pie_selecting != noone) draw_set_alpha(0.25 + 0.75 * (_node == pie_selecting));
|
||||||
|
draw_circle_angle(px, py, pr, _a, _at);
|
||||||
|
draw_set_alpha(1);
|
||||||
|
_a = _at;
|
||||||
|
|
||||||
|
if(_ty >= -16 && _ty <= _hh + 16) {
|
||||||
|
var _amo = node_render_time_amo[$ _node];
|
||||||
|
var _rtm = node_render_rtim_type[$ _node];
|
||||||
|
|
||||||
|
draw_set_text(f_p3, fa_right, fa_top, COLORS._main_text_sub);
|
||||||
|
draw_text_add(tx_amo + ui(40 - 8), _ty, _amo);
|
||||||
|
|
||||||
|
draw_set_color(_node == pie_selecting? COLORS._main_text_accent : COLORS._main_text);
|
||||||
|
draw_set_halign(fa_left);
|
||||||
|
draw_text_add(tx_name, _ty, _node);
|
||||||
|
|
||||||
|
draw_set_halign(fa_right);
|
||||||
|
draw_text_add(tx_time + ui(80 - 8), _ty, _time);
|
||||||
|
draw_text_add(tx_per + ui(80 - 8), _ty, _time / node_render_time * 100);
|
||||||
|
draw_text_add(tx_pern + ui(80 - 8), _ty, round(_time / _amo));
|
||||||
|
draw_text_add(tx_rtim + ui(80 - 8), _ty, _rtm);
|
||||||
|
|
||||||
|
if(_hov && point_in_rectangle(_m[0], _m[1], tx_amo, _ty, _ww, _ty + ui(19)))
|
||||||
|
_pie_selecting = _node;
|
||||||
|
}
|
||||||
|
|
||||||
|
_ty += ui(20); _h += ui(20);
|
||||||
|
}
|
||||||
|
|
||||||
|
pie_selecting = _pie_selecting;
|
||||||
|
|
||||||
|
_ty += ui(20); _h += ui(20);
|
||||||
|
|
||||||
|
return _h;
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ww = sc_profile_detail.surface_w;
|
|
||||||
var _hovering = sc_profile_detail.hover;
|
var _hovering = sc_profile_detail.hover;
|
||||||
|
|
||||||
var _report = report_selecting;
|
var _report = report_selecting;
|
||||||
|
@ -475,7 +604,8 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
var _t = get_timer();
|
var _t = get_timer();
|
||||||
Render();
|
Render();
|
||||||
render_time = get_timer() - _t;
|
render_time = get_timer() - _t;
|
||||||
|
|
||||||
|
summarize();
|
||||||
PROFILER_STAT = 0;
|
PROFILER_STAT = 0;
|
||||||
run++;
|
run++;
|
||||||
}
|
}
|
||||||
|
@ -489,7 +619,8 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
var _t = get_timer();
|
var _t = get_timer();
|
||||||
Render(true);
|
Render(true);
|
||||||
render_time = get_timer() - _t;
|
render_time = get_timer() - _t;
|
||||||
|
|
||||||
|
summarize();
|
||||||
PROFILER_STAT = 0;
|
PROFILER_STAT = 0;
|
||||||
run++;
|
run++;
|
||||||
}
|
}
|
||||||
|
@ -548,13 +679,9 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
|
|
||||||
draw_sprite_stretched_ext(THEME.s_box_r2, 0, _px0, _py0, _pw, _ph, COLORS._main_icon_dark, 1);
|
draw_sprite_stretched_ext(THEME.s_box_r2, 0, _px0, _py0, _pw, _ph, COLORS._main_icon_dark, 1);
|
||||||
|
|
||||||
var _total_time = 0;
|
|
||||||
var _selected_time = 0;
|
var _selected_time = 0;
|
||||||
var _running_time = 0;
|
var _running_time = 0;
|
||||||
|
|
||||||
count_render_event = 0;
|
|
||||||
count_message_event = 0;
|
|
||||||
|
|
||||||
for( var i = 0, n = array_length(PROFILER_DATA); i < n; i++ ) {
|
for( var i = 0, n = array_length(PROFILER_DATA); i < n; i++ ) {
|
||||||
var _report = PROFILER_DATA[i];
|
var _report = PROFILER_DATA[i];
|
||||||
var _rtype = _report.type;
|
var _rtype = _report.type;
|
||||||
|
@ -562,19 +689,14 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
if(_report == report_selecting) _selected_time = _running_time;
|
if(_report == report_selecting) _selected_time = _running_time;
|
||||||
|
|
||||||
if(_rtype == "render") {
|
if(_rtype == "render") {
|
||||||
count_render_event++;
|
|
||||||
var _node = _report.node;
|
var _node = _report.node;
|
||||||
var _time = _report.time;
|
var _time = _report.time;
|
||||||
|
|
||||||
_total_time += _time;
|
|
||||||
_running_time += _time;
|
_running_time += _time;
|
||||||
|
|
||||||
} else if(_rtype == "message") {
|
|
||||||
count_message_event++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_total_time > 0) {
|
if(node_render_time > 0) {
|
||||||
var _running_time = 0;
|
var _running_time = 0;
|
||||||
|
|
||||||
if(mouse_release(mb_left)) render_drag = false;
|
if(mouse_release(mb_left)) render_drag = false;
|
||||||
|
@ -582,7 +704,7 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
for( var i = 0, n = array_length(PROFILER_DATA); i < n; i++ ) {
|
for( var i = 0, n = array_length(PROFILER_DATA); i < n; i++ ) {
|
||||||
var _report = PROFILER_DATA[i];
|
var _report = PROFILER_DATA[i];
|
||||||
var _rtype = _report.type;
|
var _rtype = _report.type;
|
||||||
var _rx = _px0 + (_running_time / _total_time) * _pw;
|
var _rx = _px0 + (_running_time / node_render_time) * _pw;
|
||||||
|
|
||||||
if(_rtype == "render") {
|
if(_rtype == "render") {
|
||||||
draw_set_color(COLORS._main_icon);
|
draw_set_color(COLORS._main_icon);
|
||||||
|
@ -593,7 +715,7 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
var _time = _report.time;
|
var _time = _report.time;
|
||||||
_running_time += _time;
|
_running_time += _time;
|
||||||
|
|
||||||
var _rx1 = _px0 + (_running_time / _total_time) * _pw;
|
var _rx1 = _px0 + (_running_time / node_render_time) * _pw;
|
||||||
if((pHOVER && point_in_rectangle(mx, my, _rx, _py0, _rx1, _py1) || (render_drag && mx >= _rx && mx < _rx1))) {
|
if((pHOVER && point_in_rectangle(mx, my, _rx, _py0, _rx1, _py1) || (render_drag && mx >= _rx && mx < _rx1))) {
|
||||||
TOOLTIP = $"Render {_report.node.getFullName()}";
|
TOOLTIP = $"Render {_report.node.getFullName()}";
|
||||||
|
|
||||||
|
@ -622,8 +744,8 @@ function Panel_Profile_Render() : PanelContent() constructor {
|
||||||
|
|
||||||
if(report_selecting != noone && report_selecting.type == "render") {
|
if(report_selecting != noone && report_selecting.type == "render") {
|
||||||
var _time = report_selecting.time;
|
var _time = report_selecting.time;
|
||||||
var _rx = _px0 + (_selected_time / _total_time) * _pw;
|
var _rx = _px0 + (_selected_time / node_render_time) * _pw;
|
||||||
var _rw = (_time / _total_time) * _pw;
|
var _rw = (_time / node_render_time) * _pw;
|
||||||
|
|
||||||
draw_sprite_stretched_ext(THEME.s_box_r2, 0, _rx, _py0, _rw, _ph, COLORS._main_icon, 1);
|
draw_sprite_stretched_ext(THEME.s_box_r2, 0, _rx, _py0, _rw, _ph, COLORS._main_icon, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,9 @@
|
||||||
nodeMap = ds_map_create();
|
nodeMap = ds_map_create();
|
||||||
nodeNameMap = ds_map_create();
|
nodeNameMap = ds_map_create();
|
||||||
|
|
||||||
|
useRenderList = false;
|
||||||
|
renderList = [];
|
||||||
|
|
||||||
pathInputs = [];
|
pathInputs = [];
|
||||||
|
|
||||||
composer = noone;
|
composer = noone;
|
||||||
|
|
|
@ -39,10 +39,13 @@ function NodeTopoSort() {
|
||||||
|
|
||||||
array_foreach(PROJECT.allNodes, function(_node) {
|
array_foreach(PROJECT.allNodes, function(_node) {
|
||||||
_node.clearTopoSorted();
|
_node.clearTopoSorted();
|
||||||
|
if(is(_node, Node_Collection)) _node.refreshNodes();
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
PROJECT.nodeTopo = [];
|
PROJECT.nodeTopo = [];
|
||||||
|
PROJECT.renderList = [];
|
||||||
|
PROJECT.useRenderList = true;
|
||||||
__topoSort(PROJECT.nodeTopo, PROJECT.nodes);
|
__topoSort(PROJECT.nodeTopo, PROJECT.nodes);
|
||||||
|
|
||||||
LOG_IF(global.FLAG.render == 1, $"+++++++ Topo Sort Completed: {array_length(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 +++++++");
|
||||||
|
@ -178,6 +181,20 @@ function Render(partial = false, runAction = false) {
|
||||||
|
|
||||||
// global.getvalue_hit = 0;
|
// global.getvalue_hit = 0;
|
||||||
|
|
||||||
|
// if(PROJECT.useRenderList && !array_empty(PROJECT.renderList)) {
|
||||||
|
// for( var i = 0, n = array_length(PROJECT.renderList); i < n; i++ ) {
|
||||||
|
|
||||||
|
// var render_pt = get_timer();
|
||||||
|
// var rendering = PROJECT.renderList[i];
|
||||||
|
|
||||||
|
// rendering.doUpdate();
|
||||||
|
// rendering.getNextNodes(true);
|
||||||
|
|
||||||
|
// if(PROFILER_STAT) rendering.summarizeReport(render_pt);
|
||||||
|
// }
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var t = get_timer();
|
var t = get_timer();
|
||||||
var t1 = get_timer();
|
var t1 = get_timer();
|
||||||
|
@ -205,6 +222,7 @@ function Render(partial = false, runAction = false) {
|
||||||
for( var i = 0, n = array_length(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;
|
||||||
|
_node.__nextNodes = noone;
|
||||||
}
|
}
|
||||||
|
|
||||||
for( var i = 0, n = array_length(PROJECT.nodeTopo); i < n; i++ ) {
|
for( var i = 0, n = array_length(PROJECT.nodeTopo); i < n; i++ ) {
|
||||||
|
@ -226,38 +244,42 @@ function Render(partial = false, runAction = false) {
|
||||||
// render forward
|
// render forward
|
||||||
while(!RENDER_QUEUE.empty()) {
|
while(!RENDER_QUEUE.empty()) {
|
||||||
LOG_BLOCK_START();
|
LOG_BLOCK_START();
|
||||||
LOG_IF(global.FLAG.render == 1, $"➤➤➤➤➤➤ CURRENT RENDER QUEUE {RENDER_QUEUE} [{RENDER_QUEUE.size()}] ");
|
// LOG_IF(global.FLAG.render == 1, $"➤➤➤➤➤➤ CURRENT RENDER QUEUE {RENDER_QUEUE} [{RENDER_QUEUE.size()}] ");
|
||||||
|
|
||||||
rendering = RENDER_QUEUE.dequeue();
|
rendering = RENDER_QUEUE.dequeue();
|
||||||
renderable = rendering.isRenderable();
|
renderable = rendering.isRenderable();
|
||||||
|
|
||||||
LOG_IF(global.FLAG.render == 1, $"Rendering {rendering.internalName} ({rendering.display_name}) : {renderable? "Update" : "Pass"} ({rendering.rendered})");
|
if(is(rendering, Node_Iterate_Sort_Inline))
|
||||||
|
PROJECT.useRenderList = false;
|
||||||
|
// LOG_IF(global.FLAG.render == 1, $"Rendering {rendering.internalName} ({rendering.display_name}) : {renderable? "Update" : "Pass"} ({rendering.rendered})");
|
||||||
|
|
||||||
if(renderable) {
|
if(renderable) {
|
||||||
var _render_pt = get_timer();
|
var render_pt = get_timer();
|
||||||
rendering.doUpdate();
|
rendering.doUpdate();
|
||||||
_render_time += get_timer() - _render_pt;
|
array_push(PROJECT.renderList, rendering);
|
||||||
|
_render_time += get_timer() - render_pt;
|
||||||
|
|
||||||
var nextNodes = rendering.getNextNodes();
|
var nextNodes = rendering.getNextNodes();
|
||||||
|
|
||||||
for( var i = 0, n = array_length(nextNodes); i < n; i++ ) {
|
for( var i = 0, n = array_length(nextNodes); i < n; i++ ) {
|
||||||
var nextNode = nextNodes[i];
|
var nextNode = nextNodes[i];
|
||||||
|
|
||||||
if(!is_instanceof(nextNode, __Node_Base)) continue;
|
if(!is(nextNode, __Node_Base)) continue;
|
||||||
if(!nextNode.isRenderable()) continue;
|
if(!nextNode.isRenderable()) continue;
|
||||||
|
|
||||||
LOG_IF(global.FLAG.render == 1, $"→→ Push {nextNode.internalName} to queue.");
|
// LOG_IF(global.FLAG.render == 1, $"→→ Push {nextNode.internalName} to queue.");
|
||||||
RENDER_QUEUE.enqueue(nextNode);
|
RENDER_QUEUE.enqueue(nextNode);
|
||||||
|
|
||||||
if(PROFILER_STAT) array_push(rendering.render_report_latest.nextn, nextNode);
|
if(PROFILER_STAT) array_push(rendering.nextn, nextNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(runAction && rendering.hasInspector1Update())
|
// if(runAction && rendering.hasInspector1Update()) rendering.inspector1Update();
|
||||||
rendering.inspector1Update();
|
|
||||||
|
if(PROFILER_STAT) rendering.summarizeReport(render_pt);
|
||||||
|
|
||||||
} else if(rendering.force_requeue)
|
} else if(rendering.force_requeue)
|
||||||
RENDER_QUEUE.enqueue(rendering);
|
RENDER_QUEUE.enqueue(rendering);
|
||||||
|
|
||||||
if(PROFILER_STAT) rendering.summarizeReport();
|
|
||||||
|
|
||||||
LOG_BLOCK_END();
|
LOG_BLOCK_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
39
scripts/tooltip_recent_files/tooltip_recent_files.gml
Normal file
39
scripts/tooltip_recent_files/tooltip_recent_files.gml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
function tooltipRecentFile(path, _x, _y, _w, _h) constructor {
|
||||||
|
self.path = path;
|
||||||
|
x = _x;
|
||||||
|
y = _y;
|
||||||
|
w = _w;
|
||||||
|
h = _h;
|
||||||
|
|
||||||
|
static drawTooltip = function() {
|
||||||
|
var fname = filename_name_only(path);
|
||||||
|
var fdir = filename_dir(path);
|
||||||
|
|
||||||
|
draw_set_font(f_p0b);
|
||||||
|
var _w1 = string_width(fname);
|
||||||
|
var _h1 = string_height(fname);
|
||||||
|
|
||||||
|
draw_set_font(f_p2);
|
||||||
|
var _w2 = string_width(fdir);
|
||||||
|
var _h2 = string_height(fdir);
|
||||||
|
|
||||||
|
var tw = max(w, _w1, _w2);
|
||||||
|
var th = _h1 + ui(2) + _h2;
|
||||||
|
|
||||||
|
var mx = x;
|
||||||
|
var my = y;
|
||||||
|
|
||||||
|
draw_sprite_stretched(THEME.ui_panel_bg, 1, mx, my, tw + ui(24), th + ui(14));
|
||||||
|
draw_sprite_stretched_ext(THEME.ui_panel, 1, mx, my, tw + ui(24), th + ui(14), COLORS._main_accent, 1);
|
||||||
|
|
||||||
|
var tx = mx + ui(12);
|
||||||
|
var ty = my + ui(6);
|
||||||
|
|
||||||
|
draw_set_text(f_p0b, fa_left, fa_top, COLORS._main_text_inner);
|
||||||
|
draw_text(tx, ty, fname);
|
||||||
|
|
||||||
|
ty += _h1 + ui(2);
|
||||||
|
draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text_sub);
|
||||||
|
draw_text(tx, ty, fdir);
|
||||||
|
}
|
||||||
|
}
|
13
scripts/tooltip_recent_files/tooltip_recent_files.yy
Normal file
13
scripts/tooltip_recent_files/tooltip_recent_files.yy
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"$GMScript":"v1",
|
||||||
|
"%Name":"tooltip_recent_files",
|
||||||
|
"isCompatibility":false,
|
||||||
|
"isDnD":false,
|
||||||
|
"name":"tooltip_recent_files",
|
||||||
|
"parent":{
|
||||||
|
"name":"tooltip",
|
||||||
|
"path":"folders/functions/tooltip.yy",
|
||||||
|
},
|
||||||
|
"resourceType":"GMScript",
|
||||||
|
"resourceVersion":"2.0",
|
||||||
|
}
|
Loading…
Reference in a new issue