Pixel-Composer/scripts/node_tool/node_tool.gml

101 lines
2.5 KiB
Plaintext
Raw Normal View History

function NodeTool(name, spr, context = instanceof(other)) constructor {
2024-04-13 14:14:42 +02:00
ctx = context;
self.name = name;
self.spr = spr;
2023-03-11 01:40:17 +01:00
subtools = is_array(spr)? array_length(spr) : 0;
selecting = 0;
settings = [];
attribute = {};
2024-04-13 07:32:04 +02:00
toolObject = noone;
toolFn = noone;
toolFnParam = {};
static checkHotkey = function() {
2023-11-08 08:38:04 +01:00
INLINE
2024-04-03 10:01:26 +02:00
return getToolHotkey(ctx, name);
}
2024-04-13 07:32:04 +02:00
static setToolObject = function(toolObject) { self.toolObject = toolObject; return self; }
2024-04-13 14:14:42 +02:00
static setToolFn = function(toolFn) { self.toolFn = toolFn; return self; }
2024-04-13 07:32:04 +02:00
static getName = function(index = 0) { return is_array(name)? array_safe_get_fast(name, index, "") : name; }
static getToolObject = function() { return is_array(toolObject)? toolObject[selecting] : toolObject; }
static getDisplayName = function(index = 0) {
var _key = checkHotkey();
var _nme = getName(index);
if(_key != "") _nme += $" ({_key})";
return _nme;
2023-07-15 20:01:29 +02:00
}
static setSetting = function(sets) { array_push(settings, sets); return self; }
2023-03-11 01:40:17 +01:00
static addSetting = function(name, type, onEdit, keyAttr, val) {
var w;
switch(type) {
case VALUE_TYPE.float :
w = new textBox(TEXTBOX_INPUT.number, onEdit);
w.font = f_p3;
2023-03-11 01:40:17 +01:00
break;
case VALUE_TYPE.boolean :
w = new checkBox(onEdit);
break;
}
array_push(settings, [ name, w, keyAttr, attribute ]);
attribute[$ keyAttr] = val;
return self;
}
2023-07-14 20:34:35 +02:00
static toggle = function(index = 0) {
2024-04-13 07:32:04 +02:00
if(toolFn != noone) {
2024-04-13 14:14:42 +02:00
if(subtools == 0) toolFn(ctx);
else toolFn[index](ctx);
2024-04-13 07:32:04 +02:00
return;
}
2023-03-11 01:40:17 +01:00
if(subtools == 0) {
PANEL_PREVIEW.tool_current = PANEL_PREVIEW.tool_current == self? noone : self;
} else {
2023-07-14 20:34:35 +02:00
if(PANEL_PREVIEW.tool_current == self && index == selecting) {
2023-03-11 01:40:17 +01:00
PANEL_PREVIEW.tool_current = noone;
2023-07-14 20:34:35 +02:00
selecting = 0;
} else {
2023-03-11 01:40:17 +01:00
PANEL_PREVIEW.tool_current = self;
2023-07-14 20:34:35 +02:00
selecting = index;
}
2023-03-11 01:40:17 +01:00
}
2023-06-17 14:30:49 +02:00
if(PANEL_PREVIEW.tool_current == self)
onToggle();
2024-04-13 07:32:04 +02:00
var _obj = getToolObject();
2024-04-16 10:34:05 +02:00
if(_obj) _obj.init(ctx);
2023-03-11 01:40:17 +01:00
}
2023-06-17 14:30:49 +02:00
static toggleKeyboard = function() {
if(subtools == 0) {
PANEL_PREVIEW.tool_current = PANEL_PREVIEW.tool_current == self? noone : self;
} else if(PANEL_PREVIEW.tool_current != self) {
PANEL_PREVIEW.tool_current = self;
selecting = 0;
} else if(selecting == subtools - 1) {
PANEL_PREVIEW.tool_current = noone;
selecting = 0;
} else
selecting++;
if(PANEL_PREVIEW.tool_current == self)
onToggle();
}
2023-06-17 14:30:49 +02:00
static onToggle = function() {}
2023-03-11 01:40:17 +01:00
}