mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-24 22:16:17 +01:00
ui
This commit is contained in:
parent
1d43f5d8a8
commit
be111dc314
12 changed files with 1213 additions and 29 deletions
|
@ -0,0 +1,34 @@
|
|||
// 2024-05-01 08:40:45
|
||||
#event properties (no comments/etc. here are saved)
|
||||
parent_index = -1;
|
||||
uses_physics = false;
|
||||
|
||||
#event create Insert description here
|
||||
onApply = noone;
|
||||
def_c = noone;
|
||||
cur_c = c_black;
|
||||
|
||||
depth = -32000;
|
||||
|
||||
#event draw_gui Insert description here
|
||||
MOUSE_BLOCK = true;
|
||||
|
||||
var dx = mouse_mx + ui(36);
|
||||
var dy = mouse_my + ui(36);
|
||||
draw_sprite_stretched(THEME.color_picker_sample, 0, dx - ui(20), dy - ui(20), ui(40), ui(40));
|
||||
draw_sprite_stretched_ext(THEME.color_picker_sample, 0, dx - ui(18), dy - ui(18), ui(36), ui(36), cur_c, 1);
|
||||
|
||||
#event draw_gui_end Insert description here
|
||||
cur_c = int64(cola(draw_getpixel(mouse_mx, mouse_my)));
|
||||
|
||||
MOUSE_BLOCK = true;
|
||||
|
||||
if(mouse_check_button_pressed(mb_right) || keyboard_check_released(ALT)) {
|
||||
if(def_c != noone) onApply(def_c);
|
||||
instance_destroy();
|
||||
}
|
||||
|
||||
if(mouse_check_button_pressed(mb_left)) {
|
||||
onApply(cur_c);
|
||||
instance_destroy();
|
||||
}
|
363
#backups/scripts/color_selector/color_selector.gml.backup0
Normal file
363
#backups/scripts/color_selector/color_selector.gml.backup0
Normal file
|
@ -0,0 +1,363 @@
|
|||
// 2024-05-01 08:40:49
|
||||
function colorSelector(onApply = noone) constructor {
|
||||
self.onApply = onApply;
|
||||
|
||||
current_color = c_white;
|
||||
|
||||
hue = 1;
|
||||
sat = 0;
|
||||
val = 0;
|
||||
|
||||
area_dragging = false;
|
||||
side_dragging = false;
|
||||
|
||||
dropper_active = false;
|
||||
dropper_close = true;
|
||||
dropper_color = c_white;
|
||||
interactable = true;
|
||||
|
||||
disp_mode = 0;
|
||||
|
||||
palette = [];
|
||||
discretize_pal = true;
|
||||
|
||||
color_surface = surface_create_valid(ui(256), ui(256));
|
||||
|
||||
tb_hue = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
hue = clamp(_val, 0, 255);
|
||||
setHSV();
|
||||
});
|
||||
|
||||
tb_sat = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
sat = clamp(_val, 0, 255);
|
||||
setHSV();
|
||||
});
|
||||
|
||||
tb_val= slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
val = clamp(_val, 0, 255);
|
||||
setHSV();
|
||||
});
|
||||
|
||||
tb_red = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
var r = clamp(_val, 0, 255);
|
||||
var g = color_get_green(current_color);
|
||||
var b = color_get_blue(current_color);
|
||||
var a = color_get_alpha(current_color);
|
||||
|
||||
current_color = make_color_rgba(r, g, b, a);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
tb_green = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
var r = color_get_red(current_color);
|
||||
var g = clamp(_val, 0, 255);
|
||||
var b = color_get_blue(current_color);
|
||||
var a = color_get_alpha(current_color);
|
||||
|
||||
current_color = make_color_rgba(r, g, b, a);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
tb_blue = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
var r = color_get_red(current_color);
|
||||
var g = color_get_green(current_color);
|
||||
var b = clamp(_val, 0, 255);
|
||||
var a = color_get_alpha(current_color);
|
||||
|
||||
current_color = make_color_rgba(r, g, b, a);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
tb_alpha = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
var alp = clamp(_val, 0, 255);
|
||||
|
||||
current_color = _cola(current_color, alp);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
tb_hue.hdw = ui(16);
|
||||
tb_sat.hdw = ui(16);
|
||||
tb_val.hdw = ui(16);
|
||||
tb_red.hdw = ui(16);
|
||||
tb_green.hdw = ui(16);
|
||||
tb_blue.hdw = ui(16);
|
||||
tb_alpha.hdw = ui(16);
|
||||
|
||||
tb_hue.font = f_p1;
|
||||
tb_sat.font = f_p1;
|
||||
tb_val.font = f_p1;
|
||||
tb_red.font = f_p1;
|
||||
tb_green.font = f_p1;
|
||||
tb_blue.font = f_p1;
|
||||
tb_alpha.font = f_p1;
|
||||
|
||||
tb_hex = new textBox(TEXTBOX_INPUT.text, function(str) {
|
||||
if(!interactable) return;
|
||||
if(str == "") return;
|
||||
if(string_char_at(str, 1) == "#") str = string_replace(str, "#", "");
|
||||
|
||||
var _r = string_hexadecimal(string_copy(str, 1, 2));
|
||||
var _g = string_hexadecimal(string_copy(str, 3, 2));
|
||||
var _b = string_hexadecimal(string_copy(str, 5, 2));
|
||||
var _a = string_length(str) > 6? string_hexadecimal(string_copy(str, 7, 2)) : 255;
|
||||
|
||||
current_color = make_color_rgba(_r, _g, _b, _a);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
scr_disp = new buttonGroup(["Hue", "Value"], function(mode) { disp_mode = mode; } );
|
||||
|
||||
function resetHSV(_apply = true) {
|
||||
hue = round(color_get_hue(current_color));
|
||||
sat = round(color_get_saturation(current_color));
|
||||
val = round(color_get_value(current_color));
|
||||
|
||||
if(_apply && onApply != noone) onApply(int64(current_color));
|
||||
}
|
||||
|
||||
function setHSV(_apply = true) {
|
||||
if(!interactable) return;
|
||||
var alp = color_get_alpha(current_color);
|
||||
current_color = make_color_hsva(hue, sat, val, alp);
|
||||
|
||||
if(_apply && onApply != noone) onApply(int64(current_color));
|
||||
}
|
||||
|
||||
function setColor(color, _apply = true) {
|
||||
current_color = color;
|
||||
|
||||
resetHSV(_apply);
|
||||
}
|
||||
|
||||
function colorPicker() {
|
||||
if(!dropper_active) return;
|
||||
dropper_color = int64(cola(draw_getpixel(mouse_mx, mouse_my)));
|
||||
MOUSE_BLOCK = true;
|
||||
}
|
||||
|
||||
static drawDropper = function(instance) {
|
||||
if(mouse_check_button_pressed(mb_left)) {
|
||||
setColor(dropper_color);
|
||||
if(dropper_close)
|
||||
instance_destroy(instance);
|
||||
dropper_active = false;
|
||||
MOUSE_BLOCK = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if(dropper_active && mouse_check_button_pressed(mb_right))
|
||||
instance_destroy(instance);
|
||||
if(keyboard_check_released(vk_alt))
|
||||
instance_destroy(instance);
|
||||
|
||||
var dx = mouse_mx + ui(36);
|
||||
var dy = mouse_my + ui(36);
|
||||
draw_sprite_stretched(THEME.color_picker_sample, 0, dx - ui(20), dy - ui(20), ui(40), ui(40));
|
||||
draw_sprite_stretched_ext(THEME.color_picker_sample, 0, dx - ui(18), dy - ui(18), ui(36), ui(36), dropper_color, 1);
|
||||
}
|
||||
|
||||
static draw = function(_x, _y, focus, hover) {
|
||||
var col_x = _x + ui(8);
|
||||
var col_y = _y + ui(8);
|
||||
|
||||
draw_sprite_stretched(THEME.ui_panel_bg, 1, col_x - ui(8), col_y - ui(8), ui(256 + 16), ui(256 + 16));
|
||||
|
||||
color_surface = surface_verify(color_surface, ui(256), ui(256));
|
||||
surface_set_target(color_surface);
|
||||
if(disp_mode == 0) {
|
||||
shader_set(sh_color_picker_hue);
|
||||
shader_set_f("hue", hue / 256);
|
||||
shader_set_i("usePalette", NODE_COLOR_SHOW_PALETTE && discretize_pal);
|
||||
shader_set_palette(palette);
|
||||
} else if(disp_mode == 1) {
|
||||
shader_set(sh_color_picker_value);
|
||||
shader_set_f("value", val / 256);
|
||||
shader_set_i("usePalette", NODE_COLOR_SHOW_PALETTE && discretize_pal);
|
||||
shader_set_palette(palette);
|
||||
}
|
||||
|
||||
draw_sprite_uniform(s_fx_pixel, 0, 0, 0, ui(256));
|
||||
shader_reset();
|
||||
surface_reset_target();
|
||||
|
||||
draw_surface_ext_safe(color_surface, col_x, col_y,,,,, interactable * 0.5 + 0.5);
|
||||
|
||||
#region side control
|
||||
var hue_x = col_x + ui(280);
|
||||
var hue_y = col_y;
|
||||
|
||||
draw_sprite_stretched(THEME.ui_panel_bg, 1, hue_x - ui(8), hue_y - ui(8), ui(32), ui(256 + 16));
|
||||
|
||||
if(disp_mode == 0) {
|
||||
shader_set(sh_color_picker_side_hue);
|
||||
shader_set_i("usePalette", NODE_COLOR_SHOW_PALETTE && discretize_pal);
|
||||
shader_set_palette(palette);
|
||||
shader_set_f("sat", sat / 256);
|
||||
shader_set_f("value", val / 256);
|
||||
|
||||
draw_sprite_stretched_ext(s_fx_pixel, 0, hue_x, hue_y, ui(16), ui(256), c_white, interactable * 0.5 + 0.5);
|
||||
shader_reset();
|
||||
} else if(disp_mode == 1) {
|
||||
shader_set(sh_color_picker_side_value);
|
||||
shader_set_i("usePalette", NODE_COLOR_SHOW_PALETTE && discretize_pal);
|
||||
shader_set_palette(palette);
|
||||
shader_set_f("hue", hue / 256);
|
||||
shader_set_f("sat", sat / 256);
|
||||
|
||||
draw_sprite_stretched_ext(s_fx_pixel, 0, hue_x, hue_y, ui(16), ui(256), c_white, interactable * 0.5 + 0.5)
|
||||
shader_reset();
|
||||
}
|
||||
|
||||
var _sy = disp_mode == 0? hue_y + ui(hue) : hue_y + ui(256 - val);
|
||||
|
||||
if(NODE_COLOR_SHOW_PALETTE) {
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, hue_x - ui(3), _sy - ui(6), ui(24), ui(10), current_color, 1);
|
||||
|
||||
if(disp_mode == 0)
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, col_x + ui(sat - 6), col_y + ui(256 - val - 6), ui(12), ui(12), current_color, 1);
|
||||
else if(disp_mode == 1)
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, col_x + ui(hue - 6), col_y + ui(256 - sat - 6), ui(12), ui(12), current_color, 1);
|
||||
} else {
|
||||
if(disp_mode == 0) {
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, hue_x - ui(3), _sy - ui(6), ui(24), ui(10), make_color_hsv(hue, 255, 255), 1);
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, col_x + ui(sat - 6), col_y + ui(256 - val - 6), ui(12), ui(12), current_color, 1);
|
||||
} else if(disp_mode == 1) {
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, hue_x - ui(3), _sy - ui(6), ui(24), ui(10), make_color_hsv(hue, 255, val), 1);
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, col_x + ui(hue - 6), col_y + ui(256 - sat - 6), ui(12), ui(12), current_color, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if(mouse_press(mb_left, interactable && focus)) {
|
||||
if(point_in_rectangle(mouse_mx, mouse_my, hue_x, hue_y, hue_x + ui(16), hue_y + ui(256)))
|
||||
side_dragging = true;
|
||||
else if(point_in_rectangle(mouse_mx, mouse_my, col_x, col_y, col_x + ui(256), col_y + ui(256)))
|
||||
area_dragging = true;
|
||||
}
|
||||
|
||||
if(side_dragging) {
|
||||
if(disp_mode == 0) {
|
||||
hue = clamp((mouse_my - hue_y) / UI_SCALE, 0, 256);
|
||||
} else if(disp_mode == 1) {
|
||||
val = 256 - clamp((mouse_my - hue_y) / UI_SCALE, 0, 256);
|
||||
}
|
||||
|
||||
setHSV();
|
||||
|
||||
if(NODE_COLOR_SHOW_PALETTE) {
|
||||
current_color = disp_mode == 0? surface_getpixel(color_surface, sat, 256 - val) :
|
||||
surface_getpixel(color_surface, hue, 256 - sat);
|
||||
if(onApply != noone) onApply(current_color);
|
||||
}
|
||||
|
||||
if(mouse_release(mb_left))
|
||||
side_dragging = false;
|
||||
}
|
||||
|
||||
if(area_dragging) {
|
||||
if(disp_mode == 0) {
|
||||
sat = clamp((mouse_mx - col_x) / UI_SCALE, 0, 256);
|
||||
val = 256 - clamp((mouse_my - col_y) / UI_SCALE, 0, 256);
|
||||
} else if(disp_mode == 1) {
|
||||
hue = clamp((mouse_mx - col_x) / UI_SCALE, 0, 256);
|
||||
sat = 256 - clamp((mouse_my - col_y) / UI_SCALE, 0, 256);
|
||||
}
|
||||
|
||||
setHSV();
|
||||
|
||||
if(NODE_COLOR_SHOW_PALETTE) {
|
||||
current_color = disp_mode == 0? surface_getpixel(color_surface, sat, 256 - val) :
|
||||
surface_getpixel(color_surface, hue, 256 - sat);
|
||||
if(onApply != noone) onApply(current_color);
|
||||
}
|
||||
|
||||
if(mouse_release(mb_left))
|
||||
area_dragging = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region type
|
||||
var tx = hue_x + ui(36);
|
||||
var ty = _y + ui(4);
|
||||
|
||||
scr_disp.setFocusHover(focus, hover);
|
||||
scr_disp.draw(tx, ty, ui(190), ui(32), disp_mode, mouse_ui);
|
||||
#endregion
|
||||
|
||||
#region register
|
||||
scr_disp.register();
|
||||
|
||||
tb_hue.register();
|
||||
tb_sat.register();
|
||||
tb_val.register();
|
||||
|
||||
tb_red.register();
|
||||
tb_green.register();
|
||||
tb_blue.register();
|
||||
|
||||
tb_hex.register();
|
||||
#endregion
|
||||
|
||||
#region data
|
||||
var data_x = hue_x + ui(40);
|
||||
var data_y = col_y + ui(40);
|
||||
var wdw = ui(160);
|
||||
var wdh = ui( 27);
|
||||
var txh = wdh + ui(4);
|
||||
|
||||
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text);
|
||||
draw_text(data_x, data_y + txh * 0 + ui(15), "H");
|
||||
draw_text(data_x, data_y + txh * 1 + ui(15), "S")
|
||||
draw_text(data_x, data_y + txh * 2 + ui(15), "V");
|
||||
|
||||
tb_hue.setFocusHover(focus, hover);
|
||||
tb_sat.setFocusHover(focus, hover);
|
||||
tb_val.setFocusHover(focus, hover);
|
||||
|
||||
tb_hue.draw(data_x + ui(28), data_y + txh * 0, wdw, wdh, round(color_get_hue(current_color)), mouse_ui);
|
||||
tb_sat.draw(data_x + ui(28), data_y + txh * 1, wdw, wdh, round(color_get_saturation(current_color)), mouse_ui);
|
||||
tb_val.draw(data_x + ui(28), data_y + txh * 2, wdw, wdh, round(color_get_value(current_color)), mouse_ui);
|
||||
|
||||
data_y = data_y + txh * 3 + ui(8);
|
||||
|
||||
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text);
|
||||
draw_text(data_x, data_y + txh * 0 + ui(15), "R");
|
||||
draw_text(data_x, data_y + txh * 1 + ui(15), "G");
|
||||
draw_text(data_x, data_y + txh * 2 + ui(15), "B");
|
||||
draw_text(data_x, data_y + txh * 3 + ui(15), "A");
|
||||
|
||||
tb_red.setFocusHover (focus, hover);
|
||||
tb_green.setFocusHover(focus, hover);
|
||||
tb_blue.setFocusHover (focus, hover);
|
||||
tb_alpha.setFocusHover(focus, hover);
|
||||
|
||||
tb_red.draw (data_x + ui(28), data_y + txh * 0, wdw, wdh, round(color_get_red(current_color)), mouse_ui);
|
||||
tb_green.draw(data_x + ui(28), data_y + txh * 1, wdw, wdh, round(color_get_green(current_color)), mouse_ui);
|
||||
tb_blue.draw (data_x + ui(28), data_y + txh * 2, wdw, wdh, round(color_get_blue(current_color)), mouse_ui);
|
||||
tb_alpha.draw(data_x + ui(28), data_y + txh * 3, wdw, wdh, round(color_get_alpha(current_color)), mouse_ui);
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
tb_hex.active = focus; tb_hex.hover = hover;
|
||||
tb_hex.draw(hue_x - ui(128), col_y + ui(256 + 24), ui(108), TEXTBOX_HEIGHT, color_get_hex(current_color), mouse_ui);
|
||||
#endregion
|
||||
|
||||
var cx = col_x + ui(16);
|
||||
var cy = col_y + ui(296);
|
||||
var aa = _color_get_alpha(current_color);
|
||||
|
||||
draw_sprite_stretched_ext(THEME.color_picker_box, 0, cx - ui(20), cy - ui(20), ui(40), ui(40), COLORS._main_icon_dark, 1);
|
||||
draw_sprite_stretched_ext(THEME.color_picker_box, 1, cx - ui(18), cy - ui(18), ui(36), ui(36), current_color, aa);
|
||||
|
||||
cx += ui(48);
|
||||
if(buttonInstant(THEME.button_hide, cx - ui(18), cy - ui(18), ui(36), ui(36), mouse_ui, focus, hover, "", THEME.color_picker_dropper, 0, c_white) == 2)
|
||||
dropper_active = true;
|
||||
}
|
||||
}
|
363
#backups/scripts/color_selector/color_selector.gml.backup1
Normal file
363
#backups/scripts/color_selector/color_selector.gml.backup1
Normal file
|
@ -0,0 +1,363 @@
|
|||
// 2024-05-01 08:40:09
|
||||
function colorSelector(onApply = noone) constructor {
|
||||
self.onApply = onApply;
|
||||
|
||||
current_color = c_white;
|
||||
|
||||
hue = 1;
|
||||
sat = 0;
|
||||
val = 0;
|
||||
|
||||
area_dragging = false;
|
||||
side_dragging = false;
|
||||
|
||||
dropper_active = false;
|
||||
dropper_close = true;
|
||||
dropper_color = c_white;
|
||||
interactable = true;
|
||||
|
||||
disp_mode = 0;
|
||||
|
||||
palette = [];
|
||||
discretize_pal = true;
|
||||
|
||||
color_surface = surface_create_valid(ui(256), ui(256));
|
||||
|
||||
tb_hue = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
hue = clamp(_val, 0, 255);
|
||||
setHSV();
|
||||
});
|
||||
|
||||
tb_sat = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
sat = clamp(_val, 0, 255);
|
||||
setHSV();
|
||||
});
|
||||
|
||||
tb_val= slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
val = clamp(_val, 0, 255);
|
||||
setHSV();
|
||||
});
|
||||
|
||||
tb_red = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
var r = clamp(_val, 0, 255);
|
||||
var g = color_get_green(current_color);
|
||||
var b = color_get_blue(current_color);
|
||||
var a = color_get_alpha(current_color);
|
||||
|
||||
current_color = make_color_rgba(r, g, b, a);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
tb_green = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
var r = color_get_red(current_color);
|
||||
var g = clamp(_val, 0, 255);
|
||||
var b = color_get_blue(current_color);
|
||||
var a = color_get_alpha(current_color);
|
||||
|
||||
current_color = make_color_rgba(r, g, b, a);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
tb_blue = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
var r = color_get_red(current_color);
|
||||
var g = color_get_green(current_color);
|
||||
var b = clamp(_val, 0, 255);
|
||||
var a = color_get_alpha(current_color);
|
||||
|
||||
current_color = make_color_rgba(r, g, b, a);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
tb_alpha = slider(0, 255, 1, function(_val) {
|
||||
if(!interactable) return;
|
||||
var alp = clamp(_val, 0, 255);
|
||||
|
||||
current_color = _cola(current_color, alp);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
tb_hue.hdw = ui(16);
|
||||
tb_sat.hdw = ui(16);
|
||||
tb_val.hdw = ui(16);
|
||||
tb_red.hdw = ui(16);
|
||||
tb_green.hdw = ui(16);
|
||||
tb_blue.hdw = ui(16);
|
||||
tb_alpha.hdw = ui(16);
|
||||
|
||||
tb_hue.font = f_p1;
|
||||
tb_sat.font = f_p1;
|
||||
tb_val.font = f_p1;
|
||||
tb_red.font = f_p1;
|
||||
tb_green.font = f_p1;
|
||||
tb_blue.font = f_p1;
|
||||
tb_alpha.font = f_p1;
|
||||
|
||||
tb_hex = new textBox(TEXTBOX_INPUT.text, function(str) {
|
||||
if(!interactable) return;
|
||||
if(str == "") return;
|
||||
if(string_char_at(str, 1) == "#") str = string_replace(str, "#", "");
|
||||
|
||||
var _r = string_hexadecimal(string_copy(str, 1, 2));
|
||||
var _g = string_hexadecimal(string_copy(str, 3, 2));
|
||||
var _b = string_hexadecimal(string_copy(str, 5, 2));
|
||||
var _a = string_length(str) > 6? string_hexadecimal(string_copy(str, 7, 2)) : 255;
|
||||
|
||||
current_color = make_color_rgba(_r, _g, _b, _a);
|
||||
resetHSV();
|
||||
});
|
||||
|
||||
scr_disp = new buttonGroup(["Hue", "Value"], function(mode) { disp_mode = mode; } );
|
||||
|
||||
function resetHSV(_apply = true) {
|
||||
hue = round(color_get_hue(current_color));
|
||||
sat = round(color_get_saturation(current_color));
|
||||
val = round(color_get_value(current_color));
|
||||
|
||||
if(_apply && onApply != noone) onApply(int64(current_color));
|
||||
}
|
||||
|
||||
function setHSV(_apply = true) {
|
||||
if(!interactable) return;
|
||||
var alp = color_get_alpha(current_color);
|
||||
current_color = make_color_hsva(hue, sat, val, alp);
|
||||
|
||||
if(_apply && onApply != noone) onApply(int64(current_color));
|
||||
}
|
||||
|
||||
function setColor(color, _apply = true) {
|
||||
current_color = color;
|
||||
|
||||
resetHSV(_apply);
|
||||
}
|
||||
|
||||
function colorPicker() {
|
||||
if(!dropper_active) return;
|
||||
dropper_color = int64(cola(draw_getpixel(mouse_mx, mouse_my)));
|
||||
MOUSE_BLOCK = true;
|
||||
}
|
||||
|
||||
static drawDropper = function(instance) {
|
||||
if(mouse_check_button_pressed(mb_left)) {
|
||||
setColor(dropper_color);
|
||||
if(dropper_close)
|
||||
instance_destroy(instance);
|
||||
dropper_active = false;
|
||||
MOUSE_BLOCK = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if(dropper_active && mouse_check_button_pressed(mb_right))
|
||||
instance_destroy(instance);
|
||||
if(keyboard_check_released(vk_alt))
|
||||
instance_destroy(instance);
|
||||
|
||||
var dx = mouse_mx + ui(36);
|
||||
var dy = mouse_my + ui(36);
|
||||
draw_sprite_stretched(THEME.color_picker_sample, 0, dx - ui(20), dy - ui(20), ui(40), ui(40));
|
||||
draw_sprite_stretched_ext(THEME.color_picker_sample, 0, dx - ui(18), dy - ui(18), ui(36), ui(36), dropper_color, 1);
|
||||
}
|
||||
|
||||
static draw = function(_x, _y, focus, hover) {
|
||||
var col_x = _x + ui(8);
|
||||
var col_y = _y + ui(8);
|
||||
|
||||
draw_sprite_stretched(THEME.ui_panel_bg, 1, col_x - ui(8), col_y - ui(8), ui(256 + 16), ui(256 + 16));
|
||||
|
||||
color_surface = surface_verify(color_surface, ui(256), ui(256));
|
||||
surface_set_target(color_surface);
|
||||
if(disp_mode == 0) {
|
||||
shader_set(sh_color_picker_hue);
|
||||
shader_set_f("hue", hue / 256);
|
||||
shader_set_i("usePalette", NODE_COLOR_SHOW_PALETTE && discretize_pal);
|
||||
shader_set_palette(palette);
|
||||
} else if(disp_mode == 1) {
|
||||
shader_set(sh_color_picker_value);
|
||||
shader_set_f("value", val / 256);
|
||||
shader_set_i("usePalette", NODE_COLOR_SHOW_PALETTE && discretize_pal);
|
||||
shader_set_palette(palette);
|
||||
}
|
||||
|
||||
draw_sprite_uniform(s_fx_pixel, 0, 0, 0, ui(256));
|
||||
shader_reset();
|
||||
surface_reset_target();
|
||||
|
||||
draw_surface_ext_safe(color_surface, col_x, col_y,,,,, interactable * 0.5 + 0.5);
|
||||
|
||||
#region side control
|
||||
var hue_x = col_x + ui(280);
|
||||
var hue_y = col_y;
|
||||
|
||||
draw_sprite_stretched(THEME.ui_panel_bg, 1, hue_x - ui(8), hue_y - ui(8), ui(32), ui(256 + 16));
|
||||
|
||||
if(disp_mode == 0) {
|
||||
shader_set(sh_color_picker_side_hue);
|
||||
shader_set_i("usePalette", NODE_COLOR_SHOW_PALETTE && discretize_pal);
|
||||
shader_set_palette(palette);
|
||||
shader_set_f("sat", sat / 256);
|
||||
shader_set_f("value", val / 256);
|
||||
|
||||
draw_sprite_stretched_ext(s_fx_pixel, 0, hue_x, hue_y, ui(16), ui(256), c_white, interactable * 0.5 + 0.5);
|
||||
shader_reset();
|
||||
} else if(disp_mode == 1) {
|
||||
shader_set(sh_color_picker_side_value);
|
||||
shader_set_i("usePalette", NODE_COLOR_SHOW_PALETTE && discretize_pal);
|
||||
shader_set_palette(palette);
|
||||
shader_set_f("hue", hue / 256);
|
||||
shader_set_f("sat", sat / 256);
|
||||
|
||||
draw_sprite_stretched_ext(s_fx_pixel, 0, hue_x, hue_y, ui(16), ui(256), c_white, interactable * 0.5 + 0.5)
|
||||
shader_reset();
|
||||
}
|
||||
|
||||
var _sy = disp_mode == 0? hue_y + ui(hue) : hue_y + ui(256 - val);
|
||||
|
||||
if(NODE_COLOR_SHOW_PALETTE) {
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, hue_x - ui(3), _sy - ui(6), ui(24), ui(10), current_color, 1);
|
||||
|
||||
if(disp_mode == 0)
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, col_x + ui(sat - 6), col_y + ui(256 - val - 6), ui(12), ui(12), current_color, 1);
|
||||
else if(disp_mode == 1)
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, col_x + ui(hue - 6), col_y + ui(256 - sat - 6), ui(12), ui(12), current_color, 1);
|
||||
} else {
|
||||
if(disp_mode == 0) {
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, hue_x - ui(3), _sy - ui(6), ui(24), ui(10), make_color_hsv(hue, 255, 255), 1);
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, col_x + ui(sat - 6), col_y + ui(256 - val - 6), ui(12), ui(12), current_color, 1);
|
||||
} else if(disp_mode == 1) {
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, hue_x - ui(3), _sy - ui(6), ui(24), ui(10), make_color_hsv(hue, 255, val), 1);
|
||||
draw_sprite_stretched_ext(s_ui_base_white, 0, col_x + ui(hue - 6), col_y + ui(256 - sat - 6), ui(12), ui(12), current_color, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if(mouse_press(mb_left, interactable && focus)) {
|
||||
if(point_in_rectangle(mouse_mx, mouse_my, hue_x, hue_y, hue_x + ui(16), hue_y + ui(256)))
|
||||
side_dragging = true;
|
||||
else if(point_in_rectangle(mouse_mx, mouse_my, col_x, col_y, col_x + ui(256), col_y + ui(256)))
|
||||
area_dragging = true;
|
||||
}
|
||||
|
||||
if(side_dragging) {
|
||||
if(disp_mode == 0) {
|
||||
hue = clamp((mouse_my - hue_y) / UI_SCALE, 0, 256);
|
||||
} else if(disp_mode == 1) {
|
||||
val = 256 - clamp((mouse_my - hue_y) / UI_SCALE, 0, 256);
|
||||
}
|
||||
|
||||
setHSV();
|
||||
|
||||
if(NODE_COLOR_SHOW_PALETTE) {
|
||||
current_color = disp_mode == 0? surface_getpixel(color_surface, sat, 256 - val) :
|
||||
surface_getpixel(color_surface, hue, 256 - sat);
|
||||
if(onApply != noone) onApply(current_color);
|
||||
}
|
||||
|
||||
if(mouse_release(mb_left))
|
||||
side_dragging = false;
|
||||
}
|
||||
|
||||
if(area_dragging) {
|
||||
if(disp_mode == 0) {
|
||||
sat = clamp((mouse_mx - col_x) / UI_SCALE, 0, 256);
|
||||
val = 256 - clamp((mouse_my - col_y) / UI_SCALE, 0, 256);
|
||||
} else if(disp_mode == 1) {
|
||||
hue = clamp((mouse_mx - col_x) / UI_SCALE, 0, 256);
|
||||
sat = 256 - clamp((mouse_my - col_y) / UI_SCALE, 0, 256);
|
||||
}
|
||||
|
||||
setHSV();
|
||||
|
||||
if(NODE_COLOR_SHOW_PALETTE) {
|
||||
current_color = disp_mode == 0? surface_getpixel(color_surface, sat, 256 - val) :
|
||||
surface_getpixel(color_surface, hue, 256 - sat);
|
||||
if(onApply != noone) onApply(current_color);
|
||||
}
|
||||
|
||||
if(mouse_release(mb_left))
|
||||
area_dragging = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region type
|
||||
var tx = hue_x + ui(36);
|
||||
var ty = _y + ui(4);
|
||||
|
||||
scr_disp.setFocusHover(focus, hover);
|
||||
scr_disp.draw(tx, ty, ui(190), ui(32), disp_mode, mouse_ui);
|
||||
#endregion
|
||||
|
||||
#region register
|
||||
scr_disp.register();
|
||||
|
||||
tb_hue.register();
|
||||
tb_sat.register();
|
||||
tb_val.register();
|
||||
|
||||
tb_red.register();
|
||||
tb_green.register();
|
||||
tb_blue.register();
|
||||
|
||||
tb_hex.register();
|
||||
#endregion
|
||||
|
||||
#region data
|
||||
var data_x = hue_x + ui(40);
|
||||
var data_y = col_y + ui(40);
|
||||
var wdw = ui(160);
|
||||
var wdh = ui( 27);
|
||||
var txh = wdh + ui(4);
|
||||
|
||||
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text);
|
||||
draw_text(data_x, data_y + txh * 0 + ui(15), "H");
|
||||
draw_text(data_x, data_y + txh * 1 + ui(15), "S")
|
||||
draw_text(data_x, data_y + txh * 2 + ui(15), "V");
|
||||
|
||||
tb_hue.setFocusHover(focus, hover);
|
||||
tb_sat.setFocusHover(focus, hover);
|
||||
tb_val.setFocusHover(focus, hover);
|
||||
|
||||
tb_hue.draw(data_x + ui(28), data_y + txh * 0, wdw, wdh, round(color_get_hue(current_color)), mouse_ui);
|
||||
tb_sat.draw(data_x + ui(28), data_y + txh * 1, wdw, wdh, round(color_get_saturation(current_color)), mouse_ui);
|
||||
tb_val.draw(data_x + ui(28), data_y + txh * 2, wdw, wdh, round(color_get_value(current_color)), mouse_ui);
|
||||
|
||||
data_y = data_y + txh * 3 + ui(8);
|
||||
|
||||
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text);
|
||||
draw_text(data_x, data_y + txh * 0 + ui(15), "R");
|
||||
draw_text(data_x, data_y + txh * 1 + ui(15), "G");
|
||||
draw_text(data_x, data_y + txh * 2 + ui(15), "B");
|
||||
draw_text(data_x, data_y + txh * 3 + ui(15), "A");
|
||||
|
||||
tb_red.setFocusHover (focus, hover);
|
||||
tb_green.setFocusHover(focus, hover);
|
||||
tb_blue.setFocusHover (focus, hover);
|
||||
tb_alpha.setFocusHover(focus, hover);
|
||||
|
||||
tb_red.draw (data_x + ui(28), data_y + txh * 0, wdw, wdh, round(color_get_red(current_color)), mouse_ui);
|
||||
tb_green.draw(data_x + ui(28), data_y + txh * 1, wdw, wdh, round(color_get_green(current_color)), mouse_ui);
|
||||
tb_blue.draw (data_x + ui(28), data_y + txh * 2, wdw, wdh, round(color_get_blue(current_color)), mouse_ui);
|
||||
tb_alpha.draw(data_x + ui(28), data_y + txh * 3, wdw, wdh, round(color_get_alpha(current_color)), mouse_ui);
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
tb_hex.active = focus; tb_hex.hover = hover;
|
||||
tb_hex.draw(hue_x - ui(128), col_y + ui(256 + 24), ui(108), TEXTBOX_HEIGHT, color_get_hex(current_color), mouse_ui);
|
||||
#endregion
|
||||
|
||||
var cx = col_x + ui(16);
|
||||
var cy = col_y + ui(296);
|
||||
var aa = _color_get_alpha(current_color);
|
||||
|
||||
draw_sprite_stretched_ext(THEME.color_picker_box, 0, cx - ui(20), cy - ui(20), ui(40), ui(40), COLORS._main_icon_dark, 1);
|
||||
draw_sprite_stretched_ext(THEME.color_picker_box, 1, cx - ui(18), cy - ui(18), ui(36), ui(36), current_color, aa);
|
||||
|
||||
cx += ui(48);
|
||||
if(buttonInstant(THEME.button_hide, cx - ui(18), cy - ui(18), ui(36), ui(36), mouse_ui, focus, hover, "", THEME.color_picker_dropper, 0, c_white) == 2)
|
||||
dropper_active = true;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
// 2024-04-29 18:33:19
|
||||
// 2024-05-01 08:11:39
|
||||
#region save
|
||||
globalvar LOADING, CLONING, CLONING_GROUP;
|
||||
globalvar CONNECTION_CONFLICT, LOADING_VERSION;
|
||||
|
@ -39,8 +39,8 @@
|
|||
LATEST_VERSION = 11600;
|
||||
VERSION = 11700;
|
||||
SAVE_VERSION = 11690;
|
||||
VERSION_STRING = "1.17.rc5";
|
||||
BUILD_NUMBER = 11705;
|
||||
VERSION_STRING = "1.17";
|
||||
BUILD_NUMBER = 11706;
|
||||
|
||||
globalvar HOTKEYS, HOTKEY_CONTEXT;
|
||||
HOTKEYS = ds_map_create();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// 2024-04-29 18:33:01
|
||||
// 2024-05-01 08:11:28
|
||||
#region save
|
||||
globalvar LOADING, CLONING, CLONING_GROUP;
|
||||
globalvar CONNECTION_CONFLICT, LOADING_VERSION;
|
||||
|
@ -39,8 +39,8 @@
|
|||
LATEST_VERSION = 11600;
|
||||
VERSION = 11700;
|
||||
SAVE_VERSION = 11690;
|
||||
VERSION_STRING = "1.17.rc5";
|
||||
BUILD_NUMBER = 11705;
|
||||
VERSION_STRING = "1.17";
|
||||
BUILD_NUMBER = 11706;
|
||||
|
||||
globalvar HOTKEYS, HOTKEY_CONTEXT;
|
||||
HOTKEYS = ds_map_create();
|
||||
|
|
87
#backups/scripts/node_color_hsv/node_color_hsv.gml.backup0
Normal file
87
#backups/scripts/node_color_hsv/node_color_hsv.gml.backup0
Normal file
|
@ -0,0 +1,87 @@
|
|||
// 2024-05-01 07:56:57
|
||||
function Node_Color_HSV(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||
name = "HSV Color";
|
||||
setDimension(96, 80);
|
||||
|
||||
inputs[| 0] = nodeValue("Hue", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider)
|
||||
.setVisible(true, true);
|
||||
|
||||
inputs[| 1] = nodeValue("Saturation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider)
|
||||
.setVisible(true, true);
|
||||
|
||||
inputs[| 2] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider)
|
||||
.setVisible(true, true);
|
||||
|
||||
inputs[| 3] = nodeValue("Normalized", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, 1);
|
||||
|
||||
inputs[| 4] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
outputs[| 0] = nodeValue("Color", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, c_white);
|
||||
|
||||
input_display_list = [ 3, 0, 1, 2, 4 ];
|
||||
|
||||
static processData = function(_outSurf, _data, _output_index, _array_index) { #region
|
||||
var nor = _data[3];
|
||||
|
||||
return make_color_hsva(
|
||||
nor? _data[0] * 255 : _data[0],
|
||||
nor? _data[1] * 255 : _data[1],
|
||||
nor? _data[2] * 255 : _data[2],
|
||||
nor? _data[4] * 255 : _data[4],
|
||||
);
|
||||
} #endregion
|
||||
|
||||
static onValueUpdate = function(index = 0) { #region
|
||||
if(index == 3) {
|
||||
var _nor = getInputData(3);
|
||||
|
||||
if(_nor) {
|
||||
inputs[| 0].setType(VALUE_TYPE.float);
|
||||
inputs[| 0].setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 1].setType(VALUE_TYPE.float);
|
||||
inputs[| 1].setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 2].setType(VALUE_TYPE.float);
|
||||
inputs[| 2].setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 4].setType(VALUE_TYPE.float);
|
||||
inputs[| 4].setDisplay(VALUE_DISPLAY.slider);
|
||||
} else {
|
||||
inputs[| 0].setType(VALUE_TYPE.integer);
|
||||
inputs[| 0].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
|
||||
inputs[| 1].setType(VALUE_TYPE.integer);
|
||||
inputs[| 1].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
|
||||
inputs[| 2].setType(VALUE_TYPE.integer);
|
||||
inputs[| 2].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
|
||||
inputs[| 4].setType(VALUE_TYPE.integer);
|
||||
inputs[| 4].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
}
|
||||
}
|
||||
} #endregion
|
||||
|
||||
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
|
||||
var bbox = drawGetBbox(xx, yy, _s);
|
||||
if(bbox.h < 1) return;
|
||||
|
||||
var col = outputs[| 0].getValue();
|
||||
|
||||
if(is_array(col)) {
|
||||
drawPalette(col, bbox.x0, bbox.y0, bbox.w, bbox.h);
|
||||
return;
|
||||
}
|
||||
|
||||
drawColor(col, bbox.x0, bbox.y0, bbox.w, bbox.h);
|
||||
} #endregion
|
||||
|
||||
static doApplyDeserialize = function() { #region
|
||||
onValueUpdate(3);
|
||||
} #endregion
|
||||
}
|
87
#backups/scripts/node_color_hsv/node_color_hsv.gml.backup1
Normal file
87
#backups/scripts/node_color_hsv/node_color_hsv.gml.backup1
Normal file
|
@ -0,0 +1,87 @@
|
|||
// 2024-05-01 07:56:39
|
||||
function Node_Color_HSV(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||
name = "HSV Color";
|
||||
setDimension(96, 80);
|
||||
|
||||
inputs[| 0] = nodeValue("Hue", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider)
|
||||
.setVisible(true, true);
|
||||
|
||||
inputs[| 1] = nodeValue("Saturation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider)
|
||||
.setVisible(true, true);
|
||||
|
||||
inputs[| 2] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider)
|
||||
.setVisible(true, true);
|
||||
|
||||
inputs[| 3] = nodeValue("Normalized", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, 1);
|
||||
|
||||
inputs[| 4] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
outputs[| 0] = nodeValue("Color", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, c_white);
|
||||
|
||||
input_display_list = [ 3, 0, 1, 2, 4 ];
|
||||
|
||||
static processData = function(_outSurf, _data, _output_index, _array_index) { #region
|
||||
var nor = _data[3];
|
||||
|
||||
return make_color_hsva(
|
||||
nor? _data[0] * 255 : _data[0],
|
||||
nor? _data[1] * 255 : _data[1],
|
||||
nor? _data[2] * 255 : _data[2],
|
||||
nor? _data[4] * 255 : _data[4],
|
||||
);
|
||||
} #endregion
|
||||
|
||||
static onValueUpdate = function(index = 0) { #region
|
||||
if(index == 3) {
|
||||
var _nor = getInputData(3);
|
||||
|
||||
if(_nor) {
|
||||
inputs[| 0].setType(VALUE_TYPE.float);
|
||||
inputs[| 0].setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 1].setType(VALUE_TYPE.float);
|
||||
inputs[| 1].setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 2].setType(VALUE_TYPE.float);
|
||||
inputs[| 2].setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 4].setType(VALUE_TYPE.float);
|
||||
inputs[| 4].setDisplay(VALUE_DISPLAY.slider);
|
||||
} else {
|
||||
inputs[| 0].setType(VALUE_TYPE.integer);
|
||||
inputs[| 0].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
|
||||
inputs[| 1].setType(VALUE_TYPE.integer);
|
||||
inputs[| 1].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
|
||||
inputs[| 2].setType(VALUE_TYPE.integer);
|
||||
inputs[| 2].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
|
||||
inputs[| 4].setType(VALUE_TYPE.integer);
|
||||
inputs[| 4].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
}
|
||||
}
|
||||
} #endregion
|
||||
|
||||
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
|
||||
var bbox = drawGetBbox(xx, yy, _s);
|
||||
if(bbox.h < 1) return;
|
||||
|
||||
var col = outputs[| 0].getValue();
|
||||
|
||||
if(is_array(col)) {
|
||||
drawPalette(col, bbox.x0, bbox.y0, bbox.w, bbox.h);
|
||||
return;
|
||||
}
|
||||
|
||||
drawColor(col, bbox.x0, bbox.y0, bbox.w, bbox.h);
|
||||
} #endregion
|
||||
|
||||
static doApplyDeserialize = function() { #region
|
||||
onValueUpdate(3);
|
||||
} #endregion
|
||||
}
|
247
#backups/scripts/node_math/node_math.gml.backup0
Normal file
247
#backups/scripts/node_math/node_math.gml.backup0
Normal file
|
@ -0,0 +1,247 @@
|
|||
// 2024-05-01 07:50:01
|
||||
enum MATH_OPERATOR {
|
||||
add,
|
||||
subtract,
|
||||
multiply,
|
||||
divide,
|
||||
power,
|
||||
root,
|
||||
|
||||
sin,
|
||||
cos,
|
||||
tan,
|
||||
|
||||
modulo,
|
||||
|
||||
floor,
|
||||
ceiling,
|
||||
round,
|
||||
|
||||
lerp,
|
||||
abs
|
||||
}
|
||||
|
||||
#region create
|
||||
global.node_math_keys = [ "add", "subtract", "multiply", "divide", "power", "root", "modulo", "round", "ceiling", "floor", "sin", "cos", "tan", "lerp", "abs" ];
|
||||
|
||||
function Node_create_Math(_x, _y, _group = noone, _param = {}) {
|
||||
var query = struct_try_get(_param, "query", "");
|
||||
var node = new Node_Math(_x, _y, _group);
|
||||
|
||||
switch(query) { #region
|
||||
case "add" : node.inputs[| 0].setValue(MATH_OPERATOR.add); break;
|
||||
case "subtract" : node.inputs[| 0].setValue(MATH_OPERATOR.subtract); break;
|
||||
case "multiply" : node.inputs[| 0].setValue(MATH_OPERATOR.multiply); break;
|
||||
case "divide" : node.inputs[| 0].setValue(MATH_OPERATOR.divide); break;
|
||||
case "power" : node.inputs[| 0].setValue(MATH_OPERATOR.power); break;
|
||||
case "root" : node.inputs[| 0].setValue(MATH_OPERATOR.root); break;
|
||||
|
||||
case "sin" : node.inputs[| 0].setValue(MATH_OPERATOR.sin); break;
|
||||
case "cos" : node.inputs[| 0].setValue(MATH_OPERATOR.cos); break;
|
||||
case "tan" : node.inputs[| 0].setValue(MATH_OPERATOR.tan); break;
|
||||
|
||||
case "modulo" : node.inputs[| 0].setValue(MATH_OPERATOR.modulo); break;
|
||||
|
||||
case "floor" : node.inputs[| 0].setValue(MATH_OPERATOR.floor); break;
|
||||
case "ceiling" : node.inputs[| 0].setValue(MATH_OPERATOR.ceiling); break;
|
||||
case "round" : node.inputs[| 0].setValue(MATH_OPERATOR.round); break;
|
||||
|
||||
case "lerp" : node.inputs[| 0].setValue(MATH_OPERATOR.lerp); break;
|
||||
case "abs" : node.inputs[| 0].setValue(MATH_OPERATOR.abs); break;
|
||||
} #endregion
|
||||
|
||||
return node;
|
||||
}
|
||||
#endregion
|
||||
|
||||
function Node_Math(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||
name = "Math";
|
||||
color = COLORS.node_blend_number;
|
||||
setDimension(96, 80);
|
||||
|
||||
inputs[| 0] = nodeValue("Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||
.setDisplay(VALUE_DISPLAY.enum_scroll, [
|
||||
/* 0 - 9*/ "Add", "Subtract", "Multiply", "Divide", "Power", "Root", "Sin", "Cos", "Tan", "Modulo",
|
||||
/*10 - 20*/ "Floor", "Ceil", "Round", "Lerp", "Abs" ])
|
||||
.rejectArray();
|
||||
|
||||
inputs[| 1] = nodeValue("a", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
|
||||
.setVisible(true, true);
|
||||
|
||||
inputs[| 2] = nodeValue("b", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
|
||||
.setVisible(true, true);
|
||||
|
||||
inputs[| 3] = nodeValue("Degree angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true);
|
||||
|
||||
inputs[| 4] = nodeValue("To integer", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
|
||||
|
||||
inputs[| 5] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0);
|
||||
|
||||
input_display_list = [
|
||||
0, 1, 2, 5, 3, 4,
|
||||
]
|
||||
|
||||
outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0);
|
||||
|
||||
use_mod = 0;
|
||||
use_deg = false;
|
||||
|
||||
static _eval = function(a, b, c = 0) { #region
|
||||
switch(use_mod) {
|
||||
case MATH_OPERATOR.add : return a + b;
|
||||
case MATH_OPERATOR.subtract : return a - b;
|
||||
case MATH_OPERATOR.multiply : return a * b;
|
||||
case MATH_OPERATOR.divide : return b == 0? 0 : a / b;
|
||||
|
||||
case MATH_OPERATOR.power : return power(a, b);
|
||||
case MATH_OPERATOR.root : return b == 0? 0 : power(a, 1 / b);
|
||||
|
||||
case MATH_OPERATOR.sin : return sin(use_deg? degtorad(a) : a) * b;
|
||||
case MATH_OPERATOR.cos : return cos(use_deg? degtorad(a) : a) * b;
|
||||
case MATH_OPERATOR.tan : return tan(use_deg? degtorad(a) : a) * b;
|
||||
case MATH_OPERATOR.modulo : return safe_mod(a, b);
|
||||
|
||||
case MATH_OPERATOR.floor : return floor(a);
|
||||
case MATH_OPERATOR.ceiling : return ceil(a);
|
||||
case MATH_OPERATOR.round : return round(a);
|
||||
|
||||
case MATH_OPERATOR.lerp : return lerp(a, b, c);
|
||||
case MATH_OPERATOR.abs : return abs(a);
|
||||
}
|
||||
return 0;
|
||||
} #endregion
|
||||
|
||||
static step = function() { #region
|
||||
var mode = getInputData(0);
|
||||
|
||||
switch(mode) {
|
||||
case MATH_OPERATOR.sin :
|
||||
case MATH_OPERATOR.cos :
|
||||
case MATH_OPERATOR.tan :
|
||||
inputs[| 3].setVisible(true);
|
||||
break;
|
||||
default:
|
||||
inputs[| 3].setVisible(false);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(mode) {
|
||||
case MATH_OPERATOR.round :
|
||||
case MATH_OPERATOR.floor :
|
||||
case MATH_OPERATOR.ceiling :
|
||||
inputs[| 4].setVisible(true);
|
||||
|
||||
var int = getInputData(4);
|
||||
if(int) outputs[| 0].setType(VALUE_TYPE.integer);
|
||||
else outputs[| 0].setType(VALUE_TYPE.float);
|
||||
break;
|
||||
default:
|
||||
inputs[| 4].setVisible(false);
|
||||
|
||||
outputs[| 0].setType(VALUE_TYPE.float);
|
||||
break;
|
||||
}
|
||||
|
||||
inputs[| 2].name = "b";
|
||||
inputs[| 5].setVisible(false);
|
||||
|
||||
switch(mode) {
|
||||
case MATH_OPERATOR.add :
|
||||
case MATH_OPERATOR.subtract :
|
||||
case MATH_OPERATOR.multiply :
|
||||
case MATH_OPERATOR.divide :
|
||||
case MATH_OPERATOR.power :
|
||||
case MATH_OPERATOR.root :
|
||||
case MATH_OPERATOR.modulo :
|
||||
inputs[| 2].setVisible(true);
|
||||
break;
|
||||
case MATH_OPERATOR.sin :
|
||||
case MATH_OPERATOR.cos :
|
||||
case MATH_OPERATOR.tan :
|
||||
inputs[| 2].setVisible(true);
|
||||
inputs[| 2].name = "Amplitude";
|
||||
break;
|
||||
case MATH_OPERATOR.floor :
|
||||
case MATH_OPERATOR.ceiling :
|
||||
case MATH_OPERATOR.round :
|
||||
case MATH_OPERATOR.abs :
|
||||
inputs[| 2].setVisible(false);
|
||||
break;
|
||||
case MATH_OPERATOR.lerp :
|
||||
inputs[| 2].setVisible(true);
|
||||
inputs[| 5].setVisible(true);
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
} #endregion
|
||||
|
||||
function evalArray(a, b, c = 0) { #region
|
||||
var as = is_array(a);
|
||||
var bs = is_array(b);
|
||||
var cs = is_array(c);
|
||||
|
||||
if(!as && !bs && !cs)
|
||||
return _eval(a, b, c);
|
||||
|
||||
if(!as) a = [ a ];
|
||||
if(!bs) b = [ b ];
|
||||
if(!cs) c = [ c ];
|
||||
|
||||
var al = array_length(a);
|
||||
var bl = array_length(b);
|
||||
var cl = array_length(c);
|
||||
|
||||
var amo = max(al, bl, cl);
|
||||
var val = array_create(amo);
|
||||
|
||||
for( var i = 0; i < amo; i++ )
|
||||
val[i] = evalArray(
|
||||
array_safe_get(a, i,, ARRAY_OVERFLOW.loop),
|
||||
array_safe_get(b, i,, ARRAY_OVERFLOW.loop),
|
||||
array_safe_get(c, i,, ARRAY_OVERFLOW.loop),
|
||||
);
|
||||
|
||||
return val;
|
||||
} #endregion
|
||||
|
||||
static update = function(frame = CURRENT_FRAME) { #region
|
||||
use_mod = getInputData(0);
|
||||
var a = getInputData(1);
|
||||
var b = getInputData(2);
|
||||
use_deg = getInputData(3);
|
||||
var c = getInputData(5);
|
||||
|
||||
var val = evalArray(a, b, c);
|
||||
outputs[| 0].setValue(val);
|
||||
} #endregion
|
||||
|
||||
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
|
||||
draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text);
|
||||
var str = "";
|
||||
switch(getInputData(0)) {
|
||||
case MATH_OPERATOR.add : str = "+"; break;
|
||||
case MATH_OPERATOR.subtract : str = "-"; break;
|
||||
case MATH_OPERATOR.multiply : str = "*"; break;
|
||||
case MATH_OPERATOR.divide : str = "/"; break;
|
||||
case MATH_OPERATOR.power : str = "pow"; break;
|
||||
case MATH_OPERATOR.root : str = "root"; break;
|
||||
|
||||
case MATH_OPERATOR.sin : str = "sin"; break;
|
||||
case MATH_OPERATOR.cos : str = "cos"; break;
|
||||
case MATH_OPERATOR.tan : str = "tan"; break;
|
||||
case MATH_OPERATOR.modulo : str = "mod"; break;
|
||||
|
||||
case MATH_OPERATOR.floor : str = "floor"; break;
|
||||
case MATH_OPERATOR.ceiling : str = "ceil"; break;
|
||||
case MATH_OPERATOR.round : str = "round"; break;
|
||||
|
||||
case MATH_OPERATOR.lerp : str = "lerp"; break;
|
||||
case MATH_OPERATOR.abs : str = "abs"; break;
|
||||
default: return;
|
||||
}
|
||||
|
||||
var bbox = drawGetBbox(xx, yy, _s);
|
||||
var ss = string_scale(str, bbox.w, bbox.h);
|
||||
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
|
||||
} #endregion
|
||||
}
|
|
@ -138,17 +138,21 @@ function colorSelector(onApply = noone) constructor {
|
|||
function colorPicker() {
|
||||
if(!dropper_active) return;
|
||||
dropper_color = int64(cola(draw_getpixel(mouse_mx, mouse_my)));
|
||||
MOUSE_BLOCK = true;
|
||||
}
|
||||
|
||||
static drawDropper = function(instance) {
|
||||
if(mouse_press(mb_left)) {
|
||||
if(mouse_check_button_pressed(mb_left)) {
|
||||
setColor(dropper_color);
|
||||
if(dropper_close)
|
||||
instance_destroy(instance);
|
||||
dropper_active = false;
|
||||
MOUSE_BLOCK = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if(dropper_active == true && mouse_press(mb_right))
|
||||
if(dropper_active && mouse_check_button_pressed(mb_right))
|
||||
instance_destroy(instance);
|
||||
if(keyboard_check_released(vk_alt))
|
||||
instance_destroy(instance);
|
||||
|
|
|
@ -38,8 +38,8 @@
|
|||
LATEST_VERSION = 11600;
|
||||
VERSION = 11700;
|
||||
SAVE_VERSION = 11690;
|
||||
VERSION_STRING = "1.17.rc5";
|
||||
BUILD_NUMBER = 11705;
|
||||
VERSION_STRING = "1.17";
|
||||
BUILD_NUMBER = 11706;
|
||||
|
||||
globalvar HOTKEYS, HOTKEY_CONTEXT;
|
||||
HOTKEYS = ds_map_create();
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
function Node_Color_HSV(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||
name = "HSV Color";
|
||||
|
||||
name = "HSV Color";
|
||||
setDimension(96, 80);
|
||||
|
||||
inputs[| 0] = nodeValue("Hue", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
|
@ -28,7 +27,7 @@ function Node_Color_HSV(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
|||
var nor = _data[3];
|
||||
|
||||
return make_color_hsva(
|
||||
nor? _data[0] * 255 : _data[0] / 360 * 255,
|
||||
nor? _data[0] * 255 : _data[0],
|
||||
nor? _data[1] * 255 : _data[1],
|
||||
nor? _data[2] * 255 : _data[2],
|
||||
nor? _data[4] * 255 : _data[4],
|
||||
|
@ -53,7 +52,7 @@ function Node_Color_HSV(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
|||
inputs[| 4].setDisplay(VALUE_DISPLAY.slider);
|
||||
} else {
|
||||
inputs[| 0].setType(VALUE_TYPE.integer);
|
||||
inputs[| 0].setDisplay(VALUE_DISPLAY.slider, { range: [0, 360, 0.1] });
|
||||
inputs[| 0].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
|
||||
inputs[| 1].setType(VALUE_TYPE.integer);
|
||||
inputs[| 1].setDisplay(VALUE_DISPLAY.slider, { range: [0, 255, 0.1] });
|
||||
|
|
|
@ -28,25 +28,25 @@ enum MATH_OPERATOR {
|
|||
var node = new Node_Math(_x, _y, _group);
|
||||
|
||||
switch(query) { #region
|
||||
case "add" : node.inputs[| 0].setValue(MATH_OPERATOR.add); break;
|
||||
case "subtract" : node.inputs[| 0].setValue(MATH_OPERATOR.subtract); break;
|
||||
case "multiply" : node.inputs[| 0].setValue(MATH_OPERATOR.multiply); break;
|
||||
case "divide" : node.inputs[| 0].setValue(MATH_OPERATOR.divide); break;
|
||||
case "power" : node.inputs[| 0].setValue(MATH_OPERATOR.power); break;
|
||||
case "root" : node.inputs[| 0].setValue(MATH_OPERATOR.root); break;
|
||||
case "add" : node.inputs[| 0].setValue(MATH_OPERATOR.add); break;
|
||||
case "subtract" : node.inputs[| 0].setValue(MATH_OPERATOR.subtract); break;
|
||||
case "multiply" : node.inputs[| 0].setValue(MATH_OPERATOR.multiply); break;
|
||||
case "divide" : node.inputs[| 0].setValue(MATH_OPERATOR.divide); break;
|
||||
case "power" : node.inputs[| 0].setValue(MATH_OPERATOR.power); break;
|
||||
case "root" : node.inputs[| 0].setValue(MATH_OPERATOR.root); break;
|
||||
|
||||
case "sin" : node.inputs[| 0].setValue(MATH_OPERATOR.sin); break;
|
||||
case "cos" : node.inputs[| 0].setValue(MATH_OPERATOR.cos); break;
|
||||
case "tan" : node.inputs[| 0].setValue(MATH_OPERATOR.tan); break;
|
||||
case "sin" : node.inputs[| 0].setValue(MATH_OPERATOR.sin); break;
|
||||
case "cos" : node.inputs[| 0].setValue(MATH_OPERATOR.cos); break;
|
||||
case "tan" : node.inputs[| 0].setValue(MATH_OPERATOR.tan); break;
|
||||
|
||||
case "modulo" : node.inputs[| 0].setValue(MATH_OPERATOR.modulo); break;
|
||||
case "modulo" : node.inputs[| 0].setValue(MATH_OPERATOR.modulo); break;
|
||||
|
||||
case "floor" : node.inputs[| 0].setValue(MATH_OPERATOR.floor); break;
|
||||
case "ceiling" : node.inputs[| 0].setValue(MATH_OPERATOR.ceiling); break;
|
||||
case "round" : node.inputs[| 0].setValue(MATH_OPERATOR.round); break;
|
||||
case "floor" : node.inputs[| 0].setValue(MATH_OPERATOR.floor); break;
|
||||
case "ceiling" : node.inputs[| 0].setValue(MATH_OPERATOR.ceiling); break;
|
||||
case "round" : node.inputs[| 0].setValue(MATH_OPERATOR.round); break;
|
||||
|
||||
case "lerp" : node.inputs[| 0].setValue(MATH_OPERATOR.lerp); break;
|
||||
case "abs" : node.inputs[| 0].setValue(MATH_OPERATOR.abs); break;
|
||||
case "lerp" : node.inputs[| 0].setValue(MATH_OPERATOR.lerp); break;
|
||||
case "abs" : node.inputs[| 0].setValue(MATH_OPERATOR.abs); break;
|
||||
} #endregion
|
||||
|
||||
return node;
|
||||
|
|
Loading…
Reference in a new issue