mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-01-13 15:56:35 +01:00
Keyframe map, processor cache
This commit is contained in:
parent
c5a6bb3aee
commit
7fb8cacd22
19 changed files with 135 additions and 59 deletions
Binary file not shown.
|
@ -9,7 +9,11 @@ if(PROJECT.active && !PROJECT.safeMode) { #region
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(PANEL_MAIN != 0) PANEL_MAIN.step();
|
if(PANEL_MAIN != 0) PANEL_MAIN.step();
|
||||||
array_foreach(PROJECT.nodeArray, function(_node) { if(!_node.active) return; _node.triggerCheck(); _node.step(); });
|
array_foreach(PROJECT.nodeArray, function(_node) {
|
||||||
|
if(!_node.active) return;
|
||||||
|
_node.triggerCheck();
|
||||||
|
_node.step();
|
||||||
|
});
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
noti_warning("Step error: " + exception_print(e));
|
noti_warning("Step error: " + exception_print(e));
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,6 +197,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
passiveDynamic = false;
|
passiveDynamic = false;
|
||||||
topoSorted = false;
|
topoSorted = false;
|
||||||
temp_surface = [];
|
temp_surface = [];
|
||||||
|
|
||||||
|
is_group_io = false;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ---- timeline ----
|
#region ---- timeline ----
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function Node_Feedback_Input(_x, _y, _group = noone) : Node_Group_Input(_x, _y, _group) constructor {
|
function Node_Feedback_Input(_x, _y, _group = noone) : Node_Group_Input(_x, _y, _group) constructor {
|
||||||
name = "Feedback Input";
|
name = "Feedback Input";
|
||||||
color = COLORS.node_blend_feedback;
|
color = COLORS.node_blend_feedback;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
w = 96;
|
w = 96;
|
||||||
h = 32 + 24 * 2;
|
h = 32 + 24 * 2;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function Node_Feedback_Output(_x, _y, _group = noone) : Node_Group_Output(_x, _y, _group) constructor {
|
function Node_Feedback_Output(_x, _y, _group = noone) : Node_Group_Output(_x, _y, _group) constructor {
|
||||||
name = "Feedback Output";
|
name = "Feedback Output";
|
||||||
color = COLORS.node_blend_feedback;
|
color = COLORS.node_blend_feedback;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
w = 96;
|
w = 96;
|
||||||
h = 32 + 24 * 2;
|
h = 32 + 24 * 2;
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
name = "Group Input";
|
name = "Group Input";
|
||||||
destroy_when_upgroup = true;
|
|
||||||
color = COLORS.node_blend_collection;
|
color = COLORS.node_blend_collection;
|
||||||
previewable = false;
|
previewable = false;
|
||||||
|
is_group_io = true;
|
||||||
|
destroy_when_upgroup = true;
|
||||||
|
|
||||||
inParent = undefined;
|
inParent = undefined;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ function Node_Group_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
name = "Group Output";
|
name = "Group Output";
|
||||||
color = COLORS.node_blend_collection;
|
color = COLORS.node_blend_collection;
|
||||||
previewable = false;
|
previewable = false;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
destroy_when_upgroup = true;
|
destroy_when_upgroup = true;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function Node_Iterator_Each_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
function Node_Iterator_Each_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
name = "Loop Input";
|
name = "Loop Input";
|
||||||
color = COLORS.node_blend_loop;
|
color = COLORS.node_blend_loop;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
manual_deletable = false;
|
manual_deletable = false;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function Node_Iterator_Each_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
function Node_Iterator_Each_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
name = "Loop Output";
|
name = "Loop Output";
|
||||||
color = COLORS.node_blend_loop;
|
color = COLORS.node_blend_loop;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
manual_deletable = false;
|
manual_deletable = false;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function Node_Iterator_Filter_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
function Node_Iterator_Filter_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
name = "Value";
|
name = "Value";
|
||||||
color = COLORS.node_blend_loop;
|
color = COLORS.node_blend_loop;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
manual_deletable = false;
|
manual_deletable = false;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function Node_Iterator_Filter_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
function Node_Iterator_Filter_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
name = "Filter Output";
|
name = "Filter Output";
|
||||||
color = COLORS.node_blend_loop;
|
color = COLORS.node_blend_loop;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
manual_deletable = false;
|
manual_deletable = false;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function Node_Iterator_Input(_x, _y, _group = noone) : Node_Group_Input(_x, _y, _group) constructor {
|
function Node_Iterator_Input(_x, _y, _group = noone) : Node_Group_Input(_x, _y, _group) constructor {
|
||||||
name = "Loop Input";
|
name = "Loop Input";
|
||||||
color = COLORS.node_blend_loop;
|
color = COLORS.node_blend_loop;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
local_output = noone;
|
local_output = noone;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function Node_Iterator_Output(_x, _y, _group = noone) : Node_Group_Output(_x, _y, _group) constructor {
|
function Node_Iterator_Output(_x, _y, _group = noone) : Node_Group_Output(_x, _y, _group) constructor {
|
||||||
name = "Loop Output";
|
name = "Loop Output";
|
||||||
color = COLORS.node_blend_loop;
|
color = COLORS.node_blend_loop;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
w = 96;
|
w = 96;
|
||||||
h = 32 + 24 * 2;
|
h = 32 + 24 * 2;
|
||||||
|
|
|
@ -75,11 +75,16 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
index = 0;
|
index = 0;
|
||||||
prop = _prop;
|
prop = _prop;
|
||||||
y = 0;
|
y = 0;
|
||||||
|
key_map = array_create(TOTAL_FRAMES);
|
||||||
|
|
||||||
animate_frames = [];
|
animate_frames = [];
|
||||||
|
|
||||||
if(_prop.type != VALUE_TYPE.trigger)
|
if(_prop.type != VALUE_TYPE.trigger)
|
||||||
ds_list_add(values, new valueKey(0, _val, self));
|
ds_list_add(values, new valueKey(0, _val, self));
|
||||||
|
|
||||||
|
process_cache = {};
|
||||||
|
process_cache_type = -1;
|
||||||
|
process_cache_disp = -1;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
static refreshAnimation = function() { #region
|
static refreshAnimation = function() { #region
|
||||||
|
@ -106,6 +111,32 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
if(_fr) array_fill(animate_frames, _fr.time, TOTAL_FRAMES, 0);
|
if(_fr) array_fill(animate_frames, _fr.time, TOTAL_FRAMES, 0);
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
static updateKeyMap = function() { #region
|
||||||
|
if(!prop.is_anim && !LOADING && !APPENDING) return;
|
||||||
|
|
||||||
|
if(array_length(key_map) != TOTAL_FRAMES)
|
||||||
|
array_resize(key_map, TOTAL_FRAMES);
|
||||||
|
|
||||||
|
if(ds_list_size(values) < 2) {
|
||||||
|
array_fill(key_map, 0, TOTAL_FRAMES, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//print($"Update key map {prop.node.name} - {prop.name}");
|
||||||
|
|
||||||
|
var _firstKey = values[| 0].time;
|
||||||
|
array_fill(key_map, 0, _firstKey, -1);
|
||||||
|
var _keyIndex = _firstKey;
|
||||||
|
|
||||||
|
for( var i = 1, n = ds_list_size(values); i < n; i++ ) {
|
||||||
|
var _k1 = values[| i].time;
|
||||||
|
array_fill(key_map, _keyIndex, _k1, i - 1);
|
||||||
|
_keyIndex = _k1;
|
||||||
|
}
|
||||||
|
|
||||||
|
array_fill(key_map, _keyIndex, TOTAL_FRAMES, 999_999);
|
||||||
|
} #endregion
|
||||||
|
|
||||||
static interpolate = function(from, to, rat) { #region
|
static interpolate = function(from, to, rat) { #region
|
||||||
if(prop.type == VALUE_TYPE.boolean)
|
if(prop.type == VALUE_TYPE.boolean)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -207,12 +238,15 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
if(!prop.is_anim)
|
if(!prop.is_anim)
|
||||||
return values[| 0].value;
|
return values[| 0].value;
|
||||||
|
|
||||||
for(var i = 0; i < ds_list_size(values); i++) { //Find trigger
|
if(array_length(key_map) != TOTAL_FRAMES) updateKeyMap();
|
||||||
var _key = values[| i];
|
|
||||||
if(_key.time == _time)
|
var _keyIndex = key_map[_time];
|
||||||
return _key.value;
|
|
||||||
}
|
if(_keyIndex == -1 || _keyIndex == 999_999)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
var _key = values[| _keyIndex];
|
||||||
|
return _key.time == _time? _key.value : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ds_list_size(values) == 0) return processTypeDefault();
|
if(ds_list_size(values) == 0) return processTypeDefault();
|
||||||
|
@ -220,12 +254,13 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
|
|
||||||
if(prop.type == VALUE_TYPE.path) return processType(values[| 0].value);
|
if(prop.type == VALUE_TYPE.path) return processType(values[| 0].value);
|
||||||
if(!prop.is_anim) return processType(values[| 0].value);
|
if(!prop.is_anim) return processType(values[| 0].value);
|
||||||
|
if(array_length(key_map) != TOTAL_FRAMES) updateKeyMap();
|
||||||
|
|
||||||
var _time_first = prop.loop_range == -1? values[| 0].time : values[| ds_list_size(values) - 1 - prop.loop_range].time;
|
var _time_first = prop.loop_range == -1? values[| 0].time : values[| ds_list_size(values) - 1 - prop.loop_range].time;
|
||||||
var _time_last = values[| ds_list_size(values) - 1].time;
|
var _time_last = values[| ds_list_size(values) - 1].time;
|
||||||
var _time_dura = _time_last - _time_first;
|
var _time_dura = _time_last - _time_first;
|
||||||
|
|
||||||
if(_time > _time_last) { //loop
|
if(_time > _time_last) { #region //loop
|
||||||
switch(prop.on_end) {
|
switch(prop.on_end) {
|
||||||
case KEYFRAME_END.loop :
|
case KEYFRAME_END.loop :
|
||||||
_time = _time_first + safe_mod(_time - _time_last, _time_dura + 1);
|
_time = _time_first + safe_mod(_time - _time_last, _time_dura + 1);
|
||||||
|
@ -238,9 +273,12 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
_time = _time_first + _time_dura * 2 - time_in_loop;
|
_time = _time_first + _time_dura * 2 - time_in_loop;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
if(_time < values[| 0].time) { //Wrap begin
|
var _keyIndex = key_map[_time];
|
||||||
|
//print(_keyIndex);
|
||||||
|
|
||||||
|
if(_keyIndex == -1) { #region Before first key
|
||||||
if(prop.on_end == KEYFRAME_END.wrap) {
|
if(prop.on_end == KEYFRAME_END.wrap) {
|
||||||
var from = values[| ds_list_size(values) - 1];
|
var from = values[| ds_list_size(values) - 1];
|
||||||
var to = values[| 0];
|
var to = values[| 0];
|
||||||
|
@ -258,21 +296,10 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
return processType(values[| 0].value); //First frame
|
return processType(values[| 0].value); //First frame
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
for(var i = 0; i < ds_list_size(values); i++) { //In between
|
if(_keyIndex == 999_999) { #region After last key
|
||||||
var _key = values[| i];
|
if(_keyIndex == KEYFRAME_END.wrap) {
|
||||||
if(_key.time <= _time) continue;
|
|
||||||
|
|
||||||
var rat = (_time - values[| i - 1].time) / (values[| i].time - values[| i - 1].time);
|
|
||||||
var from = values[| i - 1];
|
|
||||||
var to = values[| i];
|
|
||||||
var _lrp = interpolate(from, to, rat);
|
|
||||||
|
|
||||||
return lerpValue(from, to, _lrp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(prop.on_end == KEYFRAME_END.wrap) { //Wrap end
|
|
||||||
var from = values[| ds_list_size(values) - 1];
|
var from = values[| ds_list_size(values) - 1];
|
||||||
var to = values[| 0];
|
var to = values[| 0];
|
||||||
var prog = _time - from.time;
|
var prog = _time - from.time;
|
||||||
|
@ -284,7 +311,17 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
return lerpValue(from, to, _lrp);
|
return lerpValue(from, to, _lrp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return processType(values[| ds_list_size(values) - 1].value); //Last frame
|
return processType(values[| ds_list_size(values) - 1].value); //First frame
|
||||||
|
} #endregion
|
||||||
|
|
||||||
|
#region In between
|
||||||
|
var from = values[| _keyIndex];
|
||||||
|
var to = values[| _keyIndex + 1];
|
||||||
|
var rat = (_time - from.time) / (to.time - from.time);
|
||||||
|
var _lrp = interpolate(from, to, rat);
|
||||||
|
|
||||||
|
return lerpValue(from, to, _lrp);
|
||||||
|
#endregion
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static processTypeDefault = function() { #region
|
static processTypeDefault = function() { #region
|
||||||
|
@ -292,13 +329,27 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
return 0;
|
return 0;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
static clearProcessCache = function(_val) { process_cache = {}; }
|
||||||
|
|
||||||
static processType = function(_val) { #region
|
static processType = function(_val) { #region
|
||||||
|
if(process_cache_type != prop.type || process_cache_disp != prop.display_type) {
|
||||||
|
clearProcessCache();
|
||||||
|
process_cache_type = prop.type;
|
||||||
|
process_cache_disp = prop.display_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(struct_has(process_cache, _val))
|
||||||
|
return process_cache[$ _val];
|
||||||
|
|
||||||
|
var _res = _val;
|
||||||
if(!sep_axis && typeArray(prop.display_type) && is_array(_val)) {
|
if(!sep_axis && typeArray(prop.display_type) && is_array(_val)) {
|
||||||
for(var i = 0; i < array_length(_val); i++)
|
for(var i = 0; i < array_length(_val); i++)
|
||||||
_val[i] = processValue(_val[i]);
|
_res[i] = processValue(_val[i]);
|
||||||
return _val;
|
} else
|
||||||
}
|
_res = processValue(_val);
|
||||||
return processValue(_val);
|
|
||||||
|
process_cache[$ _val] = _res;
|
||||||
|
return _res;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static processValue = function(_val) { #region
|
static processValue = function(_val) { #region
|
||||||
|
@ -348,6 +399,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
values[| i] = _key;
|
values[| i] = _key;
|
||||||
|
updateKeyMap();
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,6 +413,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
}, { key : _key, time : _prevTime });
|
}, { key : _key, time : _prevTime });
|
||||||
|
|
||||||
ds_list_insert(values, i, _key);
|
ds_list_insert(values, i, _key);
|
||||||
|
if(_replace) updateKeyMap();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,6 +424,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
}, { key : _key, time : _prevTime });
|
}, { key : _key, time : _prevTime });
|
||||||
|
|
||||||
ds_list_add(values, _key);
|
ds_list_add(values, _key);
|
||||||
|
if(_replace) updateKeyMap();
|
||||||
return 1;
|
return 1;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
@ -378,6 +432,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
if(prop.type == VALUE_TYPE.trigger) {
|
if(prop.type == VALUE_TYPE.trigger) {
|
||||||
if(!prop.is_anim) {
|
if(!prop.is_anim) {
|
||||||
values[| 0] = new valueKey(0, _val, self);
|
values[| 0] = new valueKey(0, _val, self);
|
||||||
|
updateKeyMap();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,11 +445,13 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
return false;
|
return false;
|
||||||
} else if(_key.time > _time) {
|
} else if(_key.time > _time) {
|
||||||
ds_list_insert(values, i, new valueKey(_time, _val, self));
|
ds_list_insert(values, i, new valueKey(_time, _val, self));
|
||||||
|
updateKeyMap();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ds_list_add(values, new valueKey(_time, _val, self));
|
ds_list_add(values, new valueKey(_time, _val, self));
|
||||||
|
updateKeyMap();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,6 +487,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
var k = new valueKey(_time, _val, self, ease_in, ease_out);
|
var k = new valueKey(_time, _val, self, ease_in, ease_out);
|
||||||
ds_list_insert(values, i, k);
|
ds_list_insert(values, i, k);
|
||||||
if(_record) recordAction(ACTION_TYPE.list_insert, values, [k, i, $"add {prop.name} keyframe" ]);
|
if(_record) recordAction(ACTION_TYPE.list_insert, values, [k, i, $"add {prop.name} keyframe" ]);
|
||||||
|
updateKeyMap();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -437,6 +495,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
var k = new valueKey(_time, _val, self, ease_in, ease_out);
|
var k = new valueKey(_time, _val, self, ease_in, ease_out);
|
||||||
if(_record) recordAction(ACTION_TYPE.list_insert, values, [ k, ds_list_size(values), $"add {prop.name} keyframe" ]);
|
if(_record) recordAction(ACTION_TYPE.list_insert, values, [ k, ds_list_size(values), $"add {prop.name} keyframe" ]);
|
||||||
ds_list_add(values, k);
|
ds_list_add(values, k);
|
||||||
|
updateKeyMap();
|
||||||
return true;
|
return true;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
@ -445,6 +504,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
ds_list_remove(values, key);
|
ds_list_remove(values, key);
|
||||||
else
|
else
|
||||||
prop.is_anim = false;
|
prop.is_anim = false;
|
||||||
|
updateKeyMap();
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static serialize = function(scale = false) { #region
|
static serialize = function(scale = false) { #region
|
||||||
|
@ -506,6 +566,8 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
var grad = new gradientObject();
|
var grad = new gradientObject();
|
||||||
grad.keys = _val;
|
grad.keys = _val;
|
||||||
ds_list_add(values, new valueKey(0, grad, self));
|
ds_list_add(values, new valueKey(0, grad, self));
|
||||||
|
|
||||||
|
updateKeyMap();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -554,6 +616,8 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
vk.ease_y_lock = ease_y_lock;
|
vk.ease_y_lock = ease_y_lock;
|
||||||
ds_list_add(values, vk);
|
ds_list_add(values, vk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateKeyMap();
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static cleanUp = function() { #region
|
static cleanUp = function() { #region
|
||||||
|
|
|
@ -2,6 +2,7 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
||||||
name = "Tunnel In";
|
name = "Tunnel In";
|
||||||
previewable = false;
|
previewable = false;
|
||||||
color = COLORS.node_blend_tunnel;
|
color = COLORS.node_blend_tunnel;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
w = 96;
|
w = 96;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
name = "Tunnel Out";
|
name = "Tunnel Out";
|
||||||
previewable = false;
|
|
||||||
color = COLORS.node_blend_tunnel;
|
color = COLORS.node_blend_tunnel;
|
||||||
|
previewable = false;
|
||||||
|
is_group_io = true;
|
||||||
|
|
||||||
w = 96;
|
w = 96;
|
||||||
|
|
||||||
|
|
|
@ -1638,21 +1638,25 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
if(ds_list_empty(animator.values))
|
if(ds_list_empty(animator.values))
|
||||||
ds_list_add(animator.values, new valueKey(CURRENT_FRAME, animator.getValue(), animator));
|
ds_list_add(animator.values, new valueKey(CURRENT_FRAME, animator.getValue(), animator));
|
||||||
animator.values[| 0].time = CURRENT_FRAME;
|
animator.values[| 0].time = CURRENT_FRAME;
|
||||||
|
animator.updateKeyMap();
|
||||||
|
|
||||||
for( var i = 0, n = array_length(animators); i < n; i++ ) {
|
for( var i = 0, n = array_length(animators); i < n; i++ ) {
|
||||||
if(ds_list_empty(animators[i].values))
|
if(ds_list_empty(animators[i].values))
|
||||||
ds_list_add(animators[i].values, new valueKey(CURRENT_FRAME, animators[i].getValue(), animators[i]));
|
ds_list_add(animators[i].values, new valueKey(CURRENT_FRAME, animators[i].getValue(), animators[i]));
|
||||||
animators[i].values[| 0].time = CURRENT_FRAME;
|
animators[i].values[| 0].time = CURRENT_FRAME;
|
||||||
|
animators[i].updateKeyMap();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var _val = animator.getValue();
|
var _val = animator.getValue();
|
||||||
ds_list_clear(animator.values);
|
ds_list_clear(animator.values);
|
||||||
animator.values[| 0] = new valueKey(0, _val, animator);
|
animator.values[| 0] = new valueKey(0, _val, animator);
|
||||||
|
animator.updateKeyMap();
|
||||||
|
|
||||||
for( var i = 0, n = array_length(animators); i < n; i++ ) {
|
for( var i = 0, n = array_length(animators); i < n; i++ ) {
|
||||||
var _val = animators[i].getValue();
|
var _val = animators[i].getValue();
|
||||||
ds_list_clear(animators[i].values);
|
ds_list_clear(animators[i].values);
|
||||||
animators[i].values[| 0] = new valueKey(0, _val, animators[i]);
|
animators[i].values[| 0] = new valueKey(0, _val, animators[i]);
|
||||||
|
animators[i].updateKeyMap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ function Node_Wiggler(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
|
|
||||||
var step = TOTAL_FRAMES / 64;
|
var step = TOTAL_FRAMES / 64;
|
||||||
for( var i = 0; i < 64; i++ )
|
for( var i = 0; i < 64; i++ )
|
||||||
random_value[i] = getWiggle(ran[0], ran[1], TOTAL_FRAMES / fre, step * i, sed, 0, TOTAL_FRAMES);
|
random_value[i] = getWiggle(array_safe_get(ran, 0), array_safe_get(ran, 1), TOTAL_FRAMES / fre, step * i, sed, 0, TOTAL_FRAMES);
|
||||||
}
|
}
|
||||||
|
|
||||||
static processData = function(_output, _data, _output_index, _array_index = 0) {
|
static processData = function(_output, _data, _output_index, _array_index = 0) {
|
||||||
|
@ -41,7 +41,7 @@ function Node_Wiggler(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
var sed = _data[2];
|
var sed = _data[2];
|
||||||
var time = CURRENT_FRAME;
|
var time = CURRENT_FRAME;
|
||||||
|
|
||||||
return getWiggle(ran[0], ran[1], TOTAL_FRAMES / fre, time, sed, 0, TOTAL_FRAMES);
|
return getWiggle(array_safe_get(ran, 0), array_safe_get(ran, 1), TOTAL_FRAMES / fre, time, sed, 0, TOTAL_FRAMES);
|
||||||
}
|
}
|
||||||
|
|
||||||
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
|
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
|
||||||
|
@ -52,6 +52,8 @@ function Node_Wiggler(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
var time = CURRENT_FRAME;
|
var time = CURRENT_FRAME;
|
||||||
var total_time = TOTAL_FRAMES;
|
var total_time = TOTAL_FRAMES;
|
||||||
|
|
||||||
|
if(!is_array(ran)) return;
|
||||||
|
|
||||||
switch(disp) {
|
switch(disp) {
|
||||||
case 0 :
|
case 0 :
|
||||||
w = 96;
|
w = 96;
|
||||||
|
|
|
@ -10,15 +10,6 @@ enum RENDER_TYPE {
|
||||||
global.FLAG.render = 0;
|
global.FLAG.render = 0;
|
||||||
global.FLAG.renderTime = false;
|
global.FLAG.renderTime = false;
|
||||||
|
|
||||||
global.group_io = [
|
|
||||||
"Node_Group_Input", "Node_Group_Output",
|
|
||||||
"Node_Feedback_Input", "Node_Feedback_Output",
|
|
||||||
"Node_Iterator_Input", "Node_Iterator_Output",
|
|
||||||
"Node_Iterator_Each_Input", "Node_Iterator_Each_Output",
|
|
||||||
"Node_Iterator_Filter_Input", "Node_Iterator_Filter_Output",
|
|
||||||
"Node_Tunnel_In", "Node_Tunnel_Out"
|
|
||||||
];
|
|
||||||
|
|
||||||
#macro RENDER_ALL_REORDER UPDATE_RENDER_ORDER = true; UPDATE |= RENDER_TYPE.full;
|
#macro RENDER_ALL_REORDER UPDATE_RENDER_ORDER = true; UPDATE |= RENDER_TYPE.full;
|
||||||
#macro RENDER_ALL UPDATE |= RENDER_TYPE.full;
|
#macro RENDER_ALL UPDATE |= RENDER_TYPE.full;
|
||||||
#macro RENDER_PARTIAL UPDATE |= RENDER_TYPE.partial;
|
#macro RENDER_PARTIAL UPDATE |= RENDER_TYPE.partial;
|
||||||
|
@ -133,7 +124,7 @@ function __nodeIsRenderLeaf(_node) { #region
|
||||||
if(is_undefined(_node)) { LOG_IF(global.FLAG.render == 1, $"Skip undefiend [{_node}]"); return false; }
|
if(is_undefined(_node)) { LOG_IF(global.FLAG.render == 1, $"Skip undefiend [{_node}]"); return false; }
|
||||||
if(!is_instanceof(_node, Node)) { LOG_IF(global.FLAG.render == 1, $"Skip non-node [{_node}]"); return false; }
|
if(!is_instanceof(_node, Node)) { LOG_IF(global.FLAG.render == 1, $"Skip non-node [{_node}]"); return false; }
|
||||||
|
|
||||||
if(array_exists(global.group_io, instanceof(_node))) { LOG_IF(global.FLAG.render == 1, $"Skip group IO [{_node.internalName}]"); return false; }
|
if(_node.is_group_io) { LOG_IF(global.FLAG.render == 1, $"Skip group IO [{_node.internalName}]"); return false; }
|
||||||
|
|
||||||
if(!_node.active) { LOG_IF(global.FLAG.render == 1, $"Skip inactive [{_node.internalName}]"); return false; }
|
if(!_node.active) { LOG_IF(global.FLAG.render == 1, $"Skip inactive [{_node.internalName}]"); return false; }
|
||||||
if(!_node.isRenderActive()) { LOG_IF(global.FLAG.render == 1, $"Skip render inactive [{_node.internalName}]"); return false; }
|
if(!_node.isRenderActive()) { LOG_IF(global.FLAG.render == 1, $"Skip render inactive [{_node.internalName}]"); return false; }
|
||||||
|
@ -282,10 +273,7 @@ function RenderList(list, skipInLoop = true) { #region
|
||||||
if(!is_instanceof(_node, Node)) { LOG_IF(global.FLAG.render == 1, $"Skip non-node {_node}"); continue; }
|
if(!is_instanceof(_node, Node)) { LOG_IF(global.FLAG.render == 1, $"Skip non-node {_node}"); continue; }
|
||||||
_node.render_time = 0;
|
_node.render_time = 0;
|
||||||
|
|
||||||
if(array_exists(global.group_io, instanceof(_node))) {
|
if(_node.is_group_io) { LOG_IF(global.FLAG.render == 1, $"Skip group IO {_node.internalName}"); continue; }
|
||||||
LOG_IF(global.FLAG.render == 1, $"Skip group IO {_node.internalName}");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!_node.active) { LOG_IF(global.FLAG.render == 1, $"Skip inactive {_node.internalName}"); continue; }
|
if(!_node.active) { LOG_IF(global.FLAG.render == 1, $"Skip inactive {_node.internalName}"); continue; }
|
||||||
if(!_node.isRenderActive()) { LOG_IF(global.FLAG.render == 1, $"Skip non-renderActive {_node.internalName}"); continue; }
|
if(!_node.isRenderActive()) { LOG_IF(global.FLAG.render == 1, $"Skip non-renderActive {_node.internalName}"); continue; }
|
||||||
|
|
Loading…
Reference in a new issue