mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-01-11 23:06:51 +01:00
- [Canvas] Add animation type.
This commit is contained in:
parent
6bd74835f4
commit
daef80e921
4 changed files with 77 additions and 25 deletions
|
@ -47,6 +47,9 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
inputs[| 17] = nodeValue("Random direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0, 0 ] )
|
inputs[| 17] = nodeValue("Random direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0, 0 ] )
|
||||||
.setDisplay(VALUE_DISPLAY.rotation_random);
|
.setDisplay(VALUE_DISPLAY.rotation_random);
|
||||||
|
|
||||||
|
inputs[| 18] = nodeValue("Animation Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Loop", "Hold", "Clear" ]);
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
frame_renderer_x = 0;
|
frame_renderer_x = 0;
|
||||||
|
@ -54,7 +57,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
frame_renderer_x_max = 0;
|
frame_renderer_x_max = 0;
|
||||||
|
|
||||||
frame_renderer_content = surface_create(1, 1);
|
frame_renderer_content = surface_create(1, 1);
|
||||||
frame_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus, _full = true) { #region frame_renderer
|
frame_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus, _full = true, _fx = frame_renderer_x) { #region frame_renderer
|
||||||
var _h = _full? 64 : 48;
|
var _h = _full? 64 : 48;
|
||||||
var _anim = getInputData(12);
|
var _anim = getInputData(12);
|
||||||
var _cnt_hover = false;
|
var _cnt_hover = false;
|
||||||
|
@ -88,7 +91,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var _fr_h = _hh - 8;
|
var _fr_h = _hh - 8;
|
||||||
var _fr_w = _fr_h;
|
var _fr_w = _fr_h;
|
||||||
|
|
||||||
var _fr_x = 4 - frame_renderer_x;
|
var _fr_x = 4 - _fx;
|
||||||
var _fr_y = 4;
|
var _fr_y = 4;
|
||||||
|
|
||||||
var surfs = output_surface;
|
var surfs = output_surface;
|
||||||
|
@ -109,7 +112,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var _ssw = _sw * _ss;
|
var _ssw = _sw * _ss;
|
||||||
var _ssh = _sh * _ss;
|
var _ssh = _sh * _ss;
|
||||||
|
|
||||||
draw_surface_ext(_surf, _sx, _sy, _ss, _ss, 0, c_white, 0.75);
|
draw_surface_ext(_surf, _sx, _sy, _ss, _ss, 0, c_white, 1);
|
||||||
draw_sprite_stretched_add(THEME.menu_button_mask, 1, _sx, _sy, _ssw, _ssh, i == preview_index? COLORS._main_accent : COLORS.panel_toolbar_outline, 1);
|
draw_sprite_stretched_add(THEME.menu_button_mask, 1, _sx, _sy, _ssw, _ssh, i == preview_index? COLORS._main_accent : COLORS.panel_toolbar_outline, 1);
|
||||||
|
|
||||||
if(_hover && point_in_rectangle(_m[0], _m[1], _x0, _y0, _x1, _y1)) {
|
if(_hover && point_in_rectangle(_m[0], _m[1], _x0, _y0, _x1, _y1)) {
|
||||||
|
@ -165,15 +168,16 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
return _h + 8 * _full;
|
return _h + 8 * _full;
|
||||||
}); #endregion
|
|
||||||
|
}).setNode(self); #endregion
|
||||||
|
|
||||||
temp_surface = array_create(1);
|
temp_surface = array_create(2);
|
||||||
|
|
||||||
live_edit = false;
|
live_edit = false;
|
||||||
live_target = "";
|
live_target = "";
|
||||||
|
|
||||||
input_display_list = [
|
input_display_list = [
|
||||||
["Output", false], 0, frame_renderer, 12, 13,
|
["Output", false], 0, frame_renderer, 12, 18, 13,
|
||||||
["Brush", true], 6, 15, 17, 16,
|
["Brush", true], 6, 15, 17, 16,
|
||||||
["Background", true, 10], 8, 14, 9,
|
["Background", true, 10], 8, 14, 9,
|
||||||
];
|
];
|
||||||
|
@ -935,17 +939,19 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var fram = attributes.frames;
|
var fram = attributes.frames;
|
||||||
var brush = getInputData(6);
|
var brush = getInputData(6);
|
||||||
var anim = getInputData(12);
|
var anim = getInputData(12);
|
||||||
var anims = getInputData(13);
|
|
||||||
|
|
||||||
inputs[| 12].setVisible(fram > 1);
|
|
||||||
inputs[| 13].setVisible(fram > 1 && anim);
|
|
||||||
inputs[| 15].setVisible(is_surface(brush));
|
inputs[| 15].setVisible(is_surface(brush));
|
||||||
inputs[| 16].setVisible(is_surface(brush));
|
inputs[| 16].setVisible(is_surface(brush));
|
||||||
|
|
||||||
update_on_frame = fram > 1 && anim;
|
update_on_frame = fram > 1 && anim;
|
||||||
|
|
||||||
if(update_on_frame)
|
if(update_on_frame) {
|
||||||
preview_index = safe_mod(CURRENT_FRAME * anims, fram);
|
var anims = getInputData(13);
|
||||||
|
var atype = getInputData(18);
|
||||||
|
|
||||||
|
if(atype == 0) preview_index = safe_mod(CURRENT_FRAME * anims, fram);
|
||||||
|
else preview_index = min(CURRENT_FRAME * anims, fram - 1);
|
||||||
|
}
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static update = function(frame = CURRENT_FRAME) { #region
|
static update = function(frame = CURRENT_FRAME) { #region
|
||||||
|
@ -956,6 +962,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var _anim = getInputData(12);
|
var _anim = getInputData(12);
|
||||||
var _anims = getInputData(13);
|
var _anims = getInputData(13);
|
||||||
var _bgDim = getInputData(14);
|
var _bgDim = getInputData(14);
|
||||||
|
var _atype = getInputData(18);
|
||||||
|
|
||||||
var cDep = attrDepth();
|
var cDep = attrDepth();
|
||||||
|
|
||||||
|
@ -993,7 +1000,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var _canvas_surface = getCanvasSurface(i);
|
var _canvas_surface = getCanvasSurface(i);
|
||||||
var _bgArray = is_array(_bg)? array_safe_get_fast(_bg, i, 0) : _bg;
|
var _bgArray = is_array(_bg)? array_safe_get_fast(_bg, i, 0) : _bg;
|
||||||
output_surface[i] = surface_verify(output_surface[i], _dim[0], _dim[1], cDep);
|
output_surface[i] = surface_verify(output_surface[i], _dim[0], _dim[1], cDep);
|
||||||
|
|
||||||
surface_set_shader(output_surface[i], noone,, BLEND.alpha);
|
surface_set_shader(output_surface[i], noone,, BLEND.alpha);
|
||||||
if(_bgr && is_surface(_bgArray))
|
if(_bgr && is_surface(_bgArray))
|
||||||
draw_surface_stretched_ext(_bgArray, 0, 0, _dim[0], _dim[1], c_white, _bga);
|
draw_surface_stretched_ext(_bgArray, 0, 0, _dim[0], _dim[1], c_white, _bga);
|
||||||
|
@ -1001,9 +1008,19 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
surface_reset_shader();
|
surface_reset_shader();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
temp_surface[1] = surface_verify(temp_surface[1], _dim[0], _dim[1], cDep);
|
||||||
|
surface_clear(temp_surface[1]);
|
||||||
|
|
||||||
if(_anim) {
|
if(_anim) {
|
||||||
var _fr_index = safe_mod(CURRENT_FRAME * _anims, _frames);
|
var _fr_index = CURRENT_FRAME * _anims;
|
||||||
outputs[| 0].setValue(output_surface[_fr_index]);
|
switch(_atype) {
|
||||||
|
case 0 : _fr_index = safe_mod(_fr_index, _frames); break;
|
||||||
|
case 1 : _fr_index = min(_fr_index, _frames - 1); break;
|
||||||
|
case 2 : _fr_index = _fr_index < _frames? _fr_index : noone; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
outputs[| 0].setValue(_fr_index == noone? temp_surface[1] : output_surface[_fr_index]);
|
||||||
|
|
||||||
} else
|
} else
|
||||||
outputs[| 0].setValue(output_surface);
|
outputs[| 0].setValue(output_surface);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,10 @@ function Node_Canvas_Group(_x, _y, _group) : Node_Collection(_x, _y, _group) con
|
||||||
composite = noone;
|
composite = noone;
|
||||||
canvas_sel = noone;
|
canvas_sel = noone;
|
||||||
|
|
||||||
|
frame_renderer_x = 0;
|
||||||
|
frame_renderer_x_to = 0;
|
||||||
|
frame_renderer_x_max = 0;
|
||||||
|
|
||||||
layer_height = 0;
|
layer_height = 0;
|
||||||
layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) {
|
layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) {
|
||||||
var _h = ui(4);
|
var _h = ui(4);
|
||||||
|
@ -46,6 +50,9 @@ function Node_Canvas_Group(_x, _y, _group) : Node_Collection(_x, _y, _group) con
|
||||||
var _yy = _y;
|
var _yy = _y;
|
||||||
|
|
||||||
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, frame_renderer.h, COLORS.node_composite_bg_blend, 1);
|
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, frame_renderer.h, COLORS.node_composite_bg_blend, 1);
|
||||||
|
var _cnt_hover = _hover && point_in_rectangle(_m[0], _m[1], _x, _y, _x + _w, _y + frame_renderer.h);
|
||||||
|
|
||||||
|
frame_renderer_x_max = 0;
|
||||||
|
|
||||||
for (var i = array_length(canvases) - 1; i >= 0; i--) {
|
for (var i = array_length(canvases) - 1; i >= 0; i--) {
|
||||||
var _canvas = canvases[i];
|
var _canvas = canvases[i];
|
||||||
|
@ -55,11 +62,20 @@ function Node_Canvas_Group(_x, _y, _group) : Node_Collection(_x, _y, _group) con
|
||||||
_frame_render.rx = frame_renderer.rx;
|
_frame_render.rx = frame_renderer.rx;
|
||||||
_frame_render.ry = frame_renderer.ry;
|
_frame_render.ry = frame_renderer.ry;
|
||||||
|
|
||||||
var _wdh = _frame_render.draw(_x, _yy, _w, _m, _hover, _focus, false);
|
var _wdh = _frame_render.draw(_x, _yy, _w, _m, _hover, _focus, false, frame_renderer_x);
|
||||||
if(!is_undefined(_wdh)) {
|
if(is_undefined(_wdh)) continue;
|
||||||
_h += _wdh;
|
|
||||||
_yy += _wdh;
|
frame_renderer_x_max = max(frame_renderer_x_max, _frame_render.node.frame_renderer_x_max);
|
||||||
}
|
_h += _wdh - ui(2);
|
||||||
|
_yy += _wdh - ui(2);
|
||||||
|
}
|
||||||
|
_h += ui(2);
|
||||||
|
|
||||||
|
frame_renderer_x = lerp_float(frame_renderer_x, frame_renderer_x_to, 3);
|
||||||
|
|
||||||
|
if(_cnt_hover) {
|
||||||
|
if(mouse_wheel_down()) frame_renderer_x_to = clamp(frame_renderer_x_to + 80, 0, frame_renderer_x_max);
|
||||||
|
if(mouse_wheel_up()) frame_renderer_x_to = clamp(frame_renderer_x_to - 80, 0, frame_renderer_x_max);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame_renderer.h = _h;
|
frame_renderer.h = _h;
|
||||||
|
|
|
@ -162,7 +162,7 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
} else
|
} else
|
||||||
draw_sprite_ui_uniform(THEME.cursor_select, sel, _bx, _cy + lh / 2, 1, COLORS._main_icon, 0.5 + 0.5 * sel);
|
draw_sprite_ui_uniform(THEME.cursor_select, sel, _bx, _cy + lh / 2, 1, COLORS._main_icon, 0.5 + 0.5 * sel);
|
||||||
|
|
||||||
var hover = point_in_rectangle(_m[0], _m[1], _bx + ui(12 + 6), _cy, _x + _w - ui(48), _cy + lh - 1);
|
var hover = _hover && point_in_rectangle(_m[0], _m[1], _bx + ui(12 + 6), _cy, _x + _w - ui(48), _cy + lh - 1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region draw surface
|
#region draw surface
|
||||||
|
@ -180,7 +180,7 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
else draw_sprite_stretched_add(THEME.menu_button_mask, 1, _sx0, _sy0, ssh, ssh, COLORS._main_icon, 0.3);
|
else draw_sprite_stretched_add(THEME.menu_button_mask, 1, _sx0, _sy0, ssh, ssh, COLORS._main_icon, 0.3);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region layers
|
#region canvas layers
|
||||||
var _junc_canvas = noone;
|
var _junc_canvas = noone;
|
||||||
var _jun_layer = noone;
|
var _jun_layer = noone;
|
||||||
if(canvas_draw != noone && _junc && struct_has(canvas_draw.layers, _junc.node_id)) {
|
if(canvas_draw != noone && _junc && struct_has(canvas_draw.layers, _junc.node_id)) {
|
||||||
|
@ -190,11 +190,13 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region draw title
|
#region draw title
|
||||||
draw_set_text(f_p1, fa_left, fa_center, hover? COLORS._main_text_accent : COLORS._main_text);
|
|
||||||
var _txt = _inp.name;
|
var _txt = _inp.name;
|
||||||
var _txx = _sx1 + ui(12);
|
var _txx = _sx1 + ui(12);
|
||||||
var _txy = _cy + lh / 2 + ui(2);
|
var _txy = _cy + lh / 2 + ui(2);
|
||||||
|
|
||||||
|
if(_junc_canvas) hover &= _m[0] > _txx + ui(8 + 16);
|
||||||
|
|
||||||
|
draw_set_text(f_p1, fa_left, fa_center, hover? COLORS._main_text_accent : COLORS._main_text);
|
||||||
if(canvas_draw != noone && _junc_canvas)
|
if(canvas_draw != noone && _junc_canvas)
|
||||||
_txt = _junc_canvas.display_name;
|
_txt = _junc_canvas.display_name;
|
||||||
|
|
||||||
|
@ -207,7 +209,22 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
var _txh = string_height(_txt);
|
var _txh = string_height(_txt);
|
||||||
|
|
||||||
if(_junc_canvas) {
|
if(_junc_canvas) {
|
||||||
draw_sprite_ui_uniform(THEME.icon_canvas, 0, _txx + ui(8), _txy - ui(1), 1, draw_get_color(), aa * .8);
|
var _icx = _txx + ui(8);
|
||||||
|
var _icy = _txy - ui(1);
|
||||||
|
var _icc = COLORS._main_icon;
|
||||||
|
var _ica = aa * .8;
|
||||||
|
|
||||||
|
if(_hover && point_in_circle(_m[0], _m[1], _icx, _icy, ui(10))) {
|
||||||
|
_icc = COLORS._main_icon_light;
|
||||||
|
_ica = 1;
|
||||||
|
|
||||||
|
if(DOUBLE_CLICK) {
|
||||||
|
var pan = panelAdd("Panel_Inspector", true);
|
||||||
|
pan.content.setInspecting(_junc_canvas, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_sprite_ui_uniform(THEME.icon_canvas, 0, _icx, _icy, 1, _icc, _ica);
|
||||||
|
|
||||||
draw_set_alpha(aa);
|
draw_set_alpha(aa);
|
||||||
draw_text(_txx + ui(8 + 16), _txy, _txt);
|
draw_text(_txx + ui(8 + 16), _txy, _txt);
|
||||||
|
@ -254,7 +271,6 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
|
|
||||||
if(_mhov && DOUBLE_CLICK) {
|
if(_mhov && DOUBLE_CLICK) {
|
||||||
var pan = panelAdd("Panel_Inspector", true);
|
var pan = panelAdd("Panel_Inspector", true);
|
||||||
// pan.destroy_on_click_out = false;
|
|
||||||
pan.content.setInspecting(_modi, true);
|
pan.content.setInspecting(_modi, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,7 +424,7 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
outputs[| 1] = nodeValue("Atlas data", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, []);
|
outputs[| 1] = nodeValue("Atlas data", self, JUNCTION_CONNECT.output, VALUE_TYPE.atlas, []);
|
||||||
|
|
||||||
outputs[| 2] = nodeValue("Dimension", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, [1, 1])
|
outputs[| 2] = nodeValue("Dimension", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, [1, 1])
|
||||||
.setVisible(false)
|
.setVisible(false)
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
function Inspector_Custom_Renderer(drawFn, registerFn = noone) : widget() constructor { #region
|
function Inspector_Custom_Renderer(drawFn, registerFn = noone) : widget() constructor { #region
|
||||||
h = 64;
|
h = 64;
|
||||||
|
node = noone;
|
||||||
self.draw = drawFn;
|
self.draw = drawFn;
|
||||||
|
|
||||||
if(registerFn != noone) register = registerFn;
|
if(registerFn != noone) register = registerFn;
|
||||||
|
@ -26,6 +27,8 @@ function Inspector_Custom_Renderer(drawFn, registerFn = noone) : widget() constr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static setNode = function(node) { self.node = node; return self; }
|
||||||
|
|
||||||
static toString = function() { return $"Custon renderer"; }
|
static toString = function() { return $"Custon renderer"; }
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue