pcx cleanup

This commit is contained in:
Tanasart 2025-01-12 08:13:27 +07:00
parent a4496bdbe5
commit df54b2f492
5 changed files with 121 additions and 122 deletions

View file

@ -836,13 +836,13 @@
"name": "Animation",
"nodes": [
{ "label": "Animations" },
"Node_Counter",
"Node_Rate_Remap",
"Node_Delay",
"Node_Stagger",
"Node_Revert",
{ "label": "Value" },
"Node_Counter",
"Node_Anim_Curve",
"Node_Fn_WaveTable",
"Node_Wiggler",

View file

@ -130,7 +130,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
var tx = xx + ui(40) + string_width(_name) + ui(16);
var ty = lb_y - ui(1);
if(point_in_circle(_m[0], _m[1], tx, ty, ui(10))) {
if(_hover && point_in_circle(_m[0], _m[1], tx, ty, ui(10))) {
cHov = true;
TOOLTIP = jun.active_tooltip;
@ -150,7 +150,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
var tx = xx + ui(40) + string_width(_name) + ui(16);
var ty = lb_y - ui(1);
if(point_in_circle(_m[0], _m[1], tx, ty, ui(10))) {
if(_hover && point_in_circle(_m[0], _m[1], tx, ty, ui(10))) {
cHov = true;
if(is_string(jun.tooltip))

View file

@ -24,7 +24,6 @@
function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
#region ---- main & active ----
project = PROJECT;

View file

@ -2,36 +2,36 @@
global.EVALUATE_HEAD = noone;
global.PCX_FUNCTIONS = ds_map_create();
global.PCX_FUNCTIONS[? "sin"] = [ ["radian"], function(val) { return sin(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "cos"] = [ ["radian"], function(val) { return cos(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "tan"] = [ ["radian"], function(val) { return tan(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "sin"] = [ ["radian"], function(val) /*=>*/ {return sin(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "cos"] = [ ["radian"], function(val) /*=>*/ {return cos(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "tan"] = [ ["radian"], function(val) /*=>*/ {return tan(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "dsin"] = [ ["degree"], function(val) { return dsin(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "dcos"] = [ ["degree"], function(val) { return dcos(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "dtan"] = [ ["degree"], function(val) { return dtan(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "dsin"] = [ ["degree"], function(val) /*=>*/ {return dsin(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "dcos"] = [ ["degree"], function(val) /*=>*/ {return dcos(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "dtan"] = [ ["degree"], function(val) /*=>*/ {return dtan(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "arcsin"] = [ ["x"], function(val) { return arcsin(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "arccos"] = [ ["x"], function(val) { return arccos(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "arctan"] = [ ["x"], function(val) { return arctan(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "arctan2"] = [ ["y", "x"], function(val) { return arctan2(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1)); } ];
global.PCX_FUNCTIONS[? "arcsin"] = [ ["x"], function(val) /*=>*/ {return arcsin(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "arccos"] = [ ["x"], function(val) /*=>*/ {return arccos(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "arctan"] = [ ["x"], function(val) /*=>*/ {return arctan(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "arctan2"] = [ ["y", "x"], function(val) /*=>*/ {return arctan2(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1))} ];
global.PCX_FUNCTIONS[? "darcsin"] = [ ["x"], function(val) { return darcsin(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "darccos"] = [ ["x"], function(val) { return darccos(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "darctan"] = [ ["x"], function(val) { return darctan(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "darctan2"] = [ ["y", "x"], function(val) { return darctan2(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1)); } ];
global.PCX_FUNCTIONS[? "darcsin"] = [ ["x"], function(val) /*=>*/ {return darcsin(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "darccos"] = [ ["x"], function(val) /*=>*/ {return darccos(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "darctan"] = [ ["x"], function(val) /*=>*/ {return darctan(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "darctan2"] = [ ["y", "x"], function(val) /*=>*/ {return darctan2(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1))} ];
global.PCX_FUNCTIONS[? "abs"] = [ ["x"], function(val) { return abs(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "round"] = [ ["x"], function(val) { return round(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "ceil"] = [ ["x"], function(val) { return ceil(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "floor"] = [ ["x"], function(val) { return floor(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "fract"] = [ ["x"], function(val) { return frac(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "sign"] = [ ["x"], function(val) { return sign(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "abs"] = [ ["x"], function(val) /*=>*/ {return abs(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "round"] = [ ["x"], function(val) /*=>*/ {return round(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "ceil"] = [ ["x"], function(val) /*=>*/ {return ceil(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "floor"] = [ ["x"], function(val) /*=>*/ {return floor(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "fract"] = [ ["x"], function(val) /*=>*/ {return frac(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "sign"] = [ ["x"], function(val) /*=>*/ {return sign(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "min"] = [ ["x", "y"], function(val) { return min(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1)); } ];
global.PCX_FUNCTIONS[? "max"] = [ ["x", "y"], function(val) { return max(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1)); } ];
global.PCX_FUNCTIONS[? "clamp"] = [ ["x", "min = 0", "max = 1"], function(val) { return clamp(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1, 0), array_safe_get_fast(val, 2, 1)); } ];
global.PCX_FUNCTIONS[? "min"] = [ ["x", "y"], function(val) /*=>*/ {return min(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1))} ];
global.PCX_FUNCTIONS[? "max"] = [ ["x", "y"], function(val) /*=>*/ {return max(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1))} ];
global.PCX_FUNCTIONS[? "clamp"] = [ ["x", "min = 0", "max = 1"], function(val) /*=>*/ {return clamp(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1, 0), array_safe_get_fast(val, 2, 1))} ];
global.PCX_FUNCTIONS[? "lerp"] = [ ["x", "y", "amount"], function(val) { return lerp(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1), array_safe_get_fast(val, 2)); } ];
global.PCX_FUNCTIONS[? "lerp"] = [ ["x", "y", "amount"], function(val) /*=>*/ {return lerp(array_safe_get_fast(val, 0), array_safe_get_fast(val, 1), array_safe_get_fast(val, 2))} ];
global.PCX_FUNCTIONS[? "wiggle"] = [ ["time", "frequency", "octave = 1", "seed = 0"], function(val) {
return wiggle(0, 1, TOTAL_FRAMES / array_safe_get_fast(val, 1),
@ -39,32 +39,26 @@
array_safe_get_fast(val, 3, 0),
array_safe_get_fast(val, 2, 1));
} ];
global.PCX_FUNCTIONS[? "random"] = [ ["min = 0", "max = 1"], function(val) {
return random_range(array_safe_get_fast(val, 0, 0),
array_safe_get_fast(val, 1, 1));
} ];
global.PCX_FUNCTIONS[? "irandom"] = [ ["min = 0", "max = 1"], function(val) {
return irandom_range(array_safe_get_fast(val, 0, 0),
array_safe_get_fast(val, 1, 1));
} ];
global.PCX_FUNCTIONS[? "random"] = [ ["min = 0", "max = 1"], function(val) /*=>*/ {return random_range(array_safe_get_fast(val, 0, 0), array_safe_get_fast(val, 1, 1))} ];
global.PCX_FUNCTIONS[? "irandom"] = [ ["min = 0", "max = 1"], function(val) /*=>*/ {return irandom_range(array_safe_get_fast(val, 0, 0), array_safe_get_fast(val, 1, 1))} ];
global.PCX_FUNCTIONS[? "range"] = [ ["length", "start = 0", "step = 1"], function(val) {
var arr = array_create(array_safe_get_fast(val, 0, 0));
for( var i = 0, n = array_length(arr); i < n; i++ )
arr[i] = array_safe_get_fast(val, 1, 0) + i * array_safe_get_fast(val, 2, 1);
return arr;
} ];
var arr = array_create(array_safe_get_fast(val, 0, 0));
for( var i = 0, n = array_length(arr); i < n; i++ )
arr[i] = array_safe_get_fast(val, 1, 0) + i * array_safe_get_fast(val, 2, 1);
return arr;
} ];
global.PCX_FUNCTIONS[? "length"] = [ ["value"], function(val) {
if(is_array(val)) return array_length(val);
if(is_string(val)) return string_length(val);
return 0;
} ];
if(is_array(val)) return array_length(val);
if(is_string(val)) return string_length(val);
return 0;
} ];
global.PCX_FUNCTIONS[? "string"] = [ ["value"], function(val) { return string(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "number"] = [ ["value"], function(val) { return toNumber(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "chr"] = [ ["x"], function(val) { return chr(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "ord"] = [ ["char"], function(val) { return ord(array_safe_get_fast(val, 0)); } ];
global.PCX_FUNCTIONS[? "string"] = [ ["value"], function(val) /*=>*/ {return string(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "number"] = [ ["value"], function(val) /*=>*/ {return toNumber(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "chr"] = [ ["x"], function(val) /*=>*/ {return chr(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "ord"] = [ ["char"], function(val) /*=>*/ {return ord(array_safe_get_fast(val, 0))} ];
global.PCX_FUNCTIONS[? "draw"] = [ ["surface", "x = 0", "y = 0", "xs = 1", "ys = 1", "rot = 0", "color = white", "alpha = 1"],
function(val) {
@ -100,25 +94,25 @@
PROJECT_VARIABLES = {};
PROJECT_VARIABLES.Project = {};
PROJECT_VARIABLES.Project.frame = [ function() { return CURRENT_FRAME }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Project.progress = [ function() { return CURRENT_FRAME / (TOTAL_FRAMES - 1) }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Project.frameTotal = [ function() { return TOTAL_FRAMES }, EXPRESS_TREE_ANIM.none ];
PROJECT_VARIABLES.Project.FPS = [ function() { return PROJECT.animator.framerate }, EXPRESS_TREE_ANIM.none ];
PROJECT_VARIABLES.Project.time = [ function() { return CURRENT_FRAME / PROJECT.animator.framerate }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Project.name = [ function() { return filename_name_only(PROJECT.path) }, EXPRESS_TREE_ANIM.none ];
PROJECT_VARIABLES.Project.dimension = [ function() { return PROJECT.attributes.surface_dimension; }, EXPRESS_TREE_ANIM.none ];
PROJECT_VARIABLES.Project.frame = [ function() /*=>*/ {return CURRENT_FRAME}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Project.progress = [ function() /*=>*/ {return CURRENT_FRAME / (TOTAL_FRAMES - 1)}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Project.frameTotal = [ function() /*=>*/ {return TOTAL_FRAMES}, EXPRESS_TREE_ANIM.none ];
PROJECT_VARIABLES.Project.FPS = [ function() /*=>*/ {return PROJECT.animator.framerate}, EXPRESS_TREE_ANIM.none ];
PROJECT_VARIABLES.Project.time = [ function() /*=>*/ {return CURRENT_FRAME / PROJECT.animator.framerate}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Project.name = [ function() /*=>*/ {return filename_name_only(PROJECT.path)}, EXPRESS_TREE_ANIM.none ];
PROJECT_VARIABLES.Project.dimension = [ function() /*=>*/ {return PROJECT.attributes.surface_dimension}, EXPRESS_TREE_ANIM.none ];
PROJECT_VARIABLES.Program = {};
PROJECT_VARIABLES.Program.time = [ function() { return current_time / 1000 }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Program.time = [ function() /*=>*/ {return current_time / 1000}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device = {};
PROJECT_VARIABLES.Device.timeSecond = [ function() { return current_second }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeMinute = [ function() { return current_minute }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeHour = [ function() { return current_hour }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeDay = [ function() { return current_day }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeDayInWeek = [ function() { return current_weekday }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeMonth = [ function() { return current_month }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeYear = [ function() { return current_year }, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeSecond = [ function() /*=>*/ {return current_second}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeMinute = [ function() /*=>*/ {return current_minute}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeHour = [ function() /*=>*/ {return current_hour}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeDay = [ function() /*=>*/ {return current_day}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeDayInWeek = [ function() /*=>*/ {return current_weekday}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeMonth = [ function() /*=>*/ {return current_month}, EXPRESS_TREE_ANIM.animated ];
PROJECT_VARIABLES.Device.timeYear = [ function() /*=>*/ {return current_year}, EXPRESS_TREE_ANIM.animated ];
#endregion
#region evaluator
@ -151,7 +145,6 @@
}
static eval = function(params = {}) {
//var _params = variable_clone(params);
var val = 0;
for( var i = 0, n = array_length(funcTrees); i < n; i++ )
@ -389,63 +382,73 @@
getRaw = true;
}
var v1 = getVal(l, params, getRaw || isLeft);
var v2 = getVal(r, params);
var v1 = getVal(l, params, getRaw || isLeft);
var v2 = getVal(r, params);
var res = 0;
if(symbol == "") {
res = v1;
} else if(symbol == "【") { // array builder
res = array_create(array_length(v1));
for( var i = 0, n = array_length(v1); i < n; i++ )
res[i] = getVal(v1[i], params);
} else if(symbol == "@") { // array getter
if(isLeft)
res = [ v1, v2 ];
else if(is_real(v2)) {
if(is_array(v1)) {
if(v2 < 0) v2 = array_length(v1) + v2;
res = array_safe_get_fast(v1, v2);
} else if(is_string(v1)) {
if(v2 < 0) v2 = string_length(v1) + v2;
res = string_char_at(v1, v2 + 1);
switch(symbol) {
case "" :
res = v1;
break;
case "【" : // array builder
res = array_create(array_length(v1));
for( var i = 0, n = array_length(v1); i < n; i++ )
res[i] = getVal(v1[i], params);
break;
case "@" : // array getter
if(isLeft)
res = [ v1, v2 ];
else if(is_real(v2)) {
if(is_array(v1)) {
if(v2 < 0) v2 = array_length(v1) + v2;
res = array_safe_get_fast(v1, v2);
} else if(is_string(v1)) {
if(v2 < 0) v2 = string_length(v1) + v2;
res = string_char_at(v1, v2 + 1);
}
}
}
//print($"Array getter {v1}, {v2} = {res}");
} else if(symbol == "=") { // value assignment
if(is_array(v1)) {
var val = params[$ v1[0]];
val = array_safe_set(val, v1[1], v2);
params[$ v1[0]] = val;
res = val;
} else {
params[$ v1] = v2;
res = v2;
}
} else if(symbol == "≔") { // function default replacement
if(!struct_exists(params, v1))
params[$ v1] = v2;
res = params[$ v1];
} else if(is_array(v1) && !is_array(v2)) { // evaluate value
res = array_create(array_length(v1));
for( var i = 0, n = array_length(res); i < n; i++ )
res[i] = eval_real(array_safe_get_fast(v1, i), v2);
break;
} else if(!is_array(v1) && is_array(v2)) {
res = array_create(array_length(v2));
for( var i = 0, n = array_length(res); i < n; i++ )
res[i] = eval_real(v1, array_safe_get_fast(v2, i));
case "=" : // value assignment
if(is_array(v1)) {
var val = params[$ v1[0]];
val = array_safe_set(val, v1[1], v2);
params[$ v1[0]] = val;
res = val;
} else {
params[$ v1] = v2;
res = v2;
}
break;
} else if(is_array(v1) && is_array(v2)) {
res = array_create(max(array_length(v1), array_length(v2)));
for( var i = 0, n = array_length(res); i < n; i++ )
res[i] = eval_real(array_safe_get_fast(v1, i), array_safe_get_fast(v2, i));
case "≔" : // function default replacement
if(!struct_exists(params, v1))
params[$ v1] = v2;
res = params[$ v1];
break;
} else
res = eval_real(v1, v2);
default :
if(is_array(v1) && !is_array(v2)) { // evaluate value
res = array_create(array_length(v1));
for( var i = 0, n = array_length(res); i < n; i++ )
res[i] = eval_real(array_safe_get_fast(v1, i), v2);
} else if(!is_array(v1) && is_array(v2)) {
res = array_create(array_length(v2));
for( var i = 0, n = array_length(res); i < n; i++ )
res[i] = eval_real(v1, array_safe_get_fast(v2, i));
} else if(is_array(v1) && is_array(v2)) {
res = array_create(max(array_length(v1), array_length(v2)));
for( var i = 0, n = array_length(res); i < n; i++ )
res[i] = eval_real(array_safe_get_fast(v1, i), array_safe_get_fast(v2, i));
} else
res = eval_real(v1, v2);
break;
}
var _v1_var = getVal(l, params, true);
switch(symbol) {

View file

@ -51,6 +51,7 @@
if(ch == " ") {
if(str) _fx += ch;
} else {
if(ch == "-" && _prevSym)
_fx += $"0∸";
@ -129,13 +130,9 @@
for( var i = 0, n = array_length(fxs); i < n; i++ ) {
var _fx = functionStringClean(fxs[i]);
//print($"Eval line {i}: {_fx} [stack size = {ds_stack_size(call_st)}]");
if(_fx == "" || _fx == "{") continue;
if(_fx == "}") {
ds_stack_pop(call_st);
continue;
}
if(_fx == "}") { ds_stack_pop(call_st); continue; }
var _fx_sp = string_split(_fx, "(");
var _cmd = string_trim(_fx_sp[0]);
@ -167,7 +164,6 @@
continue;
case "for":
var con_for = new __funcFor();
var cond = string_splice(_cond, ":");
if(array_length(cond) == 2) {
@ -195,6 +191,7 @@
if(ds_stack_empty(call_st)) {
print("Block stack empty, how?");
} else {
var _top = ds_stack_top(call_st);
_top.addFunction(evaluateFunctionTree(_fx));