From 244b6bf4b3d8312e1526cb588b392195cf50e2d8 Mon Sep 17 00:00:00 2001 From: Tanasart <22589759+Ttanasart-pt@users.noreply.github.com> Date: Wed, 13 Sep 2023 15:06:39 +0200 Subject: [PATCH] Fix array on write bugs. Get value now copy array before sending. --- PixelComposer.resource_order | 9 +++-- PixelComposer.yyp | 9 +++-- objects/o_main/Draw_75.gml | 8 +++- scripts/dynaSurf/dynaSurf.gml | 7 +++- scripts/node_PCX_fn_math/node_PCX_fn_math.gml | 24 +++++++++++- .../node_PCX_fn_random/node_PCX_fn_random.gml | 2 +- .../node_PCX_fn_surface_height.gml | 4 +- .../node_PCX_fn_surface_width.gml | 4 +- .../node_dynamic_surface.gml | 28 ++++++++++++-- .../node_dynamic_surface_in.gml | 7 +++- .../node_dynamic_surface_out.gml | 8 +++- .../node_dynamic_surface_out_height.gml | 8 +++- .../node_dynamic_surface_out_width.gml | 8 +++- scripts/node_keyframe/node_keyframe.gml | 2 +- scripts/node_processor/node_processor.gml | 2 +- scripts/node_transform/node_transform.gml | 8 ++-- scripts/node_value/node_value.gml | 10 ++--- scripts/pcx_ast/pcx_ast.gml | 37 ++++++++++--------- 18 files changed, 128 insertions(+), 57 deletions(-) diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 8c9bde847..2fb0c6d3d 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -112,7 +112,11 @@ {"name":"lua","order":16,"path":"folders/nodes/data/lua.yy",}, {"name":"node","order":11,"path":"folders/nodes/data/node.yy",}, {"name":"PCX","order":22,"path":"folders/nodes/data/PCX.yy",}, + {"name":"array","order":6,"path":"folders/nodes/data/PCX/array.yy",}, + {"name":"flow control","order":7,"path":"folders/nodes/data/PCX/flow control.yy",}, {"name":"fn","order":2,"path":"folders/nodes/data/PCX/fn.yy",}, + {"name":"surface","order":3,"path":"folders/nodes/data/PCX/surface.yy",}, + {"name":"value","order":4,"path":"folders/nodes/data/PCX/value.yy",}, {"name":"pixel builder","order":20,"path":"folders/nodes/data/pixel builder.yy",}, {"name":"box","order":2,"path":"folders/nodes/data/pixel builder/box.yy",}, {"name":"draw","order":3,"path":"folders/nodes/data/pixel builder/draw.yy",}, @@ -202,10 +206,7 @@ {"name":"biterator","order":2,"path":"folders/VCT/biterator.yy",}, {"name":"widget","order":3,"path":"folders/VCT/widget.yy",}, {"name":"widgets","order":5,"path":"folders/widgets.yy",}, - {"name":"surface","order":3,"path":"folders/nodes/data/PCX/surface.yy",}, - {"name":"value","order":4,"path":"folders/nodes/data/PCX/value.yy",}, - {"name":"array","order":6,"path":"folders/nodes/data/PCX/array.yy",}, - {"name":"flow control","order":7,"path":"folders/nodes/data/PCX/flow control.yy",}, + {"name":"what?","order":10,"path":"folders/panels/what?.yy",}, ], "ResourceOrderSettings": [ {"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 2a606f668..f2d32f461 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -138,7 +138,11 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"lua","folderPath":"folders/nodes/data/lua.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"node","folderPath":"folders/nodes/data/node.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"PCX","folderPath":"folders/nodes/data/PCX.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"array","folderPath":"folders/nodes/data/PCX/array.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"flow control","folderPath":"folders/nodes/data/PCX/flow control.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"fn","folderPath":"folders/nodes/data/PCX/fn.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"surface","folderPath":"folders/nodes/data/PCX/surface.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"value","folderPath":"folders/nodes/data/PCX/value.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"pixel builder","folderPath":"folders/nodes/data/pixel builder.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"box","folderPath":"folders/nodes/data/pixel builder/box.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"draw","folderPath":"folders/nodes/data/pixel builder/draw.yy",}, @@ -239,10 +243,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"biterator","folderPath":"folders/VCT/biterator.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/VCT/widget.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"surface","folderPath":"folders/nodes/data/PCX/surface.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"value","folderPath":"folders/nodes/data/PCX/value.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"array","folderPath":"folders/nodes/data/PCX/array.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"flow control","folderPath":"folders/nodes/data/PCX/flow control.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"what?","folderPath":"folders/panels/what?.yy",}, ], "IncludedFiles": [ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",}, diff --git a/objects/o_main/Draw_75.gml b/objects/o_main/Draw_75.gml index c6dbf865b..36ffd8fe2 100644 --- a/objects/o_main/Draw_75.gml +++ b/objects/o_main/Draw_75.gml @@ -80,7 +80,13 @@ if(OS == os_windows && gameframe_is_minimized()) exit; draw_tooltip_buffer(content); break; default : - draw_tooltip_text(string(content)); + var tt = ""; + if(is_struct(content)) + tt = $"[{instanceof(content)}] {content}"; + else + tt = string(content); + + draw_tooltip_text(tt); } } else if(TOOLTIP != "") draw_tooltip_text(TOOLTIP); diff --git a/scripts/dynaSurf/dynaSurf.gml b/scripts/dynaSurf/dynaSurf.gml index bbaa30151..ea66c4546 100644 --- a/scripts/dynaSurf/dynaSurf.gml +++ b/scripts/dynaSurf/dynaSurf.gml @@ -36,7 +36,8 @@ function Compute_DynaSurf() : DynaSurf() constructor { static draw = function(_x = 0, _y = 0, _sx = 1, _sy = 1, _ang = 0, _col = c_white, _alp = 1) { if(drawFn == noone) return; - drawFn.evalFn({ + + var params = { x: _x, y: _y, sx: _sx, @@ -44,6 +45,8 @@ function Compute_DynaSurf() : DynaSurf() constructor { angle: _ang, color: _col, alpha: _alp - }); + }; + + drawFn.eval(params); } } \ No newline at end of file diff --git a/scripts/node_PCX_fn_math/node_PCX_fn_math.gml b/scripts/node_PCX_fn_math/node_PCX_fn_math.gml index 47c710bf1..0a93854aa 100644 --- a/scripts/node_PCX_fn_math/node_PCX_fn_math.gml +++ b/scripts/node_PCX_fn_math/node_PCX_fn_math.gml @@ -20,6 +20,7 @@ function Node_PCX_fn_Math(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) con var _opr = inputs[| 0].getValue(); var _x = inputs[| 1].getValue(); var _y = inputs[| 2].getValue(); + var _z = inputs[| 3].getValue(); var _sym = syms[_opr]; switch(_sym) { @@ -46,6 +47,27 @@ function Node_PCX_fn_Math(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) con default: inputs[| 3].setVisible(false, false); } - outputs[| 0].setValue(new __funcTree(_sym, _x, _y)); + switch(_sym) { + case "abs" : + case "round" : + case "floor" : + case "ceil" : + case "sin" : + case "cos" : + case "tan" : + case "arcsin" : + case "arccos" : + case "arctan" : + case "min" : + case "max" : + case "clamp" : + case "lerp" : + outputs[| 0].setValue(new __funcTree(_sym, [ _x, _y, _z ])); + break; + default: + outputs[| 0].setValue(new __funcTree(_sym, _x, _y)); + } + + } } \ No newline at end of file diff --git a/scripts/node_PCX_fn_random/node_PCX_fn_random.gml b/scripts/node_PCX_fn_random/node_PCX_fn_random.gml index 53a023d8d..86379bf26 100644 --- a/scripts/node_PCX_fn_random/node_PCX_fn_random.gml +++ b/scripts/node_PCX_fn_random/node_PCX_fn_random.gml @@ -16,6 +16,6 @@ function Node_PCX_fn_Random(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) c var _max = inputs[| 1].getValue(); var _int = inputs[| 2].getValue(); - outputs[| 0].setValue(new __funcTree(_int? "irandom" : "random", _min, _max)); + outputs[| 0].setValue(new __funcTree(_int? "irandom" : "random", [ _min, _max ])); } } \ No newline at end of file diff --git a/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.gml b/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.gml index eeb953e3a..1813fadc7 100644 --- a/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.gml +++ b/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.gml @@ -1,5 +1,5 @@ function Node_PCX_fn_Surface_Height(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { - name = "Surface Height"; + name = "Surface Height"; inputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); @@ -7,6 +7,6 @@ function Node_PCX_fn_Surface_Height(_x, _y, _group = noone) : Node_PCX(_x, _y, _ static update = function() { var _surf = inputs[| 0].getValue(); - outputs[| 0].setValue(new __funcTree("surface_get_height", _surf)); + outputs[| 0].setValue(new __funcTree("surface_get_height", [ _surf ])); } } \ No newline at end of file diff --git a/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.gml b/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.gml index 9c9b2f3d7..b1b3cc41f 100644 --- a/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.gml +++ b/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.gml @@ -1,5 +1,5 @@ function Node_PCX_fn_Surface_Width(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { - name = "Surface Width"; + name = "Surface Width"; inputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); @@ -7,6 +7,6 @@ function Node_PCX_fn_Surface_Width(_x, _y, _group = noone) : Node_PCX(_x, _y, _g static update = function() { var _surf = inputs[| 0].getValue(); - outputs[| 0].setValue(new __funcTree("surface_get_width", _surf)); + outputs[| 0].setValue(new __funcTree("surface_get_width", [ _surf ])); } } \ No newline at end of file diff --git a/scripts/node_dynamic_surface/node_dynamic_surface.gml b/scripts/node_dynamic_surface/node_dynamic_surface.gml index 68bb506e0..0f345d320 100644 --- a/scripts/node_dynamic_surface/node_dynamic_surface.gml +++ b/scripts/node_dynamic_surface/node_dynamic_surface.gml @@ -1,7 +1,6 @@ function Node_DynaSurf(_x, _y, _group = noone) : Node_Collection(_x, _y, _group) constructor { name = "Dynamic Surface"; color = COLORS.node_blend_dynaSurf; - icon = THEME.pixel_builder; reset_all_child = true; draw_input_overlay = false; @@ -15,6 +14,8 @@ function Node_DynaSurf(_x, _y, _group = noone) : Node_Collection(_x, _y, _group) var _input = nodeBuild("Node_DynaSurf_In", -256, -32, self); var _output = nodeBuild("Node_DynaSurf_Out", 256, -32, self); + _output.inputs[| 0].setFrom(_input.outputs[| 0]); + var _yy = -32 + 24; var _nx = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("x"); _output.inputs[| 1].setFrom(_nx .outputs[| 0]); _yy += 24; var _ny = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("y"); _output.inputs[| 2].setFrom(_ny .outputs[| 0]); _yy += 24; @@ -24,14 +25,31 @@ function Node_DynaSurf(_x, _y, _group = noone) : Node_Collection(_x, _y, _group) var _nclr = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("color"); _output.inputs[| 6].setFrom(_nclr.outputs[| 0]); _yy += 24; var _nalp = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("alpha"); _output.inputs[| 7].setFrom(_nalp.outputs[| 0]); _yy += 24; + _nsx.inputs[| 0].setValue(1); + _nsy.inputs[| 0].setValue(1); + _nclr.inputs[| 0].setValue(c_white); + _nalp.inputs[| 0].setValue(1); + _yy += 64; - var _outW = nodeBuild("Node_DynaSurf_Out_Width", 256, _yy, self) _yy += 64; - var _outH = nodeBuild("Node_DynaSurf_Out_Height", 256, _yy, self) _yy += 64; + var _outW = nodeBuild("Node_DynaSurf_Out_Width", 256, _yy, self) + var _surW = nodeBuild("Node_PCX_fn_Surface_Width", 128, _yy, self) + + _surW.inputs[| 0].setFrom(_input.outputs[| 0]); + _outW.inputs[| 0].setFrom(_surW.outputs[| 0]); + + _yy += 64; + var _outH = nodeBuild("Node_DynaSurf_Out_Height", 256, _yy, self) + var _surH = nodeBuild("Node_PCX_fn_Surface_Height", 128, _yy, self) + + _surH.inputs[| 0].setFrom(_input.outputs[| 0]); + _outH.inputs[| 0].setFrom(_surH.outputs[| 0]); + UPDATE |= RENDER_TYPE.full; } - static update = function() { + static setDynamicSurface = function() { var _dyna = new Compute_DynaSurf(); + for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { var _n = nodes[| i]; @@ -45,4 +63,6 @@ function Node_DynaSurf(_x, _y, _group = noone) : Node_Collection(_x, _y, _group) outputs[| 0].setValue(_dyna); } + + static update = function() {} } \ No newline at end of file diff --git a/scripts/node_dynamic_surface_in/node_dynamic_surface_in.gml b/scripts/node_dynamic_surface_in/node_dynamic_surface_in.gml index 5aa100025..34047eb80 100644 --- a/scripts/node_dynamic_surface_in/node_dynamic_surface_in.gml +++ b/scripts/node_dynamic_surface_in/node_dynamic_surface_in.gml @@ -1,10 +1,10 @@ function Node_DynaSurf_In(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { name = "Input"; + color = COLORS.node_blend_dynaSurf; w = 96; manual_deletable = false; destroy_when_upgroup = true; - color = COLORS.node_blend_collection; inParent = undefined; @@ -54,6 +54,11 @@ function Node_DynaSurf_In(_x, _y, _group = noone) : Node(_x, _y, _group) constru static update = function(frame = PROJECT.animator.current_frame) { if(is_undefined(inParent)) return; var _val = inParent.getValue(); + outputs[| 0].setValue(new __funcTree("", _val)); } + + static postDeserialize = function() { #region + createInput(false); + } #endregion } \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out/node_dynamic_surface_out.gml b/scripts/node_dynamic_surface_out/node_dynamic_surface_out.gml index 338bafc3f..fcbabbaec 100644 --- a/scripts/node_dynamic_surface_out/node_dynamic_surface_out.gml +++ b/scripts/node_dynamic_surface_out/node_dynamic_surface_out.gml @@ -1,5 +1,6 @@ function Node_DynaSurf_Out(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { - name = "Output"; + name = "Output"; + color = COLORS.node_blend_dynaSurf; manual_deletable = false; destroy_when_upgroup = true; @@ -20,7 +21,8 @@ function Node_DynaSurf_Out(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) co inputs[| 7] = nodeValue("alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); - outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone) + .setVisible(false); input_display_list = [ 0, ["Transform", false], 1, 2, 3, 4, 5, @@ -38,5 +40,7 @@ function Node_DynaSurf_Out(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) co var _alp = inputs[| 7].getValue(); outputs[| 0].setValue(new __funcTree("draw", [ _surf, _x, _y, _sx, _sy, _ang, _clr, _alp ])); + + if(group) group.setDynamicSurface(); } } \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.gml b/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.gml index a8ea183bc..bafcf0040 100644 --- a/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.gml +++ b/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.gml @@ -1,17 +1,21 @@ function Node_DynaSurf_Out_Height(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { - name = "getHeight"; + name = "getHeight"; + color = COLORS.node_blend_dynaSurf; manual_deletable = false; destroy_when_upgroup = true; inputs[| 0] = nodeValue("Height", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); - outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone) + .setVisible(false); input_display_list = [ 0 ]; static update = function() { var _h = inputs[| 0].getValue(); outputs[| 0].setValue(_h); + + if(group) group.setDynamicSurface(); } } \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.gml b/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.gml index b1e858180..39f6aa287 100644 --- a/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.gml +++ b/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.gml @@ -1,17 +1,21 @@ function Node_DynaSurf_Out_Width(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { - name = "getWidth"; + name = "getWidth"; + color = COLORS.node_blend_dynaSurf; manual_deletable = false; destroy_when_upgroup = true; inputs[| 0] = nodeValue("Width", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); - outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone) + .setVisible(false); input_display_list = [ 0 ]; static update = function() { var _w = inputs[| 0].getValue(); outputs[| 0].setValue(_w); + + if(group) group.setDynamicSurface(); } } \ No newline at end of file diff --git a/scripts/node_keyframe/node_keyframe.gml b/scripts/node_keyframe/node_keyframe.gml index af26a498f..09268ddbf 100644 --- a/scripts/node_keyframe/node_keyframe.gml +++ b/scripts/node_keyframe/node_keyframe.gml @@ -265,7 +265,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor { } #endregion static processValue = function(_val) { #region - if(is_array(_val)) return _val; + if(is_array(_val)) return array_clone(_val); if(is_struct(_val)) return _val; if(is_undefined(_val)) return 0; diff --git a/scripts/node_processor/node_processor.gml b/scripts/node_processor/node_processor.gml index 7bd6cfddd..a84d8e493 100644 --- a/scripts/node_processor/node_processor.gml +++ b/scripts/node_processor/node_processor.gml @@ -30,7 +30,7 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct triggerRender(); }, false) ]); - static getInputData = function(index) { return array_safe_get(current_data, index, 0); } + static getInputData = function(index, def = 0) { return array_safe_get(inputs_data, index, def); } static processData = function(_outSurf, _data, _output_index, _array_index = 0) { return _outSurf; } diff --git a/scripts/node_transform/node_transform.gml b/scripts/node_transform/node_transform.gml index 418bffd52..060c9acf2 100644 --- a/scripts/node_transform/node_transform.gml +++ b/scripts/node_transform/node_transform.gml @@ -268,14 +268,14 @@ function Node_Transform(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) _surf_out = _surf_out[preview_index]; } - var pos = current_data[2]; + var pos = getInputData(2); var _pos = [ pos[0], pos[1] ]; - var anc = current_data[3]; + var anc = getInputData(3); var _anc = [ anc[0], anc[1] ]; - var rot = current_data[5]; - var sca = current_data[6]; + var rot = getInputData(5); + var sca = getInputData(6); var srw = surface_get_width_safe(_surf); var srh = surface_get_height_safe(_surf); diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index 86fe24e27..bb44bde1f 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -346,7 +346,7 @@ function nodeValueUnit(_nodeValue) constructor { #region } #endregion static invApply = function(value, index = 0) { #region - //value = variable_clone(value); + value = array_clone(value); if(mode == VALUE_UNIT.constant) return value; @@ -357,7 +357,7 @@ function nodeValueUnit(_nodeValue) constructor { #region } #endregion static apply = function(value, index = 0) { #region - //value = variable_clone(value); + value = array_clone(value); if(mode == VALUE_UNIT.constant) return value; if(reference == noone) return value; @@ -366,8 +366,6 @@ function nodeValueUnit(_nodeValue) constructor { #region } #endregion static convertUnit = function(value, unitTo, index = 0) { #region - //value = variable_clone(value); - var disp = _nodeValue.display_type; var base = reference(index); var inv = unitTo == VALUE_UNIT.reference; @@ -1225,7 +1223,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru if(cache_hit) { global.cache_hit++; - return cache_value[2]; + return array_clone(cache_value[2]); } } @@ -1240,7 +1238,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru cache_value[2] = val; cache_value[3] = applyUnit; - return val; + return array_clone(val); } #endregion static __getAnimValue = function(_time = PROJECT.animator.current_frame) { #region diff --git a/scripts/pcx_ast/pcx_ast.gml b/scripts/pcx_ast/pcx_ast.gml index 1549e4546..3f2892ca1 100644 --- a/scripts/pcx_ast/pcx_ast.gml +++ b/scripts/pcx_ast/pcx_ast.gml @@ -67,12 +67,22 @@ global.FUNCTIONS[? "ord"] = [ ["char"], function(val) { return ord(array_safe_get(val, 0)); } ]; global.FUNCTIONS[? "draw"] = [ ["surface", "x = 0", "y = 0", "xs = 1", "ys = 1", "rot = 0", "color = white", "alpha = 1"], - function(val) { return draw_surface_ext_safe(array_safe_get(val, 0, -1), array_safe_get(val, 1, 0), array_safe_get(val, 2, 0), - array_safe_get(val, 3, 1), array_safe_get(val, 4, 1), array_safe_get(val, 5, 0), - array_safe_get(val, 6, c_white), array_safe_get(val, 7, 1)); - } ]; + function(val) { + var _surface = array_safe_get(val, 0, -1); + if(!is_surface(_surface)) return false; + + var _x = array_safe_get(val, 1, 0); + var _y = array_safe_get(val, 2, 0); + var _xs = array_safe_get(val, 3, 1); + var _ys = array_safe_get(val, 4, 1); + var _rot = array_safe_get(val, 5, 0); + var _col = array_safe_get(val, 6, c_white); + var _alp = array_safe_get(val, 7, 1); + draw_surface_ext_safe(_surface, _x, _y, _xs, _ys, _rot, _col, _alp); + return true; + } ]; - global.FUNCTIONS[? "surface_get_width"] = [ ["surface"], function(val) { return surface_get_width_safe(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "surface_get_width"] = [ ["surface"], function(val) { return surface_get_width_safe(array_safe_get(val, 0)); } ]; global.FUNCTIONS[? "surface_get_height"] = [ ["surface"], function(val) { return surface_get_height_safe(array_safe_get(val, 0)); } ]; globalvar PROJECT_VARIABLES; @@ -329,6 +339,9 @@ } #endregion static eval = function(params = {}, isLeft = false) { #region + //print($"{symbol}, {l} | {r}") + //print(params); + if(ds_map_exists(global.FUNCTIONS, symbol)) { if(!is_array(l)) return 0; @@ -338,7 +351,7 @@ for( var i = 0, n = array_length(l); i < n; i++ ) _l[i] = getVal(l[i], params); - + var res = _ev(_l); printIf(global.LOG_EXPRESSION, $"Function {symbol}{_l} = {res}"); printIf(global.LOG_EXPRESSION, "===================="); @@ -349,6 +362,7 @@ var getRaw = false; switch(symbol) { case "=": + case "≔": case "【": getRaw = true; } @@ -436,17 +450,6 @@ return res; } #endregion - static evalFn = function(params) { #region - if(!ds_map_exists(global.FUNCTIONS, symbol)) return; - - if(!is_array(params)) return 0; - - var _fn = global.FUNCTIONS[? symbol]; - var _ev = _fn[1]; - var res = _ev(params); - return res; - } #endregion - static eval_real = function(v1, v2, _symbol = symbol) { #region switch(_symbol) { case "+":