mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-25 22:46:19 +01:00
- [PCX] self keyword.
This commit is contained in:
parent
81d54ea3e3
commit
5173301279
9 changed files with 72 additions and 25 deletions
|
@ -5,8 +5,7 @@ function Node_Area(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
|
|
||||||
w = 96;
|
w = 96;
|
||||||
|
|
||||||
|
inputs[| 0] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ] )
|
||||||
inputs[| 0] = nodeValue("Postion", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ] )
|
|
||||||
.setDisplay(VALUE_DISPLAY.vector)
|
.setDisplay(VALUE_DISPLAY.vector)
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
inputs[| 1] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16 ] )
|
inputs[| 1] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16 ] )
|
||||||
|
|
|
@ -94,6 +94,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
outputs = ds_list_create();
|
outputs = ds_list_create();
|
||||||
inputMap = ds_map_create();
|
inputMap = ds_map_create();
|
||||||
outputMap = ds_map_create();
|
outputMap = ds_map_create();
|
||||||
|
input_value_map = {};
|
||||||
|
|
||||||
use_display_list = true;
|
use_display_list = true;
|
||||||
input_display_list = -1;
|
input_display_list = -1;
|
||||||
|
@ -439,11 +440,18 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
return array_safe_get(inputs_data, index, def);
|
return array_safe_get(inputs_data, index, def);
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
static setInputData = function(index, value) { #region
|
||||||
|
gml_pragma("forceinline");
|
||||||
|
|
||||||
|
inputs_data[index] = value;
|
||||||
|
input_value_map[$ inputs[| index].internalName] = value;
|
||||||
|
} #endregion
|
||||||
|
|
||||||
static getInputs = function(frame = CURRENT_FRAME) { #region
|
static getInputs = function(frame = CURRENT_FRAME) { #region
|
||||||
inputs_data = array_create(ds_list_size(inputs), undefined);
|
inputs_data = array_create(ds_list_size(inputs), undefined);
|
||||||
|
|
||||||
for(var i = 0; i < ds_list_size(inputs); i++)
|
for(var i = 0; i < ds_list_size(inputs); i++)
|
||||||
inputs_data[i] = inputs[| i].getValue(frame,,, false);
|
setInputData(i, inputs[| i].getValue(frame,,, false));
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static forceUpdate = function() { #region
|
static forceUpdate = function() { #region
|
||||||
|
|
|
@ -261,7 +261,7 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
||||||
if(amo == 1) val = val[0]; //spread single array
|
if(amo == 1) val = val[0]; //spread single array
|
||||||
amo = max(1, amo);
|
amo = max(1, amo);
|
||||||
|
|
||||||
inputs_data[i] = val;
|
setInputData(i, val);
|
||||||
inputs_is_array[i] = inputs[| i].isArray(val);
|
inputs_is_array[i] = inputs[| i].isArray(val);
|
||||||
|
|
||||||
switch(attributes.array_process) {
|
switch(attributes.array_process) {
|
||||||
|
|
|
@ -465,7 +465,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
|
|
||||||
static updateName = function(_name) {
|
static updateName = function(_name) {
|
||||||
name = _name;
|
name = _name;
|
||||||
internalName = string_lower(string_replace_all(name, " ", "_"));
|
internalName = string_to_var(name);
|
||||||
name_custom = true;
|
name_custom = true;
|
||||||
} updateName(_name);
|
} updateName(_name);
|
||||||
|
|
||||||
|
@ -541,6 +541,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
attributes = {};
|
attributes = {};
|
||||||
|
|
||||||
node.inputs_data[index] = _value;
|
node.inputs_data[index] = _value;
|
||||||
|
node.input_value_map[$ internalName] = _value;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ---- draw ----
|
#region ---- draw ----
|
||||||
|
@ -592,12 +593,19 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
expUse = false;
|
expUse = false;
|
||||||
expression = "";
|
expression = "";
|
||||||
expTree = noone;
|
expTree = noone;
|
||||||
|
expContext = {
|
||||||
|
name: name,
|
||||||
|
node_name: node.display_name,
|
||||||
|
value: 0,
|
||||||
|
node_values: node.input_value_map,
|
||||||
|
};
|
||||||
|
|
||||||
express_edit = new textArea(TEXTBOX_INPUT.text, function(str) {
|
express_edit = new textArea(TEXTBOX_INPUT.text, function(str) {
|
||||||
expression = str;
|
expression = str;
|
||||||
expressionUpdate();
|
expressionUpdate();
|
||||||
});
|
});
|
||||||
express_edit.autocomplete_server = pxl_autocomplete_server;
|
express_edit.autocomplete_server = pxl_autocomplete_server;
|
||||||
|
express_edit.autocomplete_context = expContext;
|
||||||
express_edit.function_guide_server = pxl_function_guide_server;
|
express_edit.function_guide_server = pxl_function_guide_server;
|
||||||
express_edit.parser_server = pxl_document_parser;
|
express_edit.parser_server = pxl_document_parser;
|
||||||
express_edit.format = TEXT_AREA_FORMAT.codeLUA;
|
express_edit.format = TEXT_AREA_FORMAT.codeLUA;
|
||||||
|
@ -1456,14 +1464,14 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
//printCallStack();
|
//printCallStack();
|
||||||
|
|
||||||
global.EVALUATE_HEAD = self;
|
global.EVALUATE_HEAD = self;
|
||||||
var params = {
|
expContext = {
|
||||||
name: name,
|
name: name,
|
||||||
node_name: node.display_name,
|
node_name: node.display_name,
|
||||||
node: self,
|
value: val[0],
|
||||||
value: val[0]
|
node_values: node.input_value_map,
|
||||||
};
|
};
|
||||||
|
|
||||||
var _exp_res = expTree.eval(variable_clone(params));
|
var _exp_res = expTree.eval(variable_clone(expContext));
|
||||||
//print(json_stringify(expTree, true));
|
//print(json_stringify(expTree, true));
|
||||||
//print($"======= {_exp_res}");
|
//print($"======= {_exp_res}");
|
||||||
|
|
||||||
|
@ -1639,7 +1647,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
|
|
||||||
if(connect_type == JUNCTION_CONNECT.output) return;
|
if(connect_type == JUNCTION_CONNECT.output) return;
|
||||||
|
|
||||||
node.inputs_data[self.index] = animator.getValue(time);
|
node.setInputData(self.index, animator.getValue(time));
|
||||||
|
|
||||||
if(tags != VALUE_TAG.none) return true;
|
if(tags != VALUE_TAG.none) return true;
|
||||||
|
|
||||||
|
@ -2356,7 +2364,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
if(APPENDING) def_val = getValue(0);
|
if(APPENDING) def_val = getValue(0);
|
||||||
|
|
||||||
if(connect_type == JUNCTION_CONNECT.input && index >= 0) {
|
if(connect_type == JUNCTION_CONNECT.input && index >= 0) {
|
||||||
node.inputs_data[index] = animator.getValue(0);
|
setInputData(index, animator.getValue(0));
|
||||||
//print($"Set input {node.name} - {index} = {node.inputs_data[index]} | {node.inputs_data}");
|
//print($"Set input {node.name} - {index} = {node.inputs_data[index]} | {node.inputs_data}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -275,9 +275,11 @@
|
||||||
return struct_try_get(params, val);
|
return struct_try_get(params, val);
|
||||||
|
|
||||||
val = string_trim(val);
|
val = string_trim(val);
|
||||||
|
if(_string(val)) return _string_trim(val);
|
||||||
|
|
||||||
if(_string(val))
|
var _str = string_splice(val, ".");
|
||||||
return _string_trim(val);
|
if(array_length(_str) > 1 && _str[0] == "self" && struct_has(params, "node_values"))
|
||||||
|
return struct_try_get(params.node_values, _str[1]);
|
||||||
|
|
||||||
return nodeGetData(val);
|
return nodeGetData(val);
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
global.NODE_SUB_CATAG = [ "input", "output" ];
|
global.NODE_SUB_CATAG = [ "input", "output" ];
|
||||||
|
global.PCX_CONSTANT = [ "value", "self" ];
|
||||||
|
|
||||||
function pxl_document_parser(prompt) {
|
function pxl_document_parser(prompt) {
|
||||||
var params = [];
|
var params = [];
|
||||||
|
@ -20,13 +21,28 @@ function pxl_document_parser(prompt) {
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
function pxl_autocomplete_server(prompt, params = []) {
|
function pxl_autocomplete_server(prompt, params = [], context = {}) {
|
||||||
var res = [];
|
var res = [];
|
||||||
var pr_list = ds_priority_create();
|
var pr_list = ds_priority_create();
|
||||||
|
|
||||||
//////////////////////////////////
|
//////////////////////////////////
|
||||||
ds_priority_clear(pr_list);
|
ds_priority_clear(pr_list);
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(global.PCX_CONSTANT); i < n; i++ ) {
|
||||||
|
var gl = global.PCX_CONSTANT[i];
|
||||||
|
|
||||||
|
var match = string_partial_match(string_lower(gl), string_lower(prompt));
|
||||||
|
if(match == -9999) continue;
|
||||||
|
|
||||||
|
ds_priority_add(pr_list, [[THEME.ac_constant, 2], gl, "local", gl], match);
|
||||||
|
}
|
||||||
|
|
||||||
|
repeat(ds_priority_size(pr_list))
|
||||||
|
array_push(res, ds_priority_delete_max(pr_list));
|
||||||
|
|
||||||
|
//////////////////////////////////
|
||||||
|
ds_priority_clear(pr_list);
|
||||||
|
|
||||||
for( var i = 0, n = array_length(params); i < n; i++ ) {
|
for( var i = 0, n = array_length(params); i < n; i++ ) {
|
||||||
var gl = params[i];
|
var gl = params[i];
|
||||||
|
|
||||||
|
@ -36,10 +52,6 @@ function pxl_autocomplete_server(prompt, params = []) {
|
||||||
ds_priority_add(pr_list, [[THEME.ac_constant, 2], gl, "local", gl], match);
|
ds_priority_add(pr_list, [[THEME.ac_constant, 2], gl, "local", gl], match);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl = "value";
|
|
||||||
var match = string_partial_match(string_lower(gl), string_lower(prompt));
|
|
||||||
if(match != -9999) ds_priority_add(pr_list, [[THEME.ac_constant, 2], gl, "local", gl], match);
|
|
||||||
|
|
||||||
repeat(ds_priority_size(pr_list))
|
repeat(ds_priority_size(pr_list))
|
||||||
array_push(res, ds_priority_delete_max(pr_list));
|
array_push(res, ds_priority_delete_max(pr_list));
|
||||||
|
|
||||||
|
@ -98,6 +110,18 @@ function pxl_autocomplete_server(prompt, params = []) {
|
||||||
|
|
||||||
ds_priority_add(pr_list, [[THEME.ac_constant, 0], _key, sp[0], $"{sp[0]}.{_key}"], match);
|
ds_priority_add(pr_list, [[THEME.ac_constant, 0], _key, sp[0], $"{sp[0]}.{_key}"], match);
|
||||||
}
|
}
|
||||||
|
} else if(sp[0] == "self" && array_length(sp) == 2) {
|
||||||
|
var _val = context[$ "node_values"];
|
||||||
|
var _arr = variable_struct_get_names(_val);
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(_arr); i < n; i++ ) {
|
||||||
|
var _key = _arr[i];
|
||||||
|
var match = string_partial_match(string_lower(_key), string_lower(sp[1]));
|
||||||
|
if(match == -9999 && sp[1] != "")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ds_priority_add(pr_list, [[THEME.ac_constant, 2], _key, "self", $"{sp[0]}.{_key}"], match);
|
||||||
|
}
|
||||||
} else if(ds_map_exists(PROJECT.nodeNameMap, sp[0])) {
|
} else if(ds_map_exists(PROJECT.nodeNameMap, sp[0])) {
|
||||||
if(array_length(sp) == 2) {
|
if(array_length(sp) == 2) {
|
||||||
for( var i = 0, n = array_length(global.NODE_SUB_CATAG); i < n; i++ ) {
|
for( var i = 0, n = array_length(global.NODE_SUB_CATAG); i < n; i++ ) {
|
||||||
|
|
|
@ -58,9 +58,14 @@ function string_real(val, digMax = 999) { #region
|
||||||
function string_char_last(str, shift = 0) { #region
|
function string_char_last(str, shift = 0) { #region
|
||||||
gml_pragma("forceinline");
|
gml_pragma("forceinline");
|
||||||
return string_char_at(str, string_length(str) - shift);
|
return string_char_at(str, string_length(str) - shift);
|
||||||
} #region
|
} #endregion
|
||||||
|
|
||||||
function filename_name_only(name) { #region
|
function filename_name_only(name) { #region
|
||||||
name = filename_name(name);
|
name = filename_name(name);
|
||||||
return string_replace(name, filename_ext(name), "")
|
return string_replace(name, filename_ext(name), "")
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
function string_to_var(str) { #region
|
||||||
|
gml_pragma("forceinline");
|
||||||
|
return string_replace_all(string_lower(str), " ", "_");
|
||||||
|
} #endregion
|
|
@ -51,6 +51,7 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
|
||||||
autocomplete_box.textbox = self;
|
autocomplete_box.textbox = self;
|
||||||
autocomplete_server = noone;
|
autocomplete_server = noone;
|
||||||
autocomplete_object = noone;
|
autocomplete_object = noone;
|
||||||
|
autocomplete_context = {};
|
||||||
|
|
||||||
function_guide_box = instance_create(0, 0, o_dialog_textbox_function_guide);
|
function_guide_box = instance_create(0, 0, o_dialog_textbox_function_guide);
|
||||||
function_guide_box.textbox = self;
|
function_guide_box.textbox = self;
|
||||||
|
@ -103,11 +104,11 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
|
||||||
var slp = string_splice(crop, [" ", "(", "[", "{", ",", "\n"]);
|
var slp = string_splice(crop, [" ", "(", "[", "{", ",", "\n"]);
|
||||||
var pmt = array_safe_get(slp, -1,, ARRAY_OVERFLOW.loop);
|
var pmt = array_safe_get(slp, -1,, ARRAY_OVERFLOW.loop);
|
||||||
|
|
||||||
var params = [];
|
var localParams = [];
|
||||||
if(parser_server != noone)
|
if(parser_server != noone)
|
||||||
params = parser_server(crop, autocomplete_object);
|
localParams = parser_server(crop, autocomplete_object);
|
||||||
|
|
||||||
var data = autocomplete_server(pmt, params);
|
var data = autocomplete_server(pmt, localParams, autocomplete_context);
|
||||||
|
|
||||||
if(array_length(data)) {
|
if(array_length(data)) {
|
||||||
autocomplete_box.data = data;
|
autocomplete_box.data = data;
|
||||||
|
|
Loading…
Reference in a new issue