This commit is contained in:
Tanasart 2024-08-18 18:13:40 +07:00
parent e888c23d45
commit 6fe517245a
12 changed files with 283 additions and 307 deletions

View file

@ -57,27 +57,30 @@ if(!ready) exit;
if(_hovering_ch && is_instanceof(_menuItem, MenuItem)) { if(_hovering_ch && is_instanceof(_menuItem, MenuItem)) {
if(_menuItem.active && _lclick) { if(_menuItem.active && _lclick) {
var _par = _menuItem.params;
var _dat = {
_x: dialog_x,
x: dialog_x + dialog_w,
y: yy,
name: _menuItem.name,
index: i,
depth: depth,
context: context,
params: _menuItem.params,
};
if(_menuItem.isShelf) { if(_menuItem.isShelf) {
var _dat = {
_x: dialog_x,
x: dialog_x + dialog_w,
y: yy,
depth: depth,
name: _menuItem.name,
index: i,
context: context,
params: _menuItem.params,
};
var _res = _menuItem.func(_dat); var _res = _menuItem.func(_dat);
array_push(children, _res.id); // open child array_push(children, _res.id); // open child
} else if(remove_parents) { } else if(remove_parents) {
_menuItem.func(); if(_par == noone) _menuItem.func();
else _menuItem.func(_par);
instance_destroy(o_dialog_menubox); // close all instance_destroy(o_dialog_menubox); // close all
} else { } else {
_menuItem.func(); if(_par == noone) _menuItem.func();
else _menuItem.func(_par);
instance_destroy(); // close self instance_destroy(); // close self
} }

View file

@ -37,23 +37,18 @@ function addonContextGenerator(_addon, _function) constructor {
} }
function addonContextItem(_addon, _name, _function) constructor { function addonContextItem(_addon, _name, _function) constructor {
self._addon = _addon; self._addon = _addon;
self._name = _name; self._name = _name;
self._function = _function; self._function = _function;
menu_item = menuItem(_name, function(_data) { menu_item = menuItem(_name, function(_data) { lua_call(_addon.thread, self._function, lua_byref(_data.context, true)); });
lua_call(_addon.thread, self._function, lua_byref(_data.context, true));
})//.setColor(COLORS._main_accent);
} }
function addonContextSubMenu(_name, _content) constructor { function addonContextSubMenu(_name, _content) constructor {
self.name = _name; self.name = _name;
self.content = _content; self.content = _content;
menu_item = menuItem(name, function(_dat) { menu_item = menuItem(name, function(_dat) { return submenuCall(_dat, content); }).setIsShelf();
return submenuCall(_dat, content);
})//.setColor(COLORS._main_accent)
.setIsShelf();
} }
function addonTrigger(_addon, _openDialog = true) { function addonTrigger(_addon, _openDialog = true) {

View file

@ -44,7 +44,7 @@ function submenuCall(_data = undefined, menu = []) {
if(is_undefined(_data)) return menuCall("", menu); if(is_undefined(_data)) return menuCall("", menu);
var dia = instance_create_depth(_data.x - ui(4), _data.y, _data.depth - 1, o_dialog_menubox); var dia = instance_create_depth(_data.x - ui(4), _data.y, _data.depth - 1, o_dialog_menubox);
dia.context = _data.context; dia.context = _data.context;
dia.setMenu(menu); dia.setMenu(menu);
if(_data.x - ui(4) + dia.dialog_w > WIN_W - ui(2)) if(_data.x - ui(4) + dia.dialog_w > WIN_W - ui(2))
@ -61,7 +61,8 @@ function fileNameCall(path, onModify, _x = mouse_mx + 8, _y = mouse_my + 8) {
return dia; return dia;
} }
function menuItem(name, func, spr = noone, hotkey = noone, toggle = noone, params = {}) { return new MenuItem(name, func, spr, hotkey, toggle, params); } function menuItem( name, func, spr = noone, hotkey = noone, toggle = noone, params = {}) { return new MenuItem(name, func, spr, hotkey, toggle, params); }
function menuItemShelf(name, func, spr = noone, hotkey = noone, toggle = noone, params = {}) { return new MenuItem(name, func, spr, hotkey, toggle, params).setIsShelf(); }
function MenuItem(_name, _func, _spr = noone, _hotkey = noone, _toggle = noone, _params = {}) constructor { function MenuItem(_name, _func, _spr = noone, _hotkey = noone, _toggle = noone, _params = {}) constructor {
active = true; active = true;

View file

@ -3,7 +3,6 @@
#macro INAME internalName == ""? name : internalName #macro INAME internalName == ""? name : internalName
#macro SHOW_PARAM (show_parameter && previewable) #macro SHOW_PARAM (show_parameter && previewable)
#macro NODE_SET_INPUT_SIZE input_list_size = array_length(inputs); output_list_size = array_length(outputs);
enum CACHE_USE { enum CACHE_USE {
none, none,
@ -147,9 +146,6 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
outputMap = ds_map_create(); outputMap = ds_map_create();
input_value_map = {}; input_value_map = {};
input_list_size = 0;
output_list_size = 0;
use_display_list = true; use_display_list = true;
input_display_list = -1; input_display_list = -1;
output_display_list = -1; output_display_list = -1;
@ -201,9 +197,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
run_in(1, function() { run_in(1, function() {
input_buttons = []; input_buttons = [];
NODE_SET_INPUT_SIZE
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var _in = inputs[i]; var _in = inputs[i];
if(!is_instanceof(_in, NodeValue)) continue; if(!is_instanceof(_in, NodeValue)) continue;
if(_in.type != VALUE_TYPE.trigger) continue; if(_in.type != VALUE_TYPE.trigger) continue;
@ -343,19 +338,18 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
var type_self = instanceof(self); var type_self = instanceof(self);
if(!struct_has(global.NODE_GUIDE, type_self)) return; if(!struct_has(global.NODE_GUIDE, type_self)) return;
NODE_SET_INPUT_SIZE
var _n = global.NODE_GUIDE[$ type_self]; var _n = global.NODE_GUIDE[$ type_self];
var _ins = _n.inputs; var _ins = _n.inputs;
var _ots = _n.outputs; var _ots = _n.outputs;
var amo = min(input_list_size, array_length(_ins)); var amo = min(array_length(inputs), array_length(_ins));
for( var i = 0; i < amo; i++ ) { for( var i = 0; i < amo; i++ ) {
inputs[i].name = _ins[i].name; inputs[i].name = _ins[i].name;
inputs[i].tooltip = _ins[i].tooltip; inputs[i].tooltip = _ins[i].tooltip;
} }
var amo = min(output_list_size, array_length(_ots)); var amo = min(array_length(outputs), array_length(_ots));
for( var i = 0; i < amo; i++ ) { for( var i = 0; i < amo; i++ ) {
outputs[i].name = _ots[i].name; outputs[i].name = _ots[i].name;
outputs[i].tooltip = _ots[i].tooltip; outputs[i].tooltip = _ots[i].tooltip;
@ -406,7 +400,6 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
static refreshDynamicInput = function() { static refreshDynamicInput = function() {
NODE_SET_INPUT_SIZE
var _in = []; var _in = [];
for( var i = 0; i < input_fix_len; i++ ) for( var i = 0; i < input_fix_len; i++ )
@ -415,7 +408,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
input_display_list = array_clone(input_display_list_raw, 1); input_display_list = array_clone(input_display_list_raw, 1);
var sep = false; var sep = false;
for( var i = input_fix_len; i < input_list_size; i += data_length ) { for( var i = input_fix_len; i < array_length(inputs); i += data_length ) {
var _active = false; var _active = false;
var _inp = inputs[i + dyna_input_check_shift]; var _inp = inputs[i + dyna_input_check_shift];
@ -454,7 +447,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
static getInputAmount = function() { return (input_list_size - input_fix_len) / data_length; } static getInputAmount = function() { return (array_length(inputs) - input_fix_len) / data_length; }
function onInputResize() { refreshDynamicInput(); triggerRender(); } function onInputResize() { refreshDynamicInput(); triggerRender(); }
@ -462,7 +455,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
var _targ = noone; var _targ = noone;
var _dy = 9999; var _dy = 9999;
for( var i = 0; i < output_list_size; i++ ) { for( var i = 0; i < array_length(outputs); i++ ) {
if(!outputs[i].isVisible()) continue; if(!outputs[i].isVisible()) continue;
if(junc != noone && !junc.isConnectable(outputs[i], true)) continue; if(junc != noone && !junc.isConnectable(outputs[i], true)) continue;
@ -476,12 +469,11 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
static getInput = function(_y = 0, junc = noone, shift = input_fix_len) { static getInput = function(_y = 0, junc = noone, shift = input_fix_len) {
NODE_SET_INPUT_SIZE
var _targ = noone; var _targ = noone;
var _dy = 9999; var _dy = 9999;
for( var i = shift; i < input_list_size; i++ ) { for( var i = shift; i < array_length(inputs); i++ ) {
var _inp = inputs[i]; var _inp = inputs[i];
if(!_inp.isVisible()) continue; if(!_inp.isVisible()) continue;
@ -531,7 +523,6 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
/////============= STEP ============= /////============= STEP =============
static stepBegin = function() { static stepBegin = function() {
NODE_SET_INPUT_SIZE
if(use_cache) cacheArrayCheck(); if(use_cache) cacheArrayCheck();
@ -607,16 +598,15 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
return jun_list_arr; return jun_list_arr;
} }
static getOutputJunctionAmount = function() { return output_display_list == -1? output_list_size : array_length(output_display_list); } static getOutputJunctionAmount = function() { return output_display_list == -1? array_length(outputs) : array_length(output_display_list); }
static getOutputJunctionIndex = function(index) { return output_display_list == -1? index : output_display_list[index]; } static getOutputJunctionIndex = function(index) { return output_display_list == -1? index : output_display_list[index]; }
static updateIO = function() { static updateIO = function() {
NODE_SET_INPUT_SIZE
for( var i = 0, n = input_list_size; i < n; i++ ) for( var i = 0, n = array_length(inputs); i < n; i++ )
inputs[i].visible_in_list = false; inputs[i].visible_in_list = false;
inputs_amount = (input_display_list == -1 || !use_display_list)? input_list_size : array_length(input_display_list); inputs_amount = (input_display_list == -1 || !use_display_list)? array_length(inputs) : array_length(input_display_list);
inputs_index = []; inputs_index = [];
for( var i = 0; i < inputs_amount; i++ ) { for( var i = 0; i < inputs_amount; i++ ) {
@ -631,19 +621,18 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
inputs_amount = array_length(inputs_index); inputs_amount = array_length(inputs_index);
outputs_amount = output_display_list == -1? output_list_size : array_length(output_display_list); outputs_amount = output_display_list == -1? array_length(outputs) : array_length(output_display_list);
outputs_index = array_create_ext(outputs_amount, function(index) { return getOutputJunctionIndex(index); }); outputs_index = array_create_ext(outputs_amount, function(index) { return getOutputJunctionIndex(index); });
} run_in(1, function() /*=>*/ { updateIO() }); } run_in(1, function() /*=>*/ { updateIO() });
static setHeight = function() { static setHeight = function() {
NODE_SET_INPUT_SIZE
w = SHOW_PARAM? attributes.node_param_width : min_w; w = SHOW_PARAM? attributes.node_param_width : min_w;
if(!auto_height) return; if(!auto_height) return;
var _ss = getGraphPreviewSurface(); var _ss = getGraphPreviewSurface();
var _ps = is_surface(_ss); var _ps = is_surface(_ss);
var _ou = preview_channel >= 0 && preview_channel < output_list_size && outputs[preview_channel].type == VALUE_TYPE.surface; var _ou = preview_channel >= 0 && preview_channel < array_length(outputs) && outputs[preview_channel].type == VALUE_TYPE.surface;
var _prev_surf = previewable && preview_draw && (_ps || _ou); var _prev_surf = previewable && preview_draw && (_ps || _ou);
junction_draw_hei_y = SHOW_PARAM? 32 : 24; junction_draw_hei_y = SHOW_PARAM? 32 : 24;
@ -669,7 +658,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
var _p = previewable; var _p = previewable;
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var _inp = inputs[i]; var _inp = inputs[i];
if(is_instanceof(_inp, NodeValue) && _inp.isVisible()) { if(is_instanceof(_inp, NodeValue) && _inp.isVisible()) {
if(_p) _hi += junction_draw_hei_y; if(_p) _hi += junction_draw_hei_y;
@ -680,13 +669,13 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(auto_input && dummy_input) _hi += junction_draw_hei_y; if(auto_input && dummy_input) _hi += junction_draw_hei_y;
var _p = previewable; var _p = previewable;
for( var i = 0; i < output_list_size; i++ ) { for( var i = 0; i < array_length(outputs); i++ ) {
if(!outputs[i].isVisible()) continue; if(!outputs[i].isVisible()) continue;
if(_p) _ho += junction_draw_hei_y; if(_p) _ho += junction_draw_hei_y;
_p = true; _p = true;
} }
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var _inp = inputs[i]; var _inp = inputs[i];
var _byp = _inp.bypass_junc; var _byp = _inp.bypass_junc;
if(_byp == noone) continue; if(_byp == noone) continue;
@ -700,9 +689,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
static getJunctionList = function() { ////getJunctionList static getJunctionList = function() { ////getJunctionList
NODE_SET_INPUT_SIZE
var amo = input_display_list == -1? input_list_size : array_length(input_display_list); var amo = input_display_list == -1? array_length(inputs) : array_length(input_display_list);
inputDisplayList = []; inputDisplayList = [];
for(var i = 0; i < amo; i++) { for(var i = 0; i < amo; i++) {
@ -720,13 +708,12 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
static onValidate = function() { static onValidate = function() {
NODE_SET_INPUT_SIZE
value_validation[VALIDATION.pass] = 0; value_validation[VALIDATION.pass] = 0;
value_validation[VALIDATION.warning] = 0; value_validation[VALIDATION.warning] = 0;
value_validation[VALIDATION.error] = 0; value_validation[VALIDATION.error] = 0;
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var jun = inputs[i]; var jun = inputs[i];
if(jun.value_validation) if(jun.value_validation)
value_validation[jun.value_validation]++; value_validation[jun.value_validation]++;
@ -734,20 +721,19 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
static getJunctionTos = function() { static getJunctionTos = function() {
var _vto = array_create(output_list_size); var _vto = array_create(array_length(outputs));
for (var j = 0; j < output_list_size; j++) for (var j = 0; j < array_length(outputs); j++)
_vto[j] = array_clone(outputs[j].value_to); _vto[j] = array_clone(outputs[j].value_to);
return _vto; return _vto;
} }
static checkConnectGroup = function(_io) { static checkConnectGroup = function(_io) {
NODE_SET_INPUT_SIZE
var _y = y; var _y = y;
var _n = noone; var _n = noone;
for(var i = 0; i < input_list_size; i++) { for(var i = 0; i < array_length(inputs); i++) {
var _in = inputs[i]; var _in = inputs[i];
if(_in.value_from == noone) continue; if(_in.value_from == noone) continue;
if(_in.value_from.node.group == group) continue; if(_in.value_from.node.group == group) continue;
@ -761,7 +747,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
_io.inputs[$ _ind ] = [ _in ]; _io.inputs[$ _ind ] = [ _in ];
} }
for(var i = 0; i < output_list_size; i++) { for(var i = 0; i < array_length(outputs); i++) {
var _ou = outputs[i]; var _ou = outputs[i];
for(var j = 0; j < array_length(_ou.value_to); j++) { for(var j = 0; j < array_length(_ou.value_to); j++) {
@ -789,10 +775,9 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
static resetDefault = function() { static resetDefault = function() {
var folder = instanceof(self); var folder = instanceof(self);
NODE_SET_INPUT_SIZE
if(!ds_map_exists(global.PRESETS_MAP, folder)) { if(!ds_map_exists(global.PRESETS_MAP, folder)) {
for( var i = 0, n = input_list_size; i < n; i++ ) for( var i = 0, n = array_length(inputs); i < n; i++ )
inputs[i].resetValue(); inputs[i].resetValue();
return; return;
} }
@ -807,7 +792,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
return; return;
} }
for( var i = 0, n = input_list_size; i < n; i++ ) for( var i = 0, n = array_length(inputs); i < n; i++ )
inputs[i].resetValue(); inputs[i].resetValue();
} if(!APPENDING && !LOADING) run_in(1, function() /*=>*/ { if(set_default) resetDefault() }); } if(!APPENDING && !LOADING) run_in(1, function() /*=>*/ { if(set_default) resetDefault() });
@ -829,9 +814,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
// } // }
static getInputs = function(frame = CURRENT_FRAME) { static getInputs = function(frame = CURRENT_FRAME) {
NODE_SET_INPUT_SIZE
inputs_data = array_verify(inputs_data, input_list_size); inputs_data = array_verify(inputs_data, array_length(inputs));
__frame = frame; __frame = frame;
array_foreach(inputs, function(_inp, i) /*=>*/ { array_foreach(inputs, function(_inp, i) /*=>*/ {
@ -856,7 +840,6 @@ 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 doUpdate = function(frame = CURRENT_FRAME) {
NODE_SET_INPUT_SIZE
if(PROJECT.safeMode) return; if(PROJECT.safeMode) return;
if(NODE_EXTRACT) return; if(NODE_EXTRACT) return;
@ -897,7 +880,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
cached_manual = false; cached_manual = false;
if(!use_cache && PROJECT.onion_skin.enabled) { if(!use_cache && PROJECT.onion_skin.enabled) {
for( var i = 0; i < output_list_size; i++ ) { for( var i = 0; i < array_length(outputs); i++ ) {
if(outputs[i].type != VALUE_TYPE.surface) continue; if(outputs[i].type != VALUE_TYPE.surface) continue;
cacheCurrentFrame(outputs[i].getValue()); cacheCurrentFrame(outputs[i].getValue());
break; break;
@ -947,7 +930,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
__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 < input_list_size; i++) // for(var i = 0; i < array_length(inputs); i++)
// if(inputs[i].isActiveDynamic(frame)) return true; // if(inputs[i].isActiveDynamic(frame)) return true;
// return false; // return false;
@ -977,7 +960,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
static forwardPassiveDynamic = function() { static forwardPassiveDynamic = function() {
rendered = false; rendered = false;
for( var i = 0, n = output_list_size; i < n; i++ ) { for( var i = 0, n = array_length(outputs); i < n; i++ ) {
var _outp = outputs[i]; var _outp = outputs[i];
for(var j = 0; j < array_length(_outp.value_to); j++) { for(var j = 0; j < array_length(_outp.value_to); j++) {
@ -999,7 +982,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
static isLeaf = function() { static isLeaf = function() {
INLINE INLINE
for( var i = 0, n = input_list_size; i < n; i++ ) { for( var i = 0, n = array_length(inputs); i < n; i++ ) {
var _inp = inputs[i]; var _inp = inputs[i];
if(!_inp.value_from == noone) return false; if(!_inp.value_from == noone) return false;
} }
@ -1012,7 +995,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(list == noone) return isLeaf(); if(list == noone) return isLeaf();
for( var i = 0, n = input_list_size; i < n; i++ ) { for( var i = 0, n = array_length(inputs); i < n; i++ ) {
var _inp = inputs[i].value_from; var _inp = inputs[i].value_from;
if(_inp != noone && array_exists(list, _inp.node)) if(_inp != noone && array_exists(list, _inp.node))
@ -1027,7 +1010,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
static isRenderable = function(log = false) { //Check if every input is ready (updated) static isRenderable = function(log = false) { //Check if every input is ready (updated)
if(!active || !isRenderActive()) return false; if(!active || !isRenderActive()) return false;
for(var j = 0; j < input_list_size; j++) for(var j = 0; j < array_length(inputs); j++)
if(!inputs[j].isRendered()) return false; if(!inputs[j].isRendered()) return false;
return true; return true;
@ -1048,7 +1031,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(attributes.show_update_trigger && updatedInTrigger.value_from) if(attributes.show_update_trigger && updatedInTrigger.value_from)
array_push(prev, updatedInTrigger.value_from.node); array_push(prev, updatedInTrigger.value_from.node);
for( var i = 0, n = input_list_size; i < n; i++ ) { for( var i = 0, n = array_length(inputs); i < n; i++ ) {
var _in = inputs[i]; var _in = inputs[i];
if(_in.value_from != noone) { if(_in.value_from != noone) {
@ -1078,7 +1061,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
LOG_BLOCK_START(); LOG_BLOCK_START();
LOG_IF(global.FLAG.render == 1, $"→→→→→ Call get next node from: {INAME}"); LOG_IF(global.FLAG.render == 1, $"→→→→→ Call get next node from: {INAME}");
for(var i = 0; i < output_list_size; 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;
@ -1103,7 +1086,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
} }
for(var i = 0; i < input_list_size; i++) { for(var i = 0; i < array_length(inputs); i++) {
var _in = inputs[i]; var _in = inputs[i];
if(_in.bypass_junc == noone) continue; if(_in.bypass_junc == noone) continue;
@ -1125,7 +1108,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
static getNextNodesRaw = function() { static getNextNodesRaw = function() {
var nodes = []; var nodes = [];
for(var i = 0; i < output_list_size; 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;
if(_ot.type == VALUE_TYPE.node) continue; if(_ot.type == VALUE_TYPE.node) continue;
@ -1143,7 +1126,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
array_push(nodes, _tos[j].node); array_push(nodes, _tos[j].node);
} }
for(var i = 0; i < input_list_size; i++) { for(var i = 0; i < array_length(inputs); i++) {
var _in = inputs[i]; var _in = inputs[i];
if(_in.bypass_junc == noone) continue; if(_in.bypass_junc == noone) continue;
@ -1190,7 +1173,6 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} run_in(1, function() { refreshNodeDisplay(); }); } run_in(1, function() { refreshNodeDisplay(); });
static preDraw = function(_x, _y, _s) { static preDraw = function(_x, _y, _s) {
NODE_SET_INPUT_SIZE
var xx = x * _s + _x; var xx = x * _s + _x;
var yy = y * _s + _y; var yy = y * _s + _y;
@ -1216,11 +1198,11 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
updatedOutTrigger.x = xx + w * _s; updatedOutTrigger.x = xx + w * _s;
updatedOutTrigger.y = yy + 10; updatedOutTrigger.y = yy + 10;
if(in_cache_len != array_length(inputDisplayList) || out_cache_len != output_list_size) { if(in_cache_len != array_length(inputDisplayList) || out_cache_len != array_length(outputs)) {
refreshNodeDisplay(); refreshNodeDisplay();
in_cache_len = array_length(inputDisplayList); in_cache_len = array_length(inputDisplayList);
out_cache_len = output_list_size; out_cache_len = array_length(outputs);
} }
var _junRy = junction_draw_pad_y; var _junRy = junction_draw_pad_y;
@ -1236,7 +1218,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
var rx = x; var rx = x;
var ry = y + _junRy; var ry = y + _junRy;
for( var i = 0, n = input_list_size; i < n; i++ ) { for( var i = 0, n = array_length(inputs); i < n; i++ ) {
jun = inputs[i]; jun = inputs[i];
jun.x = _ix; jun.rx = rx; jun.x = _ix; jun.rx = rx;
@ -1270,7 +1252,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
ry += junction_draw_hei_y * jun.isVisible(); ry += junction_draw_hei_y * jun.isVisible();
} }
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var _inp = inputs[i]; var _inp = inputs[i];
var jun = _inp.bypass_junc; var jun = _inp.bypass_junc;
if(jun == noone) continue; if(jun == noone) continue;
@ -1470,14 +1452,14 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(jun.drawJunction(_s, _mx, _my)) hover = jun; if(jun.drawJunction(_s, _mx, _my)) hover = jun;
} }
for(var i = 0; i < output_list_size; i++) { for(var i = 0; i < array_length(outputs); i++) {
var jun = outputs[i]; var jun = outputs[i];
if(!jun.isVisible()) continue; if(!jun.isVisible()) continue;
if(jun.drawJunction(_s, _mx, _my)) hover = jun; if(jun.drawJunction(_s, _mx, _my)) hover = jun;
} }
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var _inp = inputs[i]; var _inp = inputs[i];
var jun = _inp.bypass_junc; var jun = _inp.bypass_junc;
@ -1510,14 +1492,14 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(jun.drawJunction_fast(_s, _mx, _my)) hover = jun; if(jun.drawJunction_fast(_s, _mx, _my)) hover = jun;
} }
for(var i = 0; i < output_list_size; i++) { for(var i = 0; i < array_length(outputs); i++) {
var jun = outputs[i]; var jun = outputs[i];
if(!jun.isVisible()) continue; if(!jun.isVisible()) continue;
if(jun.drawJunction_fast(_s, _mx, _my)) hover = jun; if(jun.drawJunction_fast(_s, _mx, _my)) hover = jun;
} }
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var _inp = inputs[i]; var _inp = inputs[i];
var jun = _inp.bypass_junc; var jun = _inp.bypass_junc;
@ -1544,7 +1526,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(draw_graph_culled) return; if(draw_graph_culled) return;
if(!active) return; if(!active) return;
var amo = input_display_list == -1? input_list_size : array_length(input_display_list); var amo = input_display_list == -1? array_length(inputs) : array_length(input_display_list);
var jun; var jun;
var xx = x * _s + _x; var xx = x * _s + _x;
@ -1579,19 +1561,19 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
if(show_output_name) { if(show_output_name) {
for(var i = 0; i < output_list_size; i++) for(var i = 0; i < array_length(outputs); i++)
if(outputs[i].isVisible()) outputs[i].drawNameBG(_s); if(outputs[i].isVisible()) outputs[i].drawNameBG(_s);
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var jun = inputs[i].bypass_junc; var jun = inputs[i].bypass_junc;
if(jun == noone || !jun.visible) continue; if(jun == noone || !jun.visible) continue;
jun.drawNameBG(_s); jun.drawNameBG(_s);
} }
for(var i = 0; i < output_list_size; i++) for(var i = 0; i < array_length(outputs); i++)
if(outputs[i].isVisible()) outputs[i].drawName(_s, _mx, _my); if(outputs[i].isVisible()) outputs[i].drawName(_s, _mx, _my);
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var jun = inputs[i].bypass_junc; var jun = inputs[i].bypass_junc;
if(jun == noone || !jun.visible) continue; if(jun == noone || !jun.visible) continue;
jun.drawName(_s, _mx, _my); jun.drawName(_s, _mx, _my);
@ -1619,7 +1601,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
var high = params.highlight; // 0 var high = params.highlight; // 0
var bg = params.bg; // 0 var bg = params.bg; // 0
for(var i = 0; i < output_list_size; i++) { for(var i = 0; i < array_length(outputs); i++) {
var jun = outputs[i]; var jun = outputs[i];
var connected = false; var connected = false;
@ -1643,7 +1625,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
__draw_inputs = array_verify(__draw_inputs, input_list_size); __draw_inputs = array_verify(__draw_inputs, array_length(inputs));
var _len = 0; var _len = 0;
var _jun, _hov; var _jun, _hov;
@ -1658,7 +1640,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
var drawLineIndex = 1; var drawLineIndex = 1;
for(var i = 0, n = input_list_size; i < n; i++) { for(var i = 0, n = array_length(inputs); i < n; i++) {
_jun = inputs[i]; _jun = inputs[i];
_jun.draw_blend_color = bg; _jun.draw_blend_color = bg;
_jun.draw_blend = high? PREFERENCES.connection_line_highlight_fade : -1; _jun.draw_blend = high? PREFERENCES.connection_line_highlight_fade : -1;
@ -1670,7 +1652,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(i >= 0) __draw_inputs[_len++] = _jun; if(i >= 0) __draw_inputs[_len++] = _jun;
} }
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
var jun = inputs[i].bypass_junc; var jun = inputs[i].bypass_junc;
if(jun == noone || !jun.visible) continue; if(jun == noone || !jun.visible) continue;
jun.drawBypass(params); jun.drawBypass(params);
@ -1956,7 +1938,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(!PREFERENCES.connection_line_highlight_all && _depth == 1) return; if(!PREFERENCES.connection_line_highlight_all && _depth == 1) return;
for( var i = 0, n = input_list_size; i < n; i++ ) { for( var i = 0, n = array_length(inputs); i < n; i++ ) {
if(inputs[i].value_from == noone) continue; if(inputs[i].value_from == noone) continue;
inputs[i].value_from.node.drawBranch(_depth + 1); inputs[i].value_from.node.drawBranch(_depth + 1);
} }
@ -1976,7 +1958,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
/////============ PREVIEW ============ /////============ PREVIEW ============
static getPreviewValues = function() { static getPreviewValues = function() {
if(preview_channel >= output_list_size) return noone; if(preview_channel >= array_length(outputs)) return noone;
var _type = outputs[preview_channel].type; var _type = outputs[preview_channel].type;
if(_type != VALUE_TYPE.surface && _type != VALUE_TYPE.dynaSurface) if(_type != VALUE_TYPE.surface && _type != VALUE_TYPE.dynaSurface)
@ -2010,7 +1992,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
static getAnimationCacheExist = function(frame) { return cacheExist(frame); } static getAnimationCacheExist = function(frame) { return cacheExist(frame); }
static clearInputCache = function() { static clearInputCache = function() {
for( var i = 0; i < input_list_size; i++ ) for( var i = 0; i < array_length(inputs); i++ )
inputs[i].cache_value[0] = false; inputs[i].cache_value[0] = false;
} }
@ -2097,7 +2079,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(group != _group) return; if(group != _group) return;
setRenderStatus(true); setRenderStatus(true);
for( var i = 0, n = input_list_size; i < n; i++ ) { for( var i = 0, n = array_length(inputs); i < n; i++ ) {
var _input = inputs[i]; var _input = inputs[i];
if(_input.value_from == noone) continue; if(_input.value_from == noone) continue;
@ -2106,7 +2088,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} }
static clearInputCache = function() { static clearInputCache = function() {
for( var i = 0; i < input_list_size; i++ ) { for( var i = 0; i < array_length(inputs); i++ ) {
if(!is_instanceof(inputs[i], NodeValue)) continue; if(!is_instanceof(inputs[i], NodeValue)) continue;
inputs[i].resetCache(); inputs[i].resetCache();
} }

View file

@ -4,11 +4,11 @@ function Node_Monitor_Capture(_x, _y, _group = noone) : Node(_x, _y, _group) con
monitors = display_measure_all(); monitors = display_measure_all();
inputs[0] = nodeValue_Enum_Scroll("Mode", self, 0, [ "Monitor", "Region" ]); newInput(0, nodeValue_Enum_Scroll("Mode", self, 0, [ "Monitor", "Region" ]));
inputs[1] = nodeValue_Enum_Scroll("Monitor", self, 0, array_create_ext(array_length(monitors), function(ind) { return monitors[ind][9]; })); newInput(1, nodeValue_Enum_Scroll("Monitor", self, 0, array_create_ext(array_length(monitors), function(ind) /*=>*/ {return monitors[ind][9]})));
inputs[2] = nodeValue_Vec4("Region", self, [ 0, 0, display_get_width(), display_get_height() ]); newInput(2, nodeValue_Vec4("Region", self, [ 0, 0, display_get_width(), display_get_height() ]));
outputs[0] = nodeValue_Output("GUI", self, VALUE_TYPE.surface, noone); outputs[0] = nodeValue_Output("GUI", self, VALUE_TYPE.surface, noone);

View file

@ -152,7 +152,7 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
for(var l = 0; l < process_amount; l++) { for(var l = 0; l < process_amount; l++) {
for(var i = input_list_size - 1; i >= 0; i--) for(var i = array_length(inputs) - 1; i >= 0; i--)
_data[i] = all_inputs[i][l]; _data[i] = all_inputs[i][l];
if(_output.type == VALUE_TYPE.surface) { #region // Output surface verification if(_output.type == VALUE_TYPE.surface) { #region // Output surface verification
@ -305,11 +305,9 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
static preGetInputs = function() {} static preGetInputs = function() {}
static getInputs = function() { static getInputs = function() {
NODE_SET_INPUT_SIZE
preGetInputs(); preGetInputs();
var _len = input_list_size; var _len = array_length(inputs);
process_amount = 1; process_amount = 1;
inputs_data = array_verify(inputs_data, _len); inputs_data = array_verify(inputs_data, _len);

View file

@ -1,35 +1,35 @@
function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "Skew"; name = "Skew";
inputs[0] = nodeValue_Surface("Surface in", self); newInput(0, nodeValue_Surface("Surface in", self));
inputs[1] = nodeValue_Enum_Button("Axis", self, 0, ["x", "y"]); newInput(1, nodeValue_Enum_Button("Axis", self, 0, ["x", "y"]));
newInput(2, nodeValue_Float("Strength", self, 0)) newInput(2, nodeValue_Float("Strength", self, 0))
.setDisplay(VALUE_DISPLAY.slider, { range: [-1, 1, 0.01] }) .setDisplay(VALUE_DISPLAY.slider, { range: [-1, 1, 0.01] })
.setMappable(12); .setMappable(12);
inputs[3] = nodeValue_Bool("Wrap", self, false); newInput(3, nodeValue_Bool("Wrap", self, false));
newInput(4, nodeValue_Vec2("Center", self, [0, 0] , { side_button : button(function() { centerAnchor(); }).setIcon(THEME.anchor).setTooltip(__txt("Set to center")) })); newInput(4, nodeValue_Vec2("Center", self, [0, 0] , { side_button : button(function() { centerAnchor(); }).setIcon(THEME.anchor).setTooltip(__txt("Set to center")) }));
newInput(5, nodeValue_Enum_Scroll("Oversample mode", self, 0, [ "Empty", "Clamp", "Repeat" ])) newInput(5, nodeValue_Enum_Scroll("Oversample mode", self, 0, [ "Empty", "Clamp", "Repeat" ]))
.setTooltip("How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture."); .setTooltip("How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.");
inputs[6] = nodeValue_Surface("Mask", self); newInput(6, nodeValue_Surface("Mask", self));
newInput(7, nodeValue_Float("Mix", self, 1)) newInput(7, nodeValue_Float("Mix", self, 1))
.setDisplay(VALUE_DISPLAY.slider); .setDisplay(VALUE_DISPLAY.slider);
inputs[8] = nodeValue_Bool("Active", self, true); newInput(8, nodeValue_Bool("Active", self, true));
active_index = 8; active_index = 8;
inputs[9] = nodeValue_Toggle("Channel", self, 0b1111, { data: array_create(4, THEME.inspector_channel) }); newInput(9, nodeValue_Toggle("Channel", self, 0b1111, { data: array_create(4, THEME.inspector_channel) }));
__init_mask_modifier(6); // inputs 10, 11 __init_mask_modifier(6); // inputs 10, 11
////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////
inputs[12] = nodeValueMap("Strength map", self); newInput(12, nodeValueMap("Strength map", self));
////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////
@ -44,30 +44,30 @@ function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
attribute_oversample(); attribute_oversample();
attribute_interpolation(); attribute_interpolation();
static centerAnchor = function() { #region static centerAnchor = function() {
if(!is_surface(current_data[0])) return; if(!is_surface(current_data[0])) return;
var ww = surface_get_width_safe(current_data[0]); var ww = surface_get_width_safe(current_data[0]);
var hh = surface_get_height_safe(current_data[0]); var hh = surface_get_height_safe(current_data[0]);
inputs[4].setValue([ww / 2, hh / 2]); inputs[4].setValue([ww / 2, hh / 2]);
} #endregion }
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) {
PROCESSOR_OVERLAY_CHECK PROCESSOR_OVERLAY_CHECK
var _hov = false; var _hov = false;
var hv = inputs[4].drawOverlay(hover, active, _x, _y, _s, _mx, _my, _snx, _sny); _hov |= hv; var hv = inputs[4].drawOverlay(hover, active, _x, _y, _s, _mx, _my, _snx, _sny); _hov |= hv;
return _hov; return _hov;
} #endregion }
static step = function() { #region static step = function() {
__step_mask_modifier(); __step_mask_modifier();
inputs[2].mappableStep(); inputs[2].mappableStep();
} #endregion }
static processData = function(_outSurf, _data, _output_index, _array_index) { #region static processData = function(_outSurf, _data, _output_index, _array_index) {
var _samp = struct_try_get(attributes, "oversample"); var _samp = struct_try_get(attributes, "oversample");
surface_set_shader(_outSurf, sh_skew); surface_set_shader(_outSurf, sh_skew);
@ -85,5 +85,5 @@ function Node_Skew(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
_outSurf = channel_apply(_data[0], _outSurf, _data[9]); _outSurf = channel_apply(_data[0], _outSurf, _data[9]);
return _outSurf; return _outSurf;
} #endregion }
} }

View file

@ -1347,7 +1347,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var _to = value_focus.value_to[i]; var _to = value_focus.value_to[i];
var _lb = $"[{_to.node.display_name}] {_to.getName()}"; var _lb = $"[{_to.node.display_name}] {_to.getName()}";
array_push(menu, menuItem(_lb, function(data) /*=>*/ { data.params.juncTo.removeFrom(); }, THEME.cross, noone, noone, { juncTo: _to })); array_push(menu, menuItem(_lb, function(data) /*=>*/ { data.juncTo.removeFrom(); }, THEME.cross, noone, noone, { juncTo: _to }));
} }
for( var i = 0, n = array_length(value_focus.value_to_loop); i < n; i++ ) { for( var i = 0, n = array_length(value_focus.value_to_loop); i < n; i++ ) {
@ -1355,7 +1355,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var _to = value_focus.value_to_loop[i]; var _to = value_focus.value_to_loop[i];
var _lb = $"[{_to.junc_in.node.display_name}] {_to.junc_in.getName()}"; var _lb = $"[{_to.junc_in.node.display_name}] {_to.junc_in.getName()}";
array_push(menu, menuItem(_lb, function(data) /*=>*/ { data.params.juncTo.destroy(); }, _to.icon_24, noone, noone, { juncTo: _to })); array_push(menu, menuItem(_lb, function(data) /*=>*/ { data.juncTo.destroy(); }, _to.icon_24, noone, noone, { juncTo: _to }));
} }
} else { } else {
var sep = false; var sep = false;
@ -1365,7 +1365,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var _jun = value_focus.value_from; var _jun = value_focus.value_from;
var _lb = $"[{_jun.node.display_name}] {_jun.getName()}"; var _lb = $"[{_jun.node.display_name}] {_jun.getName()}";
array_push(menu, menuItem(_lb, function(data) /*=>*/ { __junction_hovering.removeFrom(); }, THEME.cross)); array_push(menu, menuItem(_lb, function() /*=>*/ { __junction_hovering.removeFrom(); }, THEME.cross));
} }
if(value_focus.value_from_loop) { if(value_focus.value_from_loop) {
@ -1373,7 +1373,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var _jun = value_focus.value_from_loop.junc_out; var _jun = value_focus.value_from_loop.junc_out;
var _lb = $"[{_jun.node.display_name}] {_jun.getName()}"; var _lb = $"[{_jun.node.display_name}] {_jun.getName()}";
array_push(menu, menuItem(_lb, function(data) /*=>*/ { __junction_hovering.removeFromLoop(); }, value_focus.value_from_loop.icon_24)); array_push(menu, menuItem(_lb, function() /*=>*/ { __junction_hovering.removeFromLoop(); }, value_focus.value_from_loop.icon_24));
} }
} }
@ -1817,8 +1817,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
var menu = [ var menu = [
menuItem("Feedback", function(data) { menuItem("Feedback", function(data) {
var junc_in = data.params.junc_in; var junc_in = data.junc_in;
var junc_out = data.params.junc_out; var junc_out = data.junc_out;
var feed = nodeBuild("Node_Feedback_Inline", 0, 0).skipDefault(); var feed = nodeBuild("Node_Feedback_Inline", 0, 0).skipDefault();
// feed.connectJunctions(junc_in, junc_out); // feed.connectJunctions(junc_in, junc_out);
@ -1826,18 +1826,18 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
feed.attributes.junc_out = [ junc_out.node.node_id, junc_out.index ]; feed.attributes.junc_out = [ junc_out.node.node_id, junc_out.index ];
feed.scanJunc(); feed.scanJunc();
}, THEME.feedback_24,,, { junc_in : _connect[1], junc_out : _connect[2] }), }, THEME.feedback_24, noone, noone, { junc_in : _connect[1], junc_out : _connect[2] }),
menuItem("Loop", function(data) { menuItem("Loop", function(data) {
var junc_in = data.params.junc_in; var junc_in = data.junc_in;
var junc_out = data.params.junc_out; var junc_out = data.junc_out;
var feed = nodeBuild("Node_Iterate_Inline", 0, 0).skipDefault(); var feed = nodeBuild("Node_Iterate_Inline", 0, 0).skipDefault();
feed.attributes.junc_in = [ junc_in .node.node_id, junc_in .index ]; feed.attributes.junc_in = [ junc_in .node.node_id, junc_in .index ];
feed.attributes.junc_out = [ junc_out.node.node_id, junc_out.index ]; feed.attributes.junc_out = [ junc_out.node.node_id, junc_out.index ];
feed.scanJunc(); feed.scanJunc();
}, THEME.loop_24,,, { junc_in : _connect[1], junc_out : _connect[2] }), }, THEME.loop_24, noone, noone, { junc_in : _connect[1], junc_out : _connect[2] }),
]; ];
menuCall("", menu); menuCall("", menu);

View file

@ -741,124 +741,121 @@ function Panel_Inspector() : PanelContent() constructor {
else jun = _inspecting.output_display_list[_oi]; else jun = _inspecting.output_display_list[_oi];
} }
#region draw custom displayer if(is_instanceof(jun, Inspector_Spacer)) { // SPACER
var _hh = ui(jun.h);
if(is_instanceof(jun, Inspector_Spacer)) { // SPACER var _yy = yy + _hh / 2 - ui(2);
var _hh = ui(jun.h);
var _yy = yy + _hh / 2 - ui(2);
if(jun.line) {
draw_set_color(COLORS.panel_inspector_key_separator);
draw_line(ui(8), _yy, con_w - ui(8), _yy);
}
hh += _hh;
continue;
} else if(is_instanceof(jun, Inspector_Sprite)) { // SPRITE
var _spr = jun.spr;
var _sh = sprite_get_height(_spr);
draw_sprite(_spr, 0, xc, yy);
hh += _sh + ui(8);
continue;
} else if(is_instanceof(jun, Inspector_Label)) { // TEXT
var _txt = jun.text;
draw_set_text(jun.font, fa_left, fa_top, COLORS._main_text_sub);
var _sh = string_height_ext(_txt, -1, con_w - ui(16)) + ui(16);
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, 0, yy, con_w, _sh, COLORS._main_icon_light);
draw_text_ext_add(ui(8), yy + ui(8), _txt, -1, con_w - ui(16));
hh += _sh + ui(8);
continue;
} else if(is_instanceof(jun, Inspector_Custom_Renderer)) {
jun.register(contentPane);
jun.rx = ui(16) + x;
jun.ry = top_bar_h + y;
var _wdh = jun.draw(ui(6), yy, con_w - ui(12), _m, _hover, pFOCUS) + ui(8);
if(!is_undefined(_wdh)) hh += _wdh;
continue;
} else if(is_array(jun)) { // LABEL
var pad = i && _colsp == false? ui(4) : 0
_colsp = false;
yy += pad;
var txt = __txt(jun[0]);
var coll = jun[1] && filter_text == "";
var lbh = viewMode? ui(32) : ui(26);
var togl = array_safe_get_fast(jun, 2, noone);
if(togl != noone) var toging = _inspecting.getInputData(togl);
var lbx = (togl != noone) * ui(40);
var lbw = con_w - lbx;
var ltx = lbx + ui(32);
if(_hover && point_in_rectangle(_m[0], _m[1], lbx, yy, con_w, yy + lbh)) {
contentPane.hover_content = true;
draw_sprite_stretched_ext(THEME.s_box_r5_clr, 0, lbx, yy, lbw, lbh, COLORS.panel_inspector_group_hover, 1);
if(mouse_press(mb_left, pFOCUS))
jun[@ 1] = !coll;
if(mouse_press(mb_right, pFOCUS))
menuCall("inspector_group_menu", group_menu, 0, 0, fa_left, _inspecting);
} else
draw_sprite_stretched_ext(THEME.s_box_r5_clr, 0, lbx, yy, lbw, lbh, COLORS.panel_inspector_group_bg, 1);
if(filter_text == "") if(jun.line) {
draw_sprite_ui(THEME.arrow, 0, lbx + ui(16), yy + lbh / 2, 1, 1, -90 + coll * 90, COLORS.panel_inspector_group_bg, 1); draw_set_color(COLORS.panel_inspector_key_separator);
draw_line(ui(8), _yy, con_w - ui(8), _yy);
var cc, aa = 1;
if(togl != noone) {
if(_hover && point_in_rectangle(_m[0], _m[1], 0, yy, ui(32), yy + lbh)) {
contentPane.hover_content = true;
draw_sprite_stretched_ext(THEME.s_box_r5_clr, 0, 0, yy, ui(32), lbh, COLORS.panel_inspector_group_hover, 1);
if(mouse_press(mb_left, pFOCUS))
_inspecting.inputs[togl].setValue(!toging);
} else
draw_sprite_stretched_ext(THEME.s_box_r5_clr, 0, 0, yy, ui(32), lbh, COLORS.panel_inspector_group_bg, 1);
cc = toging? COLORS._main_accent : COLORS.panel_inspector_group_bg;
aa = 0.5 + toging * 0.5;
draw_sprite_ui(THEME.inspector_checkbox, 0, ui(16), yy + lbh / 2, 1, 1, 0, cc, 1);
if(toging)
draw_sprite_ui(THEME.inspector_checkbox, 1, ui(16), yy + lbh / 2, 1, 1, 0, cc, 1);
}
draw_set_text(viewMode? f_p0 : f_p1, fa_left, fa_center, COLORS._main_text, aa);
draw_text_add(ltx, yy + lbh / 2, txt);
draw_set_alpha(1);
hh += lbh + ui(viewMode? 8 : 6) + pad;
if(coll) { // skip
_colsp = true;
var j = i + 1;
var _len = array_length(_inspecting.input_display_list);
while(j < _len) {
var j_jun = _inspecting.input_display_list[j];
if(is_array(j_jun))
break;
j++;
}
i = j - 1;
}
continue;
} }
hh += _hh;
continue;
} else if(is_instanceof(jun, Inspector_Sprite)) { // SPRITE
var _spr = jun.spr;
var _sh = sprite_get_height(_spr);
draw_sprite(_spr, 0, xc, yy);
hh += _sh + ui(8);
continue;
} else if(is_instanceof(jun, Inspector_Label)) { // TEXT
var _txt = jun.text;
draw_set_text(jun.font, fa_left, fa_top, COLORS._main_text_sub);
var _sh = string_height_ext(_txt, -1, con_w - ui(16)) + ui(16);
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, 0, yy, con_w, _sh, COLORS._main_icon_light);
draw_text_ext_add(ui(8), yy + ui(8), _txt, -1, con_w - ui(16));
hh += _sh + ui(8);
continue;
} else if(is_instanceof(jun, Inspector_Custom_Renderer)) {
jun.register(contentPane);
jun.rx = ui(16) + x;
jun.ry = top_bar_h + y;
var _wdh = jun.draw(ui(6), yy, con_w - ui(12), _m, _hover, pFOCUS) + ui(8);
if(!is_undefined(_wdh)) hh += _wdh;
continue;
} else if(is_array(jun)) { // LABEL
var pad = i && _colsp == false? ui(4) : 0
_colsp = false;
yy += pad;
var txt = __txt(jun[0]);
var coll = jun[1] && filter_text == "";
var lbh = viewMode? ui(32) : ui(26);
var togl = array_safe_get_fast(jun, 2, noone);
if(togl != noone) var toging = _inspecting.getInputData(togl);
var lbx = (togl != noone) * ui(40);
var lbw = con_w - lbx;
var ltx = lbx + ui(32);
if(_hover && point_in_rectangle(_m[0], _m[1], lbx, yy, con_w, yy + lbh)) {
contentPane.hover_content = true;
draw_sprite_stretched_ext(THEME.s_box_r5_clr, 0, lbx, yy, lbw, lbh, COLORS.panel_inspector_group_hover, 1);
if(mouse_press(mb_left, pFOCUS))
jun[@ 1] = !coll;
if(mouse_press(mb_right, pFOCUS))
menuCall("inspector_group_menu", group_menu, 0, 0, fa_left, _inspecting);
} else
draw_sprite_stretched_ext(THEME.s_box_r5_clr, 0, lbx, yy, lbw, lbh, COLORS.panel_inspector_group_bg, 1);
#endregion if(filter_text == "")
draw_sprite_ui(THEME.arrow, 0, lbx + ui(16), yy + lbh / 2, 1, 1, -90 + coll * 90, COLORS.panel_inspector_group_bg, 1);
var cc, aa = 1;
if(togl != noone) {
if(_hover && point_in_rectangle(_m[0], _m[1], 0, yy, ui(32), yy + lbh)) {
contentPane.hover_content = true;
draw_sprite_stretched_ext(THEME.s_box_r5_clr, 0, 0, yy, ui(32), lbh, COLORS.panel_inspector_group_hover, 1);
if(mouse_press(mb_left, pFOCUS))
_inspecting.inputs[togl].setValue(!toging);
} else
draw_sprite_stretched_ext(THEME.s_box_r5_clr, 0, 0, yy, ui(32), lbh, COLORS.panel_inspector_group_bg, 1);
cc = toging? COLORS._main_accent : COLORS.panel_inspector_group_bg;
aa = 0.5 + toging * 0.5;
draw_sprite_ui(THEME.inspector_checkbox, 0, ui(16), yy + lbh / 2, 1, 1, 0, cc, 1);
if(toging)
draw_sprite_ui(THEME.inspector_checkbox, 1, ui(16), yy + lbh / 2, 1, 1, 0, cc, 1);
}
draw_set_text(viewMode? f_p0 : f_p1, fa_left, fa_center, COLORS._main_text, aa);
draw_text_add(ltx, yy + lbh / 2, txt);
draw_set_alpha(1);
hh += lbh + ui(viewMode? 8 : 6) + pad;
if(coll) { // skip
_colsp = true;
var j = i + 1;
var _len = array_length(_inspecting.input_display_list);
while(j < _len) {
var j_jun = _inspecting.input_display_list[j];
if(is_array(j_jun))
break;
j++;
}
i = j - 1;
}
continue;
}
if(!is_instanceof(jun, NodeValue)) continue; if(!is_instanceof(jun, NodeValue)) continue;
if(!jun.show_in_inspector || jun.type == VALUE_TYPE.object) continue; if(!jun.show_in_inspector || jun.type == VALUE_TYPE.object) continue;
@ -939,7 +936,7 @@ function Panel_Inspector() : PanelContent() constructor {
if(mouse_press(mb_left, pFOCUS)) if(mouse_press(mb_left, pFOCUS))
prop_selecting = jun; prop_selecting = jun;
if(mouse_press(mb_right, pFOCUS && mbRight)) { #region right click menu if(mouse_press(mb_right, pFOCUS && mbRight)) { // right click menu
prop_selecting = jun; prop_selecting = jun;
var _menuItem = [ menu_junc_color, -1 ]; var _menuItem = [ menu_junc_color, -1 ];
@ -959,15 +956,15 @@ function Panel_Inspector() : PanelContent() constructor {
if(_inp && jun.extract_node != "") { if(_inp && jun.extract_node != "") {
if(is_array(jun.extract_node)) { if(is_array(jun.extract_node)) {
var ext = menuItem(__txtx("panel_inspector_extract_multiple", "Extract to..."), function(_dat) { var ext = menuItemShelf(__txtx("panel_inspector_extract_multiple", "Extract to..."), function(_dat) {
var arr = []; var arr = [];
for(var i = 0; i < array_length(__dialog_junction.extract_node); i++) { for(var i = 0; i < array_length(__dialog_junction.extract_node); i++) {
var _rec = __dialog_junction.extract_node[i]; var _rec = __dialog_junction.extract_node[i];
array_push(arr, menuItem(_rec, function(_dat) { __dialog_junction.extractNode(_dat.name); })); array_push(arr, menuItem(_rec, function(_dat) { __dialog_junction.extractNode(_dat.name); }, noone, noone, noone, { name : _rec }));
} }
return submenuCall(_dat, arr); return submenuCall(_dat, arr);
}).setIsShelf(); });
array_push(_menuItem, ext); array_push(_menuItem, ext);
} else } else
array_push(_menuItem, menu_junc_extract); array_push(_menuItem, menu_junc_extract);
@ -975,36 +972,29 @@ function Panel_Inspector() : PanelContent() constructor {
var dia = menuCall("inspector_value_menu", _menuItem); var dia = menuCall("inspector_value_menu", _menuItem);
__dialog_junction = jun; __dialog_junction = jun;
} #endregion }
} }
} }
#region color picker if(MESSAGE != noone && MESSAGE.type == "Color") {
// if(key_mod_press(ALT) && color_picker_index) var inp = array_safe_get_fast(pickers, picker_index, 0);
// pickers[picker_index].editWidget.onColorPick(); if(is_struct(inp)) {
inp.setValue(MESSAGE.data);
if(MESSAGE != noone && MESSAGE.type == "Color") { MESSAGE = noone;
var inp = array_safe_get_fast(pickers, picker_index, 0);
if(is_struct(inp)) {
inp.setValue(MESSAGE.data);
MESSAGE = noone;
}
} }
}
color_picking = false;
#endregion
#region drag color_picking = false;
if(prop_dragging) {
if(DRAGGING == noone && point_distance(prop_sel_drag_x, prop_sel_drag_y, mouse_mx, mouse_my) > 16) { if(prop_dragging) { //drag
prop_dragging.dragValue(); if(DRAGGING == noone && point_distance(prop_sel_drag_x, prop_sel_drag_y, mouse_mx, mouse_my) > 16) {
prop_dragging = noone; prop_dragging.dragValue();
} prop_dragging = noone;
if(mouse_release(mb_left))
prop_dragging = noone;
} }
#endregion
if(mouse_release(mb_left))
prop_dragging = noone;
}
if(prop_highlight_time) { if(prop_highlight_time) {
prop_highlight_time--; prop_highlight_time--;
@ -1033,13 +1023,13 @@ function Panel_Inspector() : PanelContent() constructor {
_y += _hh; _y += _hh;
if(is_instanceof(inspecting, Node_Canvas) && inspecting.nodeTool != noone && is_instanceof(inspecting.nodeTool.nodeObject, Node)) if(is_instanceof(inspecting, Node_Canvas) && inspecting.nodeTool != noone && is_instanceof(inspecting.nodeTool.nodeObject, Node))
return drawNodeProperties(_y, _m, inspecting.nodeTool.nodeObject); return _hh + drawNodeProperties(_y, _m, inspecting.nodeTool.nodeObject);
if(inspectGroup >= 0) if(inspectGroup >= 0)
return drawNodeProperties(_y, _m, inspecting); return _hh + drawNodeProperties(_y, _m, inspecting);
if(is_instanceof(inspecting, Node_Frame)) if(is_instanceof(inspecting, Node_Frame))
return drawNodeProperties(_y, _m, inspecting); return _hh + drawNodeProperties(_y, _m, inspecting);
for( var i = 0, n = min(10, array_length(inspectings)); i < n; i++ ) { for( var i = 0, n = min(10, array_length(inspectings)); i < n; i++ ) {
if(i) { if(i) {

View file

@ -38,11 +38,13 @@
registerFunction("", "Recent Files", "R", MOD_KEY.ctrl | MOD_KEY.shift, registerFunction("", "Recent Files", "R", MOD_KEY.ctrl | MOD_KEY.shift,
function(_dat) { function(_dat) {
var arr = []; var arr = [];
var dat = [];
for(var i = 0; i < min(10, ds_list_size(RECENT_FILES)); i++) { for(var i = 0; i < min(10, ds_list_size(RECENT_FILES)); i++) {
var _rec = RECENT_FILES[| i]; var _rec = RECENT_FILES[| i];
array_push(arr, menuItem(_rec, function(_dat) { LOAD_PATH(_dat.name); })); array_push(arr, menuItem(_rec, function(_dat) { LOAD_PATH(_dat.path); }, noone, noone, noone, { path: _rec }));
} }
return submenuCall(_dat, arr)
return submenuCall(_dat, arr);
}).setMenu("recent_files",, true); }).setMenu("recent_files",, true);
registerFunction("", "Import .zip", "", MOD_KEY.none, __IMPORT_ZIP ).setMenu("import_zip", ) registerFunction("", "Import .zip", "", MOD_KEY.none, __IMPORT_ZIP ).setMenu("import_zip", )
@ -179,11 +181,13 @@ function Panel_Menu() : PanelContent() constructor {
]], ]],
[ __txt("Panels"), [ [ __txt("Panels"), [
menuItem(__txt("Workspace"), function(_dat) { menuItemShelf(__txt("Workspace"), function(_dat) {
var arr = [], lays = []; var arr = [];
var lay = [];
var f = file_find_first(DIRECTORY + "layouts/*", 0); var f = file_find_first(DIRECTORY + "layouts/*", 0);
while(f != "") { while(f != "") {
array_push(lays, filename_name_only(f)); array_push(lay, filename_name_only(f));
f = file_find_next(); f = file_find_next();
} }
@ -199,17 +203,15 @@ function Panel_Menu() : PanelContent() constructor {
array_push(arr, MENU_ITEMS.reset_layout); array_push(arr, MENU_ITEMS.reset_layout);
array_push(arr, -1); array_push(arr, -1);
for(var i = 0; i < array_length(lays); i++) { for(var i = 0; i < array_length(lay); i++) {
array_push(arr, menuItem(lays[i], array_push(arr, menuItem(lay[i],
function(_dat) { function(_dat) /*=>*/ { PREFERENCES.panel_layout_file = _dat.path; PREF_SAVE(); setPanel(); }, noone, noone,
PREFERENCES.panel_layout_file = _dat.name; function(item) /*=>*/ {return item.name == PREFERENCES.panel_layout_file},
PREF_SAVE(); { path: lay[i] }));
setPanel();
},,, function(item) { return item.name == PREFERENCES.panel_layout_file; } ));
} }
return submenuCall(_dat, arr); return submenuCall(_dat, arr);
}).setIsShelf(), }),
-1, -1,
MENU_ITEMS.collections_panel, MENU_ITEMS.collections_panel,
@ -222,22 +224,22 @@ function Panel_Menu() : PanelContent() constructor {
MENU_ITEMS.globalvar_panel, MENU_ITEMS.globalvar_panel,
MENU_ITEMS.file_explorer_panel, MENU_ITEMS.file_explorer_panel,
menuItem(__txt("Nodes"), function(_dat) { menuItemShelf(__txt("Nodes"), function(_dat) {
return submenuCall(_dat, [ return submenuCall(_dat, [
MENU_ITEMS.align_panel, MENU_ITEMS.align_panel,
MENU_ITEMS.nodes_panel, MENU_ITEMS.nodes_panel,
MENU_ITEMS.tunnels_panel, MENU_ITEMS.tunnels_panel,
]); ]);
} ).setIsShelf(), }),
menuItem(__txt("Color"), function(_dat) { menuItemShelf(__txt("Color"), function(_dat) {
return submenuCall(_dat, [ return submenuCall(_dat, [
MENU_ITEMS.color_panel, MENU_ITEMS.color_panel,
MENU_ITEMS.palettes_panel, MENU_ITEMS.palettes_panel,
MENU_ITEMS.palettes_mixer_panel, MENU_ITEMS.palettes_mixer_panel,
MENU_ITEMS.gradients_panel, MENU_ITEMS.gradients_panel,
]); ]);
} ).setIsShelf(), }),
MENU_ITEMS.preview_histogram, MENU_ITEMS.preview_histogram,
]], ]],
@ -265,9 +267,9 @@ function Panel_Menu() : PanelContent() constructor {
menuItem(__txtx("panel_menu_test_error", "Display Error"), function() /*=>*/ { noti_error("Error message") }), menuItem(__txtx("panel_menu_test_error", "Display Error"), function() /*=>*/ { noti_error("Error message") }),
menuItem(__txtx("panel_menu_test_crash", "Force crash"), function() /*=>*/ { print(1 + "a"); }), menuItem(__txtx("panel_menu_test_crash", "Force crash"), function() /*=>*/ { print(1 + "a"); }),
-1, -1,
menuItem(__txt("Misc."), function(_dat) { menuItemShelf(__txt("Misc."), function(_dat) {
return submenuCall(_dat, [ menuItem(__txtx("panel_menu_node_credit", "Node credit dialog"), function() /*=>*/ { var dia = dialogPanelCall(new Panel_Node_Cost()); }), ]); return submenuCall(_dat, [ menuItem(__txtx("panel_menu_node_credit", "Node credit dialog"), function() /*=>*/ { var dia = dialogPanelCall(new Panel_Node_Cost()); }), ]);
} ).setIsShelf(), }),
]]); ]]);
} }
@ -711,16 +713,18 @@ function Panel_Menu() : PanelContent() constructor {
if(_b == 2) { if(_b == 2) {
_hov = true; _hov = true;
var arr = []; var arr = [];
var dat = [];
var tip = []; var tip = [];
for(var i = 0; i < min(10, ds_list_size(RECENT_FILES)); i++) { for(var i = 0; i < min(10, ds_list_size(RECENT_FILES)); i++) {
var _rec = RECENT_FILES[| i]; var _rec = RECENT_FILES[| i];
var _dat = RECENT_FILE_DATA[| i]; var _dat = RECENT_FILE_DATA[| i];
array_push(arr, menuItem(_rec, function(_dat) { LOAD_PATH(_dat.name); })); array_push(arr, menuItem(_rec, function(_dat) /*=>*/ {return LOAD_PATH(_dat.path)}, noone, noone, noone, { path: _dat.path }) );
array_push(tip, [ method(_dat, _dat.getThumbnail), VALUE_TYPE.surface ]); array_push(tip, [ method(_dat, _dat.getThumbnail), VALUE_TYPE.surface ]);
} }
var dia = hori? menuCall("title_recent_menu", arr, x + tcx, y + h, fa_center) : menuCall("title_recent_menu", arr, x + w, y + tby0); var dia = hori? menuCall("title_recent_menu", arr, x + tcx, y + h, fa_center) : menuCall("title_recent_menu", arr, x + w, y + tby0);
dia.tooltips = tip; dia.tooltips = tip;
} }
if(hori) { if(hori) {

View file

@ -15,7 +15,7 @@ function Panel_Palette() : PanelContent() constructor {
view_label = true; view_label = true;
menu_refresh = menuItem(__txt("Refresh"), function() { __initPalette(); }); menu_refresh = menuItem(__txt("Refresh"), function() { __initPalette(); });
menu_add = menuItem(__txt("Add"), function(_dat) { menu_add = menuItemShelf(__txt("Add"), function(_dat) {
return submenuCall(_dat, [ return submenuCall(_dat, [
menuItem(__txt("File..."), function() { menuItem(__txt("File..."), function() {
var _p = get_open_filename("hex|*.hex|gpl|*.gpl|Image|.png", "palette"); var _p = get_open_filename("hex|*.hex|gpl|*.gpl|Image|.png", "palette");
@ -35,7 +35,7 @@ function Panel_Palette() : PanelContent() constructor {
}).setName("Palette") }).setName("Palette")
}), }),
]); ]);
}).setIsShelf(); });
menu_stretch = menuItem(__txt("Stretch"), function() { PREFERENCES.palette_stretch = !PREFERENCES.palette_stretch; }, noone, noone, function() /*=>*/ {return PREFERENCES.palette_stretch}); menu_stretch = menuItem(__txt("Stretch"), function() { PREFERENCES.palette_stretch = !PREFERENCES.palette_stretch; }, noone, noone, function() /*=>*/ {return PREFERENCES.palette_stretch});
menu_mini = menuItem(__txt("Label"), function() { view_label = !view_label; }, noone, noone, function() /*=>*/ {return view_label}); menu_mini = menuItem(__txt("Label"), function() { view_label = !view_label; }, noone, noone, function() /*=>*/ {return view_label});

View file

@ -45,15 +45,15 @@ function Panel_Preview_Window() : PanelContent() constructor {
pany = 0; pany = 0;
} }
function changeChannel(index) { function changeChannel(_index) {
var channel = index - array_length(menu); var channel = 0;
for( var i = 0; i < array_length(node_target.outputs); i++ ) { for( var i = 0; i < array_length(node_target.outputs); i++ ) {
var o = node_target.outputs[i]; var o = node_target.outputs[i];
if(o.type != VALUE_TYPE.surface) continue; if(o.type != VALUE_TYPE.surface) continue;
if(channel-- == 0) {
if(channel++ == _index)
preview_channel = i; preview_channel = i;
return;
}
} }
} }
@ -159,11 +159,14 @@ function Panel_Preview_Window() : PanelContent() constructor {
if(mouse_click(mb_right, pFOCUS)) { if(mouse_click(mb_right, pFOCUS)) {
var _menu = array_clone(menu); var _menu = array_clone(menu);
var _chan = 0;
for( var i = 0; i < array_length(node_target.outputs); i++ ) { for( var i = 0; i < array_length(node_target.outputs); i++ ) {
var o = node_target.outputs[i]; var o = node_target.outputs[i];
if(o.type != VALUE_TYPE.surface) continue; if(o.type != VALUE_TYPE.surface) continue;
array_push(_menu, menuItem(o.name, function(_dat) { changeChannel(_dat.index); })); array_push(_menu, menuItem(o.name, function(_dat) { changeChannel(_dat.index); }, noone, noone, noone, { index: _chan }));
_chan++;
} }
menuCall("preview_window_menu", _menu, 0, 0, fa_left, node_target); menuCall("preview_window_menu", _menu, 0, 0, fa_left, node_target);
} }