Pixel-Composer/scripts/node_gm_room/node_gm_room.gml
2024-11-21 18:07:07 +07:00

94 lines
No EOL
2.6 KiB
Text

function Node_GMRoom(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "GMRoom";
color = COLORS.node_blend_input;
gmRoom = noone;
newInput( 0, nodeValue_Vec2("Room size", self, [ 16, 16 ]));
newInput( 1, nodeValue_Bool("Persistance", self, false));
attributes.exposed_layer = [];
layer_selecting = noone;
layers_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) {
if(gmRoom == noone) {
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, ui(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 + ui(14), "No data");
return ui(28);
}
var _amo = array_length(gmRoom.layers);
var hh = ui(28);
var _h = hh * _amo + ui(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(gmRoom.layers); i < n; i++ ) {
var _bx = _x + ui(24);
var _yy = _y + ui(8) + i * hh;
var _layer = gmRoom.layers[i];
var cc = layer_selecting == _layer? COLORS._main_text_accent : 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))
layer_selecting = layer_selecting == _layer? noone : _layer;
}
draw_sprite_ui_uniform(s_gmlayer, _layer.index, _bx, _yy + hh / 2, 1, cc);
draw_set_text(f_p2, fa_left, fa_center, cc);
draw_text_add(_bx + ui(20), _yy + hh / 2, _layer.name);
}
return _h;
});
layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) {
if(layer_selecting == noone) {
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, ui(28), COLORS.node_composite_bg_blend, 1);
return ui(28);
}
var _h = ui(64);
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, _h, COLORS.node_composite_bg_blend, 1);
return _h;
});
input_display_list = [
["Room settings", false], 0, 1,
["Layers", false],
layers_renderer,
new Inspector_Spacer(ui(4)),
layer_renderer,
];
static step = function() {
}
static update = function() {
}
static attributeSerialize = function() {
var _attr = {
gm_key: gmRoom == noone? noone : gmRoom.key,
};
return _attr;
}
static attributeDeserialize = function(attr) {
if(struct_has(attr, "gm_key")) {
var _key = attr.gm_key;
var _gm = project.bind_gamemaker;
if(_gm != noone) gmRoom = struct_try_get(_gm.resourcesMap, _ey, noone);
}
}
}