Pixel-Composer/scripts/dialog_management/dialog_management.gml
2023-03-02 13:59:14 +07:00

69 lines
No EOL
1.6 KiB
Text

function dialogCall(_dia, _x = noone, _y = noone, param = {}, create = false) {
if(_x == noone) _x = WIN_SW / 2;
if(_y == noone) _y = WIN_SH / 2;
var dia = !create && instance_exists(_dia)? instance_find(_dia, 0) : instance_create_depth(_x, _y, 0, _dia);
dia.x = _x;
dia.y = _y;
dia.xstart = _x;
dia.ystart = _y;
dia.resetPosition();
var args = variable_struct_get_names(param);
for( var i = 0; i < array_length(args); i++ ) {
variable_instance_set(dia, args[i], variable_struct_get(param, args[i]));
}
setFocus(dia.id, "Dialog");
return dia;
}
function menuCall(_x = mouse_mx + ui(4), _y = mouse_my + ui(4), menu = [], align = fa_left) {
var dia = dialogCall(o_dialog_menubox, _x, _y);
dia.setMenu(menu, align);
return dia;
}
function submenuCall(_x, _y, _depth, menu = []) {
var dia = instance_create_depth(_x - ui(4), _y, _depth - 1, o_dialog_menubox);
dia.setMenu(menu);
return dia;
}
function menuItem(name, func, spr = noone, hotkey = noone) {
return new MenuItem(name, func, spr, hotkey);
}
function MenuItem(name, func, spr = noone, hotkey = noone) constructor {
active = true;
self.name = name;
self.func = func;
self.spr = spr;
self.hotkey = hotkey;
isShelf = false;
static setIsShelf = function() {
isShelf = true;
return self;
}
static setActive = function(active) {
self.active = active;
return self;
}
static deactivate = function() {
active = false;
return self;
}
}
function menuItemGroup(name, group) {
return new MenuItemGroup(name, group);
}
function MenuItemGroup(name, group) constructor {
active = true;
self.name = name;
self.group = group;
}