mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-24 14:06:23 +01:00
- [Graph Panel] Add context button to convert connection to tunnel.
This commit is contained in:
parent
2891194037
commit
b005475a21
11 changed files with 196 additions and 127 deletions
|
@ -38,7 +38,7 @@
|
|||
LATEST_VERSION = 11700;
|
||||
VERSION = 11770;
|
||||
SAVE_VERSION = 11700;
|
||||
VERSION_STRING = "1.17.7";
|
||||
VERSION_STRING = "1.17.8";
|
||||
BUILD_NUMBER = 11770;
|
||||
|
||||
globalvar HOTKEYS, HOTKEY_CONTEXT;
|
||||
|
|
|
@ -548,9 +548,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
|||
var _hv = PANEL_GRAPH.pHOVER && PANEL_GRAPH.node_hovering == self && PANEL_GRAPH._value_focus == noone;
|
||||
_hv &= point_in_circle(_mx, _my, _bx, _by, 8);
|
||||
|
||||
BLEND_ADD
|
||||
draw_sprite_ext(THEME.animate_node_go, 0, _bx, _by, 1, 1, 0, getColor(), 0.2 + _hv * 0.3);
|
||||
BLEND_NORMAL
|
||||
draw_sprite_ext_add(THEME.animate_node_go, 0, _bx, _by, 1, 1, 0, _hv? COLORS._main_accent : c_white, 0.3 + _hv * 0.7);
|
||||
|
||||
if(_hv && PANEL_GRAPH.pFOCUS && mouse_press(mb_left))
|
||||
panelSetContext(PANEL_GRAPH);
|
||||
|
|
|
@ -1147,11 +1147,15 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
|||
}
|
||||
|
||||
var _iny = yy + (junction_draw_pad_y + junction_draw_hei_y * 0.5 * SHOW_PARAM) * _s;
|
||||
var rx = x, ry = y + junction_draw_pad_y + junction_draw_hei_y * 0.5 * SHOW_PARAM;
|
||||
|
||||
for( var i = 0, n = ds_list_size(inputs); i < n; i++ ) {
|
||||
jun = inputs[| i];
|
||||
jun.x = xx;
|
||||
jun.y = _iny;
|
||||
|
||||
jun.rx = rx;
|
||||
jun.ry = ry;
|
||||
}
|
||||
|
||||
for(var i = 0; i < in_cache_len; i++) {
|
||||
|
@ -1160,18 +1164,27 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
|||
jun.x = xx;
|
||||
jun.y = _iny;
|
||||
_iny += junction_draw_hei_y * _s;
|
||||
|
||||
jun.rx = rx;
|
||||
jun.ry = ry;
|
||||
ry += junction_draw_hei_y;
|
||||
}
|
||||
|
||||
xx = xx + w * _s;
|
||||
var _outy = yy + (junction_draw_pad_y + junction_draw_hei_y * 0.5 * SHOW_PARAM) * _s;
|
||||
var rx = x + w, ry = y + junction_draw_pad_y + junction_draw_hei_y * 0.5 * SHOW_PARAM;
|
||||
|
||||
for(var i = 0; i < outputs_amount; i++) {
|
||||
var idx = outputs_index[i];
|
||||
jun = outputs[| idx];
|
||||
|
||||
jun.x = xx;
|
||||
jun.y = _outy;
|
||||
jun.x = xx;
|
||||
jun.y = _outy;
|
||||
_outy += junction_draw_hei_y * _s * jun.isVisible();
|
||||
|
||||
jun.rx = rx;
|
||||
jun.ry = ry;
|
||||
ry += junction_draw_hei_y * jun.isVisible();
|
||||
}
|
||||
|
||||
if(SHOW_PARAM) h = h_param;
|
||||
|
@ -1790,25 +1803,25 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
|||
|
||||
static drawBadge = function(_x, _y, _s) {
|
||||
if(!active) return;
|
||||
var xx = x * _s + _x + w * _s;
|
||||
var yy = y * _s + _y;
|
||||
|
||||
badgePreview = lerp_float(badgePreview, !!previewing, 2);
|
||||
badgeInspect = lerp_float(badgeInspect, inspecting, 2);
|
||||
|
||||
if(badgePreview > 0) {
|
||||
draw_sprite_ext(THEME.node_state, is_3D? 3 : 0, xx, yy, badgePreview, badgePreview, 0, c_white, 1);
|
||||
xx -= 28 * badgePreview;
|
||||
}
|
||||
|
||||
if(badgeInspect > 0) {
|
||||
draw_sprite_ext(THEME.node_state, 1, xx, yy, badgeInspect, badgeInspect, 0, c_white, 1);
|
||||
xx -= 28 * badgeInspect;
|
||||
}
|
||||
|
||||
if(isTool) {
|
||||
draw_sprite_ext(THEME.node_state, 2, xx, yy, 1, 1, 0, c_white, 1);
|
||||
xx -= 28 * 2;
|
||||
if(previewable) {
|
||||
var xx = x * _s + _x + w * _s;
|
||||
var yy = y * _s + _y;
|
||||
|
||||
if(badgePreview > 0) { draw_sprite_ext(THEME.node_state, is_3D? 3 : 0, xx, yy, badgePreview, badgePreview, 0, c_white, 1); xx -= 28 * badgePreview; }
|
||||
if(badgeInspect > 0) { draw_sprite_ext(THEME.node_state, 1, xx, yy, badgeInspect, badgeInspect, 0, c_white, 1); xx -= 28 * badgeInspect; }
|
||||
if(isTool) { draw_sprite_ext(THEME.node_state, 2, xx, yy, 1, 1, 0, c_white, 1); xx -= 28 * 2; }
|
||||
|
||||
} else {
|
||||
var xx = _x + _s * (x + w - 10);
|
||||
var yy = _y + _s * y;
|
||||
|
||||
if(badgePreview > 0) { draw_sprite_ext(THEME.circle_16, 0, xx, yy, .5 * _s, .5 * _s, 0, CDEF.orange); xx -= 12 * _s; }
|
||||
if(badgeInspect > 0) { draw_sprite_ext(THEME.circle_16, 0, xx, yy, .5 * _s, .5 * _s, 0, CDEF.lime); xx -= 12 * _s; }
|
||||
if(isTool) { draw_sprite_ext(THEME.circle_16, 0, xx, yy, .5 * _s, .5 * _s, 0, CDEF.blue); xx -= 12 * _s; }
|
||||
}
|
||||
|
||||
inspecting = false;
|
||||
|
|
|
@ -38,7 +38,7 @@ enum NODE_EXPORT_FORMAT {
|
|||
|
||||
function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||
name = "Export";
|
||||
preview_channel = 1;
|
||||
preview_channel = 0;
|
||||
|
||||
playing = false;
|
||||
played = 0;
|
||||
|
|
|
@ -22,13 +22,19 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
|||
scale = 1;
|
||||
lcolor = false;
|
||||
|
||||
name_height = 16;
|
||||
tb_name = new textBox(TEXTBOX_INPUT.text, function(txt) /*=>*/ { setDisplayName(txt); });
|
||||
tb_name.font = f_p2;
|
||||
tb_name.hide = true;
|
||||
tb_name.align = fa_center;
|
||||
|
||||
name_height = 16;
|
||||
|
||||
draw_x0 = 0;
|
||||
draw_y0 = 0;
|
||||
draw_x1 = 0;
|
||||
draw_y1 = 0;
|
||||
|
||||
|
||||
inputs[| 0] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 240, 160 ] )
|
||||
.setDisplay(VALUE_DISPLAY.vector)
|
||||
.rejectArray();
|
||||
|
@ -50,14 +56,14 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
|||
|
||||
input_display_list = [ 0, 1, 3, 4 ];
|
||||
|
||||
static onValueUpdate = function(index = 3) {
|
||||
global.__FRAME_LABEL_SCALE = getInputData(3);
|
||||
}
|
||||
static onValueUpdate = function(index = 3) { global.__FRAME_LABEL_SCALE = getInputData(3); }
|
||||
|
||||
static step = function() {
|
||||
var si = getInputData(0);
|
||||
w = si[0];
|
||||
h = si[1];
|
||||
previewable = true;
|
||||
|
||||
var sz = getInputData(0);
|
||||
w = sz[0];
|
||||
h = sz[1];
|
||||
|
||||
color = getInputData(1);
|
||||
alpha = _color_get_alpha(color);
|
||||
|
@ -67,7 +73,6 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
|||
}
|
||||
|
||||
static drawNodeBase = function(xx, yy, _s, _panel) {
|
||||
|
||||
var px0 = 3;
|
||||
var py0 = 3;
|
||||
var px1 = -3 + _panel.w;
|
||||
|
@ -92,23 +97,39 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
|||
|
||||
if(draw_x1 - draw_x0 < 4) return;
|
||||
|
||||
draw_sprite_stretched_ext(bg_spr, 0, x0, y0, x1 - x0, y1 - y0, color, alpha);
|
||||
draw_sprite_stretched_ext(bg_spr, 0, x0, y0, x1 - x0, y1 - y0, color, alpha);
|
||||
}
|
||||
|
||||
static drawNodeFG = function(_x, _y, _mx, _my, _s, _dparam, _panel) {
|
||||
|
||||
if(draw_x1 - draw_x0 < 4) return;
|
||||
|
||||
var _w = draw_x1 - draw_x0;
|
||||
var _h = draw_y1 - draw_y0;
|
||||
|
||||
draw_sprite_stretched_ext(bg_spr, 1, draw_x0, draw_y0, _w, _h, color, alpha * .50);
|
||||
draw_sprite_stretched_ext(nm_spr, 0, draw_x0, draw_y0, _w, name_height, color, alpha * .75);
|
||||
draw_sprite_stretched_add(bg_spr, 1, draw_x0, draw_y0, _w, _h, c_white, .20);
|
||||
|
||||
var _w = draw_x1 - draw_x0;
|
||||
var _h = draw_y1 - draw_y0;
|
||||
var txt = renamed? display_name : name;
|
||||
draw_set_text(f_p2, fa_center, fa_bottom, COLORS._main_text);
|
||||
draw_text_cut((draw_x0 + draw_x1) / 2, draw_y0 + name_height + 2, txt, _w - 4);
|
||||
|
||||
draw_sprite_stretched_ext(bg_spr, 1, draw_x0, draw_y0, _w, _h, color, alpha * .50);
|
||||
|
||||
if(WIDGET_CURRENT == tb_name) {
|
||||
var nh = 24;
|
||||
draw_sprite_stretched_ext(nm_spr, 0, draw_x0, draw_y0, _w, nh, color, alpha * .75);
|
||||
|
||||
tb_name.setFocusHover(PANEL_GRAPH.pFOCUS, PANEL_GRAPH.pHOVER);
|
||||
tb_name.draw(draw_x0, draw_y0, _w, nh, txt, [ _mx, _my ]);
|
||||
|
||||
} else {
|
||||
draw_sprite_stretched_ext(nm_spr, 0, draw_x0, draw_y0, _w, name_height, color, alpha * .75);
|
||||
|
||||
draw_set_text(f_p2, fa_center, fa_bottom, COLORS._main_text);
|
||||
draw_text_cut((draw_x0 + draw_x1) / 2, draw_y0 + name_height + 2, txt, _w - 4);
|
||||
|
||||
if(point_in_rectangle(_mx, _my, draw_x0, draw_y0, draw_x0 + _w, draw_y0 + name_height)) {
|
||||
if(PANEL_GRAPH.pFOCUS && DOUBLE_CLICK)
|
||||
tb_name.activate();
|
||||
}
|
||||
}
|
||||
|
||||
draw_sprite_stretched_add(bg_spr, 1, draw_x0, draw_y0, _w, _h, c_white, .20);
|
||||
|
||||
if(active_draw_index > -1) {
|
||||
draw_sprite_stretched_ext(bg_sel_spr, 0, draw_x0, draw_y0, _w, _h, COLORS._main_accent, 1);
|
||||
|
|
|
@ -15,8 +15,7 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
preview_scale = 1;
|
||||
|
||||
var tname = "";
|
||||
if(!LOADING && !APPENDING)
|
||||
tname = $"tunnel{ds_map_size(TUNNELS_IN_MAP)}";
|
||||
if(!LOADING && !APPENDING) tname = $"tunnel{ds_map_size(TUNNELS_IN_MAP)}";
|
||||
|
||||
inputs[| 0] = nodeValue("Name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, tname )
|
||||
.rejectArray();
|
||||
|
@ -29,20 +28,20 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
insp2UpdateTooltip = "Create tunnel out";
|
||||
insp2UpdateIcon = [ THEME.tunnel, 0, c_white ];
|
||||
|
||||
static onInspector2Update = function() { #region
|
||||
static onInspector2Update = function() {
|
||||
var _node = nodeBuild("Node_Tunnel_Out", x + 128, y);
|
||||
_node.inputs[| 0].setValue(inputs[| 0].getValue());
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static update = function(frame = CURRENT_FRAME) { onValueUpdate(); }
|
||||
|
||||
static resetMap = function() { #region
|
||||
static resetMap = function() {
|
||||
var _key = inputs[| 0].getValue();
|
||||
TUNNELS_IN_MAP[? node_id] = _key;
|
||||
TUNNELS_IN[? _key] = inputs[| 1];
|
||||
} resetMap(); #endregion
|
||||
} resetMap();
|
||||
|
||||
static checkDuplicate = function() { #region
|
||||
static checkDuplicate = function() {
|
||||
var _key = inputs[| 0].getValue();
|
||||
var amo = ds_map_size(TUNNELS_IN_MAP);
|
||||
var k = ds_map_find_first(TUNNELS_IN_MAP);
|
||||
|
@ -62,9 +61,9 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
noti_remove(error_notification);
|
||||
error_notification = noone;
|
||||
}
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static onValueUpdate = function(index = -1) { #region
|
||||
static onValueUpdate = function(index = -1) {
|
||||
var _key = inputs[| 0].getValue();
|
||||
resetMap();
|
||||
|
||||
|
@ -84,9 +83,9 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
}
|
||||
|
||||
if(index == 0) { RENDER_ALL_REORDER }
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static step = function() { #region
|
||||
static step = function() {
|
||||
var _key = inputs[| 0].getValue();
|
||||
|
||||
value_validation[VALIDATION.error] = error_notification != noone;
|
||||
|
@ -98,9 +97,9 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
inputs[| 1].setType(inputs[| 1].value_from.type);
|
||||
inputs[| 1].display_type = inputs[| 1].value_from.display_type;
|
||||
}
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static getNextNodes = function() { #region
|
||||
static getNextNodes = function() {
|
||||
var nodes = [];
|
||||
var nodeNames = [];
|
||||
var _key = inputs[| 0].getValue();
|
||||
|
@ -123,18 +122,18 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
|
||||
LOG_BLOCK_END();
|
||||
return nodes;
|
||||
} #endregion
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static pointIn = function(_x, _y, _mx, _my, _s) { #region
|
||||
static pointIn = function(_x, _y, _mx, _my, _s) {
|
||||
var xx = x * _s + _x;
|
||||
var yy = y * _s + _y;
|
||||
|
||||
return point_in_circle(_mx, _my, xx, yy, _s * 24);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static preDraw = function(_x, _y, _s) { #region
|
||||
static preDraw = function(_x, _y, _s) {
|
||||
var xx = x * _s + _x;
|
||||
var yy = y * _s + _y;
|
||||
|
||||
|
@ -143,12 +142,12 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
|
||||
inputs[| 1].x = xx;
|
||||
inputs[| 1].y = yy;
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static drawBadge = function(_x, _y, _s) {}
|
||||
static drawJunctionNames = function(_x, _y, _mx, _my, _s) {}
|
||||
|
||||
static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region
|
||||
static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) {
|
||||
var xx = _x + x * _s;
|
||||
var yy = _y + y * _s;
|
||||
|
||||
|
@ -181,9 +180,9 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
}
|
||||
|
||||
draw_set_alpha(1);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static drawJunctions = function(_x, _y, _mx, _my, _s) { #region
|
||||
static drawJunctions = function(_x, _y, _mx, _my, _s) {
|
||||
var xx = x * _s + _x;
|
||||
var yy = y * _s + _y;
|
||||
isHovering = point_in_circle(_mx, _my, xx, yy, _s * 24);
|
||||
|
@ -193,9 +192,9 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
|
||||
hover_scale_to = 1;
|
||||
return jhov? inputs[| 1] : noone;
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static drawNode = function(_x, _y, _mx, _my, _s) { #region
|
||||
static drawNode = function(_x, _y, _mx, _my, _s) {
|
||||
var xx = x * _s + _x;
|
||||
var yy = y * _s + _y;
|
||||
|
||||
|
@ -242,17 +241,17 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
|||
hover_scale_to = 0;
|
||||
|
||||
draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text);
|
||||
draw_text_transformed(xx, yy - 12 * _s, string(inputs[| 0].getValue()), _s * 0.4, _s * 0.4, 0);
|
||||
draw_text_transformed(xx, yy - 12 * _s, string(inputs[| 0].getValue()), _s * .3, _s * .3, 0);
|
||||
|
||||
return drawJunctions(_x, _y, _mx, _my, _s);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static onClone = function() { onValueUpdate(0); }
|
||||
|
||||
static postConnect = function() { onValueUpdate(0); }
|
||||
|
||||
static onDestroy = function() { #region
|
||||
static onDestroy = function() {
|
||||
if(error_notification != noone)
|
||||
noti_remove(error_notification);
|
||||
} #endregion
|
||||
}
|
||||
}
|
|
@ -27,28 +27,28 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
|||
insp2UpdateTooltip = "Goto tunnel in";
|
||||
insp2UpdateIcon = [ THEME.tunnel, 1, c_white ];
|
||||
|
||||
static onInspector2Update = function() { #region
|
||||
static onInspector2Update = function() {
|
||||
var _key = inputs[| 0].getValue();
|
||||
if(!ds_map_exists(TUNNELS_IN, _key)) return;
|
||||
|
||||
var _node = TUNNELS_IN[? _key].node;
|
||||
graphFocusNode(_node);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static isRenderable = function() { #region
|
||||
static isRenderable = function() {
|
||||
var _key = inputs[| 0].getValue();
|
||||
if(!ds_map_exists(TUNNELS_IN, _key)) return false;
|
||||
|
||||
return TUNNELS_IN[? _key].node.rendered;
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static onValueUpdate = function(index = -1) { #region
|
||||
static onValueUpdate = function(index = -1) {
|
||||
var _key = inputs[| 0].getValue();
|
||||
|
||||
if(index == 0) { RENDER_ALL_REORDER }
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static step = function() { #region
|
||||
static step = function() {
|
||||
var _key = inputs[| 0].getValue();
|
||||
TUNNELS_OUT[? node_id] = _key;
|
||||
|
||||
|
@ -59,25 +59,25 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
|||
outputs[| 0].setType(VALUE_TYPE.any);
|
||||
outputs[| 0].display_type = VALUE_DISPLAY._default;
|
||||
}
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static update = function(frame = CURRENT_FRAME) { #region
|
||||
static update = function(frame = CURRENT_FRAME) {
|
||||
var _key = inputs[| 0].getValue();
|
||||
|
||||
if(ds_map_exists(TUNNELS_IN, _key))
|
||||
outputs[| 0].setValue(TUNNELS_IN[? _key].getValue());
|
||||
} #endregion
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static pointIn = function(_x, _y, _mx, _my, _s) { #region
|
||||
static pointIn = function(_x, _y, _mx, _my, _s) {
|
||||
var xx = x * _s + _x;
|
||||
var yy = y * _s + _y;
|
||||
|
||||
return point_in_circle(_mx, _my, xx, yy, _s * 24);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static preDraw = function(_x, _y, _s) { #region
|
||||
static preDraw = function(_x, _y, _s) {
|
||||
var xx = x * _s + _x;
|
||||
var yy = y * _s + _y;
|
||||
|
||||
|
@ -86,12 +86,12 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
|||
|
||||
outputs[| 0].x = xx;
|
||||
outputs[| 0].y = yy;
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static drawBadge = function(_x, _y, _s) {}
|
||||
static drawJunctionNames = function(_x, _y, _mx, _my, _s) {}
|
||||
|
||||
static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region
|
||||
static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) {
|
||||
var xx = _x + x * _s;
|
||||
var yy = _y + y * _s;
|
||||
|
||||
|
@ -117,9 +117,9 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
|||
draw_line_dotted(frx, fry, xx, yy, 2 * _s, current_time / 10, 3);
|
||||
|
||||
draw_set_alpha(1);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static drawJunctions = function(_x, _y, _mx, _my, _s) { #region
|
||||
static drawJunctions = function(_x, _y, _mx, _my, _s) {
|
||||
var xx = x * _s + _x;
|
||||
var yy = y * _s + _y;
|
||||
isHovering = point_in_circle(_mx, _my, xx, yy, _s * 24);
|
||||
|
@ -129,9 +129,9 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
|||
|
||||
hover_scale_to = 1;
|
||||
return jhov? outputs[| 0] : noone;
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static drawNode = function(_x, _y, _mx, _my, _s) { #region
|
||||
static drawNode = function(_x, _y, _mx, _my, _s) {
|
||||
var xx = x * _s + _x;
|
||||
var yy = y * _s + _y;
|
||||
|
||||
|
@ -178,10 +178,10 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
|||
hover_scale_to = 0;
|
||||
|
||||
draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text);
|
||||
draw_text_transformed(xx, yy - 12 * _s, string(inputs[| 0].getValue()), _s * 0.4, _s * 0.4, 0);
|
||||
draw_text_transformed(xx, yy - 12 * _s, string(inputs[| 0].getValue()), _s * .3, _s * .3, 0);
|
||||
|
||||
return drawJunctions(_x, _y, _mx, _my, _s);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static onClone = function() { onValueUpdate(0); }
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
|||
node = _node;
|
||||
x = node.x;
|
||||
y = node.y;
|
||||
rx = x;
|
||||
ry = y;
|
||||
|
||||
index = _connect == JUNCTION_CONNECT.input? ds_list_size(node.inputs) : ds_list_size(node.outputs);
|
||||
type = _type;
|
||||
forward = true;
|
||||
|
|
|
@ -1559,7 +1559,7 @@ function Panel_Animation() : PanelContent() constructor {
|
|||
tx = tool_width - ui(16);
|
||||
if(pHOVER && point_in_rectangle(msx, msy, tx - ui(9), ty - ui(10), tx + ui(10), ty + ui(8))) {
|
||||
draw_sprite_ui_uniform(THEME.timeline_graph, 1, tx, ty, 1, COLORS._main_icon_on_inner, _tool_a);
|
||||
TOOLTIP = __txtx("panel_animation_show_graph", "Show graph");
|
||||
TOOLTIP = _graph_show? __txtx("panel_animation_hide_graph", "Hide graph") : __txtx("panel_animation_show_graph", "Show graph");
|
||||
|
||||
if(mouse_press(mb_left, pFOCUS)) {
|
||||
if(prop.sep_axis) prop.show_graphs[animator.index] = !_graph_show;
|
||||
|
|
|
@ -686,6 +686,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
menu_node_copy_prop = menuItem(__txtx("panel_graph_copy_prop", "Copy all properties"), function() /*=>*/ { doCopyProp(); });
|
||||
menu_node_paste_prop = menuItem(__txtx("panel_graph_paste_prop", "Paste all properties"), function() /*=>*/ { doPasteProp(); });
|
||||
|
||||
menu_connection_tunnel = menuItem(__txtx("panel_graph_tunnel", "Create tunnels"), function() /*=>*/ { createTunnel(); });
|
||||
|
||||
#region node color
|
||||
function setSelectingNodeColor(color) {
|
||||
__temp_color = color;
|
||||
|
@ -912,9 +914,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
toCenterNode();
|
||||
} #endregion
|
||||
|
||||
function addContext(node) { #region
|
||||
function addContext(node) {
|
||||
var _node = node.getNodeBase();
|
||||
setContextFrame(false, _node);
|
||||
|
||||
nodes_list = _node.nodes;
|
||||
array_push(node_context, _node);
|
||||
|
@ -923,18 +924,29 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
nodes_selecting = [];
|
||||
selection_block = 1;
|
||||
|
||||
setContextFrame(false, _node);
|
||||
toCenterNode();
|
||||
} #endregion
|
||||
}
|
||||
|
||||
function setContextFrame(dirr, node) { #region
|
||||
function setContextFrame(dirr, node) {
|
||||
context_framing = true;
|
||||
context_frame_direct = dirr;
|
||||
context_frame_progress = 0;
|
||||
context_frame_sx = w / 2 - 8;
|
||||
context_frame_sy = h / 2 - 8;
|
||||
context_frame_ex = context_frame_sx + 16;
|
||||
context_frame_ey = context_frame_sy + 16;
|
||||
} #endregion
|
||||
|
||||
context_frame_direct = dirr;
|
||||
context_frame_progress = 0;
|
||||
|
||||
context_frame_sx = w / 2 - 8;
|
||||
context_frame_sy = h / 2 - 8;
|
||||
context_frame_ex = context_frame_sx + 16;
|
||||
context_frame_ey = context_frame_sy + 16;
|
||||
|
||||
var gr_x = graph_x * graph_s;
|
||||
var gr_y = graph_y * graph_s;
|
||||
|
||||
context_frame_sx = gr_x + node.x * graph_s;
|
||||
context_frame_sy = gr_y + node.y * graph_s;
|
||||
context_frame_ex = context_frame_sx + node.w * graph_s;
|
||||
context_frame_ey = context_frame_sy + node.h * graph_s;
|
||||
}
|
||||
|
||||
//// ============ Step ============
|
||||
|
||||
|
@ -1159,11 +1171,13 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
array_push(nodes_selecting, node_hovering);
|
||||
} else
|
||||
nodes_selecting = [];
|
||||
|
||||
} else if(value_focus || node_hovering == noone) {
|
||||
nodes_selecting = [];
|
||||
|
||||
if(DOUBLE_CLICK && !PANEL_INSPECTOR.locked)
|
||||
PANEL_INSPECTOR.inspecting = noone;
|
||||
|
||||
} else {
|
||||
if(is_instanceof(node_hovering, Node_Frame)) {
|
||||
var fx0 = (node_hovering.x + graph_x) * graph_s;
|
||||
|
@ -1188,6 +1202,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
if(_w && _h && rectangle_inside_rectangle(fx0, fy0, fx1, fy1, _x, _y, _x + _w, _y + _h))
|
||||
array_push_unique(nodes_selecting, _node);
|
||||
}
|
||||
|
||||
} else if(DOUBLE_CLICK) {
|
||||
PANEL_PREVIEW.setNodePreview(node_hovering);
|
||||
|
||||
|
@ -1195,6 +1210,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
if(PANEL_INSPECTOR.panel && struct_has(PANEL_INSPECTOR.panel, "switchContent"))
|
||||
PANEL_INSPECTOR.panel.switchContent(PANEL_INSPECTOR);
|
||||
}
|
||||
|
||||
} else {
|
||||
var hover_selected = false;
|
||||
for( var i = 0; i < array_length(nodes_selecting); i++ ) {
|
||||
|
@ -1203,6 +1219,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
hover_selected = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if(!hover_selected)
|
||||
nodes_selecting = [ node_hovering ];
|
||||
|
||||
|
@ -1235,38 +1252,33 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
if(!sep) { array_push(menu, -1); sep = true; }
|
||||
|
||||
var _to = value_focus.value_to[i];
|
||||
array_push(menu, menuItem($"[{_to.node.display_name}] {_to.getName()}", function(data) {
|
||||
data.params.juncTo.removeFrom();
|
||||
}, THEME.cross,,, { juncTo: _to }));
|
||||
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 }));
|
||||
}
|
||||
|
||||
for( var i = 0, n = array_length(value_focus.value_to_loop); i < n; i++ ) {
|
||||
if(!sep) { array_push(menu, -1); sep = true; }
|
||||
|
||||
var _to = value_focus.value_to_loop[i];
|
||||
array_push(menu, menuItem($"[{_to.junc_in.node.display_name}] {_to.junc_in.getName()}", function(data) {
|
||||
data.params.juncTo.destroy();
|
||||
}, _to.icon_24,,, { juncTo: _to }));
|
||||
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 }));
|
||||
}
|
||||
} else {
|
||||
var sep = false;
|
||||
|
||||
var _lb = $"[{_jun.node.display_name}] {_jun.getName()}";
|
||||
|
||||
if(value_focus.value_from) {
|
||||
if(!sep) { array_push(menu, -1); sep = true; }
|
||||
|
||||
var _jun = value_focus.value_from;
|
||||
array_push(menu, menuItem($"[{_jun.node.display_name}] {_jun.getName()}", function(data) {
|
||||
__junction_hovering.removeFrom();
|
||||
}, THEME.cross));
|
||||
array_push(menu, menuItem(_lb, function(data) /*=>*/ { __junction_hovering.removeFrom(); }, THEME.cross));
|
||||
}
|
||||
|
||||
if(value_focus.value_from_loop) {
|
||||
if(!sep) { array_push(menu, -1); sep = true; }
|
||||
|
||||
var _jun = value_focus.value_from_loop.junc_out;
|
||||
array_push(menu, menuItem($"[{_jun.node.display_name}] {_jun.getName()}", function(data) {
|
||||
__junction_hovering.removeFromLoop();
|
||||
}, value_focus.value_from_loop.icon_24));
|
||||
array_push(menu, menuItem(_lb, function(data) /*=>*/ { __junction_hovering.removeFromLoop(); }, value_focus.value_from_loop.icon_24));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1298,6 +1310,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
array_push(menu, -1, menu_nodes_align, menu_nodes_blend, menu_nodes_compose, menu_nodes_array);
|
||||
|
||||
menuCall("graph_node_selected_multiple_menu",,, menu );
|
||||
|
||||
} else if(node_hover == noone) {
|
||||
// print($"Right click not node hover");
|
||||
|
||||
|
@ -1305,7 +1318,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
|
||||
__junction_hovering = junction_hovering;
|
||||
if(junction_hovering != noone)
|
||||
array_push(menu, menu_junc_color, -1);
|
||||
array_push(menu, menu_junc_color, menu_connection_tunnel, -1);
|
||||
|
||||
array_push(menu, menuItem(__txt("Copy"), function() { doCopy(); }, THEME.copy, ["Graph", "Copy"]).setActive(array_length(nodes_selecting)));
|
||||
array_push(menu, menuItem(__txt("Paste"), function() { doPaste(); }, THEME.paste, ["Graph", "Paste"]).setActive(clipboard_get_text() != ""));
|
||||
|
@ -1590,6 +1603,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
nodes_junction_d = junction_hovering;
|
||||
nodes_junction_dx = junction_hovering.draw_line_shift_x;
|
||||
nodes_junction_dy = junction_hovering.draw_line_shift_y;
|
||||
|
||||
} else if(array_empty(nodes_selecting) && !value_focus && !drag_locking) {
|
||||
nodes_select_drag = 1;
|
||||
nodes_select_frame = frame_hovering == noone;
|
||||
|
@ -1907,8 +1921,9 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
node_hover = noone;
|
||||
nodes_selecting = [];
|
||||
PANEL_PREVIEW.resetNodePreview();
|
||||
setContextFrame(true, node_context[i + 1]);
|
||||
var _nodeFocus = node_context[i + 1];
|
||||
|
||||
var _ctx = node_context[i + 1];
|
||||
var _nodeFocus = _ctx;
|
||||
|
||||
if(i == -1)
|
||||
resetContext();
|
||||
|
@ -1919,6 +1934,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
|
||||
nodes_selecting = [ _nodeFocus ];
|
||||
toCenterNode(nodes_selecting);
|
||||
setContextFrame(true, _ctx);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2164,14 +2180,16 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
mouse_on_graph = false;
|
||||
}
|
||||
|
||||
function drawContextFrame() { #region
|
||||
function drawContextFrame() {
|
||||
if(!context_framing) return;
|
||||
context_frame_progress = lerp_float(context_frame_progress, 1, 5);
|
||||
context_frame_progress = lerp_float(context_frame_progress, 1, 8);
|
||||
if(context_frame_progress == 1)
|
||||
context_framing = false;
|
||||
|
||||
var _fr_x0 = 0, _fr_y0 = 0;
|
||||
var _fr_x1 = w, _fr_y1 = h;
|
||||
var _fr_x0 = 0;
|
||||
var _fr_y0 = 0;
|
||||
var _fr_x1 = w;
|
||||
var _fr_y1 = h - toolbar_height;
|
||||
|
||||
var _to_x0 = context_frame_sx;
|
||||
var _to_y0 = context_frame_sy;
|
||||
|
@ -2185,10 +2203,10 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
var frm_y1 = lerp(_fr_y1, _to_y1, prog);
|
||||
|
||||
draw_set_color(COLORS._main_accent);
|
||||
draw_set_alpha(0.5);
|
||||
draw_set_alpha(0.8);
|
||||
draw_roundrect_ext(frm_x0, frm_y0, frm_x1, frm_y1, THEME_VALUE.panel_corner_radius, THEME_VALUE.panel_corner_radius, true);
|
||||
draw_set_alpha(1);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
function drawContent(panel) { #region //// Main Draw
|
||||
if(!project.active) return;
|
||||
|
@ -2860,6 +2878,25 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
}
|
||||
}
|
||||
|
||||
function createTunnel() {
|
||||
if(__junction_hovering == noone) return;
|
||||
if(__junction_hovering.value_from == noone) return;
|
||||
|
||||
var _jo = __junction_hovering.value_from;
|
||||
var _ji = __junction_hovering;
|
||||
|
||||
var _key = $"{__junction_hovering.name} {seed_random(3)}";
|
||||
|
||||
var _ti = nodeBuild("Node_Tunnel_In", _jo.rx + 32, _jo.ry);
|
||||
var _to = nodeBuild("Node_Tunnel_Out", _ji.rx - 32, _ji.ry);
|
||||
|
||||
_to.inputs[| 0].setValue(_key);
|
||||
_ti.inputs[| 0].setValue(_key);
|
||||
|
||||
_ti.inputs[| 1].setFrom(_jo);
|
||||
_ji.setFrom(_to.outputs[| 0]);
|
||||
}
|
||||
|
||||
//// =========== Serialize ===========
|
||||
|
||||
static serialize = function() {
|
||||
|
|
|
@ -86,11 +86,9 @@ function Panel_Inspector() : PanelContent() constructor {
|
|||
drawWidgetInit();
|
||||
|
||||
#region ---- header labels ----
|
||||
tb_node_name = new textBox(TEXTBOX_INPUT.text, function(txt) {
|
||||
if(inspecting) inspecting.setDisplayName(txt);
|
||||
})
|
||||
tb_node_name = new textBox(TEXTBOX_INPUT.text, function(txt) /*=>*/ { if(inspecting) inspecting.setDisplayName(txt); });
|
||||
|
||||
tb_prop_filter = new textBox(TEXTBOX_INPUT.text, function(txt) { filter_text = txt; })
|
||||
tb_prop_filter = new textBox(TEXTBOX_INPUT.text, function(txt) /*=>*/ { filter_text = txt; });
|
||||
tb_prop_filter.no_empty = false;
|
||||
tb_prop_filter.auto_update = true;
|
||||
tb_prop_filter.font = f_p0;
|
||||
|
@ -99,7 +97,7 @@ function Panel_Inspector() : PanelContent() constructor {
|
|||
tb_prop_filter.hide = true;
|
||||
filter_text = "";
|
||||
|
||||
prop_page_button = new buttonGroup([ "Properties", "Settings", THEME.message_16 ], function(val) { prop_page = val; });
|
||||
prop_page_button = new buttonGroup([ "Properties", "Settings", THEME.message_16 ], function(val) /*=>*/ { prop_page = val; });
|
||||
prop_page_button.buttonSpr = [ THEME.button_hide_left, THEME.button_hide_middle, THEME.button_hide_right ];
|
||||
prop_page_button.font = f_p2;
|
||||
prop_page_button.fColor = COLORS._main_text_sub;
|
||||
|
|
Loading…
Reference in a new issue