function Node_ASE_layer(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { name = "ASE Layer"; newInput(0, nodeValue("ASE data", self, CONNECT_TYPE.input, VALUE_TYPE.object, noone)) .setIcon(s_junc_aseprite, c_white) .setVisible(false, true) .rejectArray(); newInput(1, nodeValue_Bool("Crop Output", self, false)) .rejectArray(); newInput(2, nodeValue_Text("Layer name", self, "")) .rejectArray(); newOutput(0, nodeValue_Output("Surface out", self, VALUE_TYPE.surface, noone)); newOutput(1, nodeValue_Output("Layer name", self, VALUE_TYPE.text, "")); layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { if(ase_data == noone) { draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, 28, COLORS.node_composite_bg_blend, 1); draw_set_text(f_p3, fa_center, fa_center, COLORS._main_text_sub); draw_text_add(_x + _w / 2, _y + 14, "No data"); return 32; } var _amo = array_length(ase_data.layers); var hh = 24; var _h = hh * _amo + 16; draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, _h, COLORS.node_composite_bg_blend, 1); for( var i = 0, n = array_length(ase_data.layers); i < n; i++ ) { var _bx = _x + 24; var _yy = _y + 8 + i * hh; var _layer = ase_data.layers[i]; if(_layer.type == 0) { draw_sprite_ui_uniform(THEME.icon_canvas, 0, _bx, _yy + hh / 2, 1, COLORS._main_icon); } else if(_layer.type == 1) draw_sprite_ui_uniform(THEME.folder_16, 0, _bx, _yy + hh / 2, 1, COLORS._main_icon); var cc = COLORS._main_text_sub; if(_hover && point_in_rectangle(_m[0], _m[1], _x, _yy, _x + _w, _yy + hh - 1)) { cc = COLORS._main_text; if(mouse_press(mb_left, _focus)) inputs[2].setValue(_layer.name); } if(_layer == layer_object) cc = COLORS._main_text_accent; draw_set_text(f_p2, fa_left, fa_center, cc); draw_text_add(_bx + 16, _yy + hh / 2, _layer.name); } return _h; }); input_display_list = [ 0, layer_renderer, 2, 1, ]; ase_data = noone; layer_object = noone; static onValueFromUpdate = function(index) { findLayer(); } static findLayer = function() { layer_object = noone; var data = getInputDataForce(0); ase_data = data; if(data == noone) return; var _lname = getInputData(2); setDisplayName(_lname); for( var i = 0, n = array_length(data.layers); i < n; i++ ) { if(data.layers[i].name == _lname) layer_object = data.layers[i]; } } static update = function(frame = CURRENT_FRAME) { findLayer(); var data = getInputData(0); var celDim = getInputData(1); var _lname = getInputData(2); ase_data = data; outputs[1].setValue(_lname); if(layer_object == noone) { logNode($"Layer name {_lname} not found."); return; } var cel = layer_object.getCel(CURRENT_FRAME - data._tag_delay); var ww = data.content[$ "Width"]; var hh = data.content[$ "Height"]; var cw = cel? cel.data[$ "Width"] : 1; var ch = cel? cel.data[$ "Height"] : 1; var surf = outputs[0].getValue(); if(celDim) surf = surface_verify(surf, cw, ch); else surf = surface_verify(surf, ww, hh); outputs[0].setValue(surf); if(cel == 0) { surface_clear(surf); return; } var _inSurf = cel.getSurface(); var xx = celDim? 0 : cel.data[$ "X"]; var yy = celDim? 0 : cel.data[$ "Y"]; surface_set_shader(surf, noone); draw_surface_safe(_inSurf, xx, yy); surface_reset_shader(); } static postApplyDeserialize = function() { if(LOADING_VERSION < 1_18_00_0 && display_name != "") inputs[2].setValue(display_name); } }