From d8c5fd2d3d516a6ecccd693194c2d7d44b230d6b Mon Sep 17 00:00:00 2001 From: MakhamDev Date: Mon, 16 Oct 2023 17:54:20 +0700 Subject: [PATCH] Globalize Palette, Gradient data. png palette. --- PixelComposer.resource_order | 2 +- PixelComposer.yyp | 2 +- objects/o_dialog_color_selector/Create_0.gml | 43 +++------ objects/o_dialog_color_selector/Draw_64.gml | 2 +- objects/o_dialog_gradient/Create_0.gml | 81 +++++------------ objects/o_dialog_gradient/Draw_64.gml | 2 +- objects/o_dialog_palette/Create_0.gml | 46 +++------- objects/o_dialog_palette/Draw_64.gml | 3 +- objects/o_main/Other_2.gml | 2 + .../draw_circle_functions.gml | 18 ++-- .../gradients_function/gradients_function.gml | 76 ++++++++++------ scripts/load_palette/load_palette.gml | 32 ------- scripts/node_pin/node_pin.gml | 20 +++- .../palette_functions/palette_functions.gml | 91 +++++++++++++++++++ .../palette_functions.yy} | 2 +- scripts/panel_gradient/panel_gradient.gml | 25 +---- scripts/panel_palette/panel_palette.gml | 22 +---- 17 files changed, 229 insertions(+), 240 deletions(-) delete mode 100644 scripts/load_palette/load_palette.gml create mode 100644 scripts/palette_functions/palette_functions.gml rename scripts/{load_palette/load_palette.yy => palette_functions/palette_functions.yy} (86%) diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 6a30952de..22f35d623 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -625,7 +625,7 @@ {"name":"__node_custom","order":14,"path":"scripts/__node_custom/__node_custom.yy",}, {"name":"s_node_note","order":35,"path":"sprites/s_node_note/s_node_note.yy",}, {"name":"node_strand_gravity","order":4,"path":"scripts/node_strand_gravity/node_strand_gravity.yy",}, - {"name":"load_palette","order":3,"path":"scripts/load_palette/load_palette.yy",}, + {"name":"palette_functions","order":3,"path":"scripts/palette_functions/palette_functions.yy",}, {"name":"luaHighlight","order":1,"path":"scripts/luaHighlight/luaHighlight.yy",}, {"name":"d3d_rot3","order":3,"path":"scripts/d3d_rot3/d3d_rot3.yy",}, {"name":"sh_sample_points","order":26,"path":"shaders/sh_sample_points/sh_sample_points.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 48f333e95..1f2409d01 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1228,7 +1228,7 @@ {"id":{"name":"node_surface_data","path":"scripts/node_surface_data/node_surface_data.yy",},}, {"id":{"name":"s_node_note","path":"sprites/s_node_note/s_node_note.yy",},}, {"id":{"name":"node_strand_gravity","path":"scripts/node_strand_gravity/node_strand_gravity.yy",},}, - {"id":{"name":"load_palette","path":"scripts/load_palette/load_palette.yy",},}, + {"id":{"name":"palette_functions","path":"scripts/palette_functions/palette_functions.yy",},}, {"id":{"name":"sh_alpha_cutoff","path":"shaders/sh_alpha_cutoff/sh_alpha_cutoff.yy",},}, {"id":{"name":"luaHighlight","path":"scripts/luaHighlight/luaHighlight.yy",},}, {"id":{"name":"d3d_rot3","path":"scripts/d3d_rot3/d3d_rot3.yy",},}, diff --git a/objects/o_dialog_color_selector/Create_0.gml b/objects/o_dialog_color_selector/Create_0.gml index e0958a09f..eceb2b283 100644 --- a/objects/o_dialog_color_selector/Create_0.gml +++ b/objects/o_dialog_color_selector/Create_0.gml @@ -32,27 +32,7 @@ event_inherited(); #endregion #region presets - presets = ds_list_create(); - preset_name = ds_list_create(); - preset_selecting = 0; - - function presetCollect() { - ds_list_clear(presets); - ds_list_clear(preset_name); - - ds_list_add(presets, DEF_PALETTE); - ds_list_add(preset_name, "Project"); - - var path = DIRECTORY + "Palettes/" - var file = file_find_first(path + "*", 0); - while(file != "") { - ds_list_add(presets, loadPalette(path + file)); - ds_list_add(preset_name, filename_name(file)); - file = file_find_next(); - } - file_find_close(); - } - presetCollect(); + preset_selecting = -1; sp_preset_w = ui(240 - 32 - 16); sp_preset_size = ui(24); @@ -67,8 +47,13 @@ event_inherited(); var _hover = sHOVER && sp_presets.hover; draw_clear_alpha(COLORS.panel_bg_clear, 0); - for(var i = 0; i < ds_list_size(presets); i++) { - pre_amo = array_length(presets[| i]); + for(var i = -1; i < array_length(PALETTES); i++) { + var pal = i == -1? { + name: "project", + palette: PROJECT.attributes.palette, + path: "" + } : PALETTES[i]; + pre_amo = array_length(pal.palette); var col = floor(ww / _gs); var row = ceil(pre_amo / col); @@ -83,19 +68,19 @@ event_inherited(); if(isHover) draw_sprite_stretched_ext(THEME.node_active, 1, ui(4), yy, sp_preset_w - ui(16), _height, COLORS._main_accent, 1); - var x0 = ui(16) + (i == 0) * ui(8 + 6); + var x0 = ui(16) + (i == -1) * ui(8 + 6); var cc = i == preset_selecting? COLORS._main_accent : COLORS._main_text_sub; draw_set_text(f_p2, fa_left, fa_top, cc); - draw_text(x0, yy + ui(8), preset_name[| i]); - if(i == 0) { + draw_text(x0, yy + ui(8), pal.name); + if(i == -1) { draw_set_color(cc); draw_circle_prec(ui(16) + ui(4), yy + ui(16), ui(4), false); } if(preset_selecting == i) - drawPaletteGrid(presets[| i], ui(16), yy + ui(28), ww, _gs, selector.current_color); + drawPaletteGrid(pal.palette, ui(16), yy + ui(28), ww, _gs, selector.current_color); else - drawPalette(presets[| i], ui(16), yy + ui(28), ww, ui(20)); + drawPalette(pal.palette, ui(16), yy + ui(28), ww, ui(20)); if(!click_block && mouse_click(mb_left, interactable && sFOCUS)) { if(preset_selecting == i && _hover && point_in_rectangle(_m[0], _m[1], ui(16), yy + ui(28), ui(16) + ww, yy + ui(28) + _height)) { @@ -107,7 +92,7 @@ event_inherited(); var _index = m_gy * col + m_gx; if(_index < pre_amo && _index >= 0) { - selector.setColor(presets[| i][_index]); + selector.setColor(pal.palette[_index]); selector.setHSV(); } } else if(isHover) { diff --git a/objects/o_dialog_color_selector/Draw_64.gml b/objects/o_dialog_color_selector/Draw_64.gml index 7417ceba8..3857bbb2a 100644 --- a/objects/o_dialog_color_selector/Draw_64.gml +++ b/objects/o_dialog_color_selector/Draw_64.gml @@ -60,7 +60,7 @@ if !ready exit; var col_y = dialog_y + ui(52); if(preset_selecting > -1) - selector.palette = presets[| preset_selecting]; + selector.palette = PALETTES[preset_selecting].palette; selector.draw(col_x, col_y, sFOCUS, sHOVER); #endregion diff --git a/objects/o_dialog_gradient/Create_0.gml b/objects/o_dialog_gradient/Create_0.gml index 83e0d9a14..0d69e4076 100644 --- a/objects/o_dialog_gradient/Create_0.gml +++ b/objects/o_dialog_gradient/Create_0.gml @@ -83,24 +83,6 @@ event_inherited(); #endregion #region preset - presets = ds_list_create(); - preset_name = ds_list_create(); - - function presetCollect() { - ds_list_clear(presets); - ds_list_clear(preset_name); - - var path = DIRECTORY + "Gradients/" - var file = file_find_first(path + "*", 0); - while(file != "") { - ds_list_add(presets, loadGradient(path + file)); - ds_list_add(preset_name, filename_name(file)); - file = file_find_next(); - } - file_find_close(); - } - presetCollect(); - hovering_name = ""; sp_preset_w = ui(240 - 32 - 16); sp_presets = new scrollPane(sp_preset_w, dialog_h - ui(62), function(_y, _m) { @@ -111,29 +93,30 @@ event_inherited(); var _hover = sHOVER && sp_presets.hover; draw_clear_alpha(COLORS.panel_bg_clear, 0); - for(var i = 0; i < ds_list_size(presets); i++) { - var isHover = point_in_rectangle(_m[0], _m[1], ui(4), yy, ui(4) + sp_preset_w - ui(16), yy + hg); + for(var i = 0; i < array_length(GRADIENTS); i++) { + var _gradient = GRADIENTS[i]; + var isHover = point_in_rectangle(_m[0], _m[1], ui(4), yy, ui(4) + sp_preset_w - ui(16), yy + hg); draw_sprite_stretched(THEME.ui_panel_bg, 1, ui(4), yy, sp_preset_w - ui(16), hg); if(_hover && isHover) draw_sprite_stretched_ext(THEME.node_active, 1, ui(4), yy, sp_preset_w - ui(16), hg, COLORS._main_accent, 1); draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text_sub); - draw_text(ui(16), yy + ui(8), filename_name_only(preset_name[| i])); - presets[| i].draw(ui(16), yy + ui(28), ww, ui(16)); + draw_text(ui(16), yy + ui(8), _gradient.name); + _gradient.gradient.draw(ui(16), yy + ui(28), ww, ui(16)); if(_hover && isHover) { if(mouse_press(mb_left, interactable && sFOCUS)) - gradient.keys = presets[| i].keys; + gradient.keys = _gradient.gradient.keys; if(mouse_press(mb_right, interactable && sFOCUS)) { - hovering_name = preset_name[| i]; + hovering_name = _gradient.path; menuCall("gradient_window_preset_menu",,, [ menuItem(__txtx("gradient_editor_delete", "Delete gradient"), function() { - file_delete( DIRECTORY + "Gradients/" + hovering_name); - presetCollect(); + file_delete(hovering_name); + __initGradient(); }) - ],, { name: hovering_name }) + ]); } } @@ -146,27 +129,7 @@ event_inherited(); #endregion #region palette - palettes = ds_list_create(); - palette_name = ds_list_create(); - palette_selecting = 0; - - function paletteCollect() { - ds_list_clear(palettes); - ds_list_clear(palette_name); - - ds_list_add(palettes, DEF_PALETTE); - ds_list_add(palette_name, "Project"); - - var path = DIRECTORY + "Palettes/" - var file = file_find_first(path + "*", 0); - while(file != "") { - ds_list_add(palettes, loadPalette(path + file)); - ds_list_add(palette_name, filename_name(file)); - file = file_find_next(); - } - file_find_close(); - } - paletteCollect(); + palette_selecting = -1; sp_palette_w = ui(240 - 32 - 16); sp_palette_size = ui(24); @@ -181,8 +144,14 @@ event_inherited(); var _hover = sHOVER && sp_palettes.hover; draw_clear_alpha(COLORS.panel_bg_clear, 0); - for(var i = 0; i < ds_list_size(palettes); i++) { - pre_amo = array_length(palettes[| i]); + for(var i = -1; i < array_length(PALETTES); i++) { + var pal = i == -1? { + name: "project", + palette: PROJECT.attributes.palette, + path: "" + } : PALETTES[i]; + + pre_amo = array_length(pal.palette); var col = floor(ww / _gs); var row = ceil(pre_amo / col); @@ -197,19 +166,19 @@ event_inherited(); if(isHover) draw_sprite_stretched_ext(THEME.node_active, 1, ui(4), yy, sp_palette_w - ui(16), _height, COLORS._main_accent, 1); - var x0 = ui(16) + (i == 0) * ui(8 + 6); + var x0 = ui(16) + (i == -1) * ui(8 + 6); var cc = i == palette_selecting? COLORS._main_accent : COLORS._main_text_sub; draw_set_text(f_p2, fa_left, fa_top, cc); - draw_text(x0, yy + ui(8), filename_name_only(palette_name[| i])); - if(i == 0) { + draw_text(x0, yy + ui(8), pal.name); + if(i == -1) { draw_set_color(cc); draw_circle_prec(ui(16) + ui(4), yy + ui(16), ui(4), false); } if(palette_selecting == i) - drawPaletteGrid(palettes[| i], ui(16), yy + ui(28), ww, _gs); + drawPaletteGrid(pal.palette, ui(16), yy + ui(28), ww, _gs); else - drawPalette(palettes[| i], ui(16), yy + ui(28), ww, ui(20)); + drawPalette(pal.palette, ui(16), yy + ui(28), ww, ui(20)); if(!click_block && mouse_click(mb_left, interactable && sFOCUS)) { if(palette_selecting == i && _hover && point_in_rectangle(_m[0], _m[1], ui(16), yy + ui(28), ui(16) + ww, yy + ui(28) + _height)) { @@ -221,7 +190,7 @@ event_inherited(); var _index = m_gy * col + m_gx; if(_index < pre_amo && _index >= 0) { - selector.setColor(palettes[| i][_index]); + selector.setColor(pal.palette[_index]); selector.setHSV(); } } else if(isHover) { diff --git a/objects/o_dialog_gradient/Draw_64.gml b/objects/o_dialog_gradient/Draw_64.gml index 109158238..60aeba8f5 100644 --- a/objects/o_dialog_gradient/Draw_64.gml +++ b/objects/o_dialog_gradient/Draw_64.gml @@ -214,7 +214,7 @@ if !ready exit; var col_y = dialog_y + ui(136); if(palette_selecting > -1) - selector.palette = palettes[| palette_selecting]; + selector.palette = PALETTES[palette_selecting].palette; selector.draw(col_x, col_y, sFOCUS, sHOVER); #endregion diff --git a/objects/o_dialog_palette/Create_0.gml b/objects/o_dialog_palette/Create_0.gml index c7e6206c1..952a7510d 100644 --- a/objects/o_dialog_palette/Create_0.gml +++ b/objects/o_dialog_palette/Create_0.gml @@ -54,27 +54,6 @@ event_inherited(); #endregion #region presets - presets = ds_list_create(); - preset_name = ds_list_create(); - - function presetCollect() { - ds_list_clear(presets); - ds_list_clear(preset_name); - - ds_list_add(presets, DEF_PALETTE); - ds_list_add(preset_name, "Project"); - - var path = DIRECTORY + "Palettes/" - var file = file_find_first(path + "*", 0); - while(file != "") { - ds_list_add(presets, loadPalette(path + file)); - ds_list_add(preset_name, filename_name(file)); - file = file_find_next(); - } - file_find_close(); - } - presetCollect(); - hovering_name = ""; sp_preset_w = ui(240 - 32 - 16); @@ -85,31 +64,36 @@ event_inherited(); var hg = ui(52); draw_clear_alpha(COLORS.panel_bg_clear, 0); - for(var i = 0; i < ds_list_size(presets); i++) { + for(var i = -1; i < array_length(PALETTES); i++) { + var pal = i == -1? { + name: "project", + palette: PROJECT.attributes.palette, + path: "" + } : PALETTES[i]; var isHover = sHOVER && sp_presets.hover && point_in_rectangle(_m[0], _m[1], ui(4), yy, ui(4) + sp_preset_w - ui(16), yy + hg); draw_sprite_stretched(THEME.ui_panel_bg, 1, ui(4), yy, sp_preset_w - ui(16), hg); if(isHover) draw_sprite_stretched_ext(THEME.node_active, 1, ui(4), yy, sp_preset_w - ui(16), hg, COLORS._main_accent, 1); draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text_sub); - draw_text(ui(16), yy + ui(8), filename_name_only(preset_name[| i])); - drawPalette(presets[| i], ui(16), yy + ui(28), ww, ui(16)); + draw_text(ui(16), yy + ui(8), pal.name); + drawPalette(pal.palette, ui(16), yy + ui(28), ww, ui(16)); if(isHover) { if(mouse_press(mb_left, interactable && sFOCUS)) { - palette = array_create(array_length(presets[| i])); - for( var j = 0; j < array_length(presets[| i]); j++ ) - palette[j] = presets[| i][j]; + palette = array_create(array_length(pal.palette)); + for( var j = 0; j < array_length(pal.palette); j++ ) + palette[j] = pal.palette[j]; } if(mouse_press(mb_right, interactable && sFOCUS)) { - hovering_name = preset_name[| i]; + hovering_name = pal.name; menuCall("palette_window_preset_menu",,, [ menuItem(__txtx("palette_editor_delete", "Delete palette"), function() { - file_delete( DIRECTORY + "Palettes/" + hovering_name); - presetCollect(); + file_delete(hovering_name); + __initPalette(); }) - ],, { name : hovering_name }) + ]) } } diff --git a/objects/o_dialog_palette/Draw_64.gml b/objects/o_dialog_palette/Draw_64.gml index c9c2cea2f..d714d219b 100644 --- a/objects/o_dialog_palette/Draw_64.gml +++ b/objects/o_dialog_palette/Draw_64.gml @@ -184,7 +184,8 @@ if palette == 0 exit; if(buttonInstant(THEME.button, bx, by, ui(28), ui(28), mouse_ui, interactable && sFOCUS, sHOVER, __txtx("palette_editor_load", "Load palette file") + " (.hex)", THEME.file) == 2) { var path = get_open_filename(".hex", ""); key_release(); - if(path != "") { + + if(isPaletteFile(path)) { palette = loadPalette(path); onApply(palette); } diff --git a/objects/o_main/Other_2.gml b/objects/o_main/Other_2.gml index 9b8204403..85cb662bf 100644 --- a/objects/o_main/Other_2.gml +++ b/objects/o_main/Other_2.gml @@ -82,6 +82,8 @@ log_message("SESSION", "> init Nodes"); __initNodes(); log_message("SESSION", "> init SteamUGC"); __initSteamUGC(); log_message("SESSION", "> init Addon"); __initAddon(); + log_message("SESSION", "> init Palette"); __initPalette(); + log_message("SESSION", "> init Gradient"); __initGradient(); setPanel(); loadAddon(); diff --git a/scripts/draw_circle_functions/draw_circle_functions.gml b/scripts/draw_circle_functions/draw_circle_functions.gml index 1f6b90a4b..b4621d9a5 100644 --- a/scripts/draw_circle_functions/draw_circle_functions.gml +++ b/scripts/draw_circle_functions/draw_circle_functions.gml @@ -6,18 +6,18 @@ function draw_circle_prec(x, y, r, border, precision = 32) { function draw_circle_border(xx, yy, r, w) { var step = 32; var angle_step = 360 / step; - - var px, py, _px, _py; - - for(var i = 0; i <= step; i++){ - var px = xx + lengthdir_x(r, i * angle_step); - var py = yy + lengthdir_y(r, i * angle_step); - if(i) draw_line_round(_px, _py, px, py, w); + draw_primitive_begin(pr_trianglestrip); + for(var i = 0; i <= step; i++){ + var p0x = xx + lengthdir_x(r - w / 2, i * angle_step); + var p0y = yy + lengthdir_y(r - w / 2, i * angle_step); + var p1x = xx + lengthdir_x(r + w / 2, i * angle_step); + var p1y = yy + lengthdir_y(r + w / 2, i * angle_step); - _px = px; - _py = py; + draw_vertex(p0x, p0y); + draw_vertex(p1x, p1y); } + draw_primitive_end(); } function draw_ellipse_border(x0, y0, x1, y1, w) { diff --git a/scripts/gradients_function/gradients_function.gml b/scripts/gradients_function/gradients_function.gml index db2f17fae..654303c98 100644 --- a/scripts/gradients_function/gradients_function.gml +++ b/scripts/gradients_function/gradients_function.gml @@ -4,34 +4,31 @@ enum GRADIENT_INTER { hue } -function gradientKey(time, value) constructor { +function gradientKey(time, value) constructor { #region self.time = time; self.value = value; static clone = function() { return new gradientKey(time, value); } - static serialize = function() { return { time, value }; } -} +} #endregion -function gradientObject(color = c_black) constructor { +function gradientObject(color = c_black) constructor { #region static GRADIENT_LIMIT = 128; - if(is_array(color)) - keys = [ new gradientKey(0, color[0]), new gradientKey(1, color[1]) ]; - else - keys = [ new gradientKey(0, color) ]; + if(is_array(color)) keys = [ new gradientKey(0, color[0]), new gradientKey(1, color[1]) ]; + else keys = [ new gradientKey(0, color) ]; type = GRADIENT_INTER.smooth; - static clone = function() { + static clone = function() { #region var g = new gradientObject(); for( var i = 0, n = array_length(keys); i < n; i++ ) g.keys[i] = keys[i].clone(); g.type = type; return g; - } + } #endregion - static add = function(_addkey, _deleteDup = true) { + static add = function(_addkey, _deleteDup = true) { #region if(array_length(keys) > GRADIENT_LIMIT) return; if(array_length(keys) == 0) { array_push(keys, _addkey); @@ -52,9 +49,9 @@ function gradientObject(color = c_black) constructor { } array_push(keys, _addkey); - } + } #endregion - static eval = function(position) { + static eval = function(position) { #region if(array_length(keys) == 0) return c_black; if(array_length(keys) == 1) return keys[0].value; @@ -77,9 +74,9 @@ function gradientObject(color = c_black) constructor { } return keys[array_length(keys) - 1].value; //after last color - } + } #endregion - static draw = function(_x, _y, _w, _h, _a = 1) { + static draw = function(_x, _y, _w, _h, _a = 1) { #region var uniform_grad_blend = shader_get_uniform(sh_gradient_display, "gradient_blend"); var uniform_grad = shader_get_uniform(sh_gradient_display, "gradient_color"); var uniform_grad_time = shader_get_uniform(sh_gradient_display, "gradient_time"); @@ -112,9 +109,9 @@ function gradientObject(color = c_black) constructor { draw_sprite_stretched_ext(s_fx_pixel, 0, _x, _y, _w, _h, c_white, _a) shader_reset(); } - } + } #endregion - static toArray = function() { + static toArray = function() { #region var _grad_color = [], _grad_time = []; for(var i = 0; i < array_length(keys); i++) { @@ -128,9 +125,9 @@ function gradientObject(color = c_black) constructor { } return [ _grad_color, _grad_time ]; - } + } #endregion - static lerpTo = function(target, amount) { + static lerpTo = function(target, amount) { #region var grad = new gradientObject(); grad.keys = []; grad.type = type; @@ -150,9 +147,9 @@ function gradientObject(color = c_black) constructor { } return grad; - } + } #endregion - static shader_submit = function() { + static shader_submit = function() { #region var _grad = toArray(); var _grad_color = _grad[0]; var _grad_time = _grad[1]; @@ -161,9 +158,9 @@ function gradientObject(color = c_black) constructor { shader_set_f("gradient_color", _grad_color); shader_set_f("gradient_time", _grad_time); shader_set_i("gradient_keys", array_length(keys)); - } + } #endregion - static clone = function() { + static clone = function() { #region var g = new gradientObject(); g.keys = []; g.type = type; @@ -172,18 +169,18 @@ function gradientObject(color = c_black) constructor { g.keys[i] = keys[i].clone(); return g; - } + } #endregion - static serialize = function() { + static serialize = function() { #region var s = { type: type }; s.keys = []; for( var i = 0, n = array_length(keys); i < n; i++ ) s.keys[i] = keys[i].serialize(); return json_stringify(s, false); - } + } #endregion - static deserialize = function(str) { + static deserialize = function(str) { #region var s; if(is_string(str)) @@ -208,10 +205,10 @@ function gradientObject(color = c_black) constructor { } return self; - } -} + } #endregion +} #endregion -function loadGradient(path) { +function loadGradient(path) { #region if(path == "") return noone; if(!file_exists(path)) return noone; @@ -240,4 +237,23 @@ function loadGradient(path) { file_text_close(_t); return grad; +} #endregion + +globalvar GRADIENTS; +GRADIENTS = []; + +function __initGradient() { + GRADIENTS = []; + + var path = DIRECTORY + "Gradients/" + var file = file_find_first(path + "*", 0); + while(file != "") { + array_push(GRADIENTS, { + name: filename_name_only(file), + path: path + file, + gradient: loadGradient(path + file) + }); + file = file_find_next(); + } + file_find_close(); } \ No newline at end of file diff --git a/scripts/load_palette/load_palette.gml b/scripts/load_palette/load_palette.gml deleted file mode 100644 index a4b395594..000000000 --- a/scripts/load_palette/load_palette.gml +++ /dev/null @@ -1,32 +0,0 @@ -function loadPalette(path) { - var pal = []; - - if(path != "" && file_exists(path)) { - var _t = file_text_open_read(path); - var _index = 0; - var ext = string_lower(filename_ext(path)); - while(!file_text_eof(_t)) { - var _w = file_text_readln(_t); - if(_w != "") { - switch(ext) { - case ".hex" : - var _r = string_hexadecimal(string_copy(_w, 1, 2)); - var _g = string_hexadecimal(string_copy(_w, 3, 2)); - var _b = string_hexadecimal(string_copy(_w, 5, 2)); - - pal[_index++] = make_color_rgb(_r, _g, _b); - break; - case ".gpl" : - case ".pal" : - if(string_char_at(_w, 1) == "#") break; - var _c = string_splice(_w, " "); - if(array_length(_c) >= 3) - pal[_index++] = make_color_rgb(toNumber(_c[0]), toNumber(_c[1]), toNumber(_c[2])); - break; - } - } - } - file_text_close(_t); - } - return pal; -} \ No newline at end of file diff --git a/scripts/node_pin/node_pin.gml b/scripts/node_pin/node_pin.gml index b5cf2677d..aa9a403cb 100644 --- a/scripts/node_pin/node_pin.gml +++ b/scripts/node_pin/node_pin.gml @@ -20,10 +20,15 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { outputs[| 0] = nodeValue("Out", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0); - static update = function(frame = CURRENT_FRAME) { - inputs[| 0].setType(inputs[| 0].value_from == noone? VALUE_TYPE.any : inputs[| 0].value_from.type); - outputs[| 0].setType(inputs[| 0].type); + static step = function() { + if(inputs[| 0].value_from == noone) return; + + inputs[| 0].setType(inputs[| 0].value_from.type); + outputs[| 0].setType(inputs[| 0].value_from.type); outputs[| 0].value_from = inputs[| 0].value_from; + + inputs[| 0].color_display = inputs[| 0].value_from.color_display; + outputs[| 0].color_display = inputs[| 0].color_display; } static pointIn = function(_x, _y, _mx, _my, _s) { @@ -77,8 +82,13 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { active_draw_index = -1; } - if(hover_scale > 0) - draw_sprite_ext(THEME.node_pin_bg_active, 0, xx, yy, _s * hover_scale, _s * hover_scale, 0, COLORS._main_accent, hover_alpha); + if(hover_scale > 0) { + draw_set_color(COLORS._main_accent); + draw_set_alpha(hover_alpha); + draw_circle_border(xx, yy, _s * hover_scale * 20, 2); + draw_set_alpha(1); + } + hover_scale = lerp_float(hover_scale, hover_scale_to, 3); hover_scale_to = 0; diff --git a/scripts/palette_functions/palette_functions.gml b/scripts/palette_functions/palette_functions.gml new file mode 100644 index 000000000..5194c2ad0 --- /dev/null +++ b/scripts/palette_functions/palette_functions.gml @@ -0,0 +1,91 @@ +function isPaletteFile(path) { #region + var ext = string_lower(filename_ext(path)); + switch(ext) { + case ".hex" : + case ".gpl" : + case ".pal" : + case ".png" : + return true; + } + + return false; +} #endregion + +function loadPalette(path) { #region + if(!file_exists(path)) return []; + if(!isPaletteFile(path)) return []; + + var ext = string_lower(filename_ext(path)); + + if(ext == ".png") { + var _spr = sprite_add(path, 1, 0, 0, 0, 0); + var _sw = sprite_get_width(_spr); + var _sh = sprite_get_height(_spr); + var _s = surface_create(_sw, _sh); + surface_set_target(_s); + draw_clear_alpha(0, 0); + BLEND_OVERRIDE + draw_sprite(_spr, 0, 0, 0); + BLEND_NORMAL + surface_reset_target(); + + var pal = array_create(_sw * _sh); + for( var i = 0; i < _sh; i++ ) + for( var j = 0; j < _sw; j++ ) + pal[i * _sh + j] = surface_getpixel(_s, j, i); + + surface_free(_s); + + return pal; + } + + var pal = []; + var _t = file_text_open_read(path); + var _index = 0; + + while(!file_text_eof(_t)) { + var _w = file_text_readln(_t); + if(_w == "") continue; + + switch(ext) { + case ".hex" : + var _r = string_hexadecimal(string_copy(_w, 1, 2)); + var _g = string_hexadecimal(string_copy(_w, 3, 2)); + var _b = string_hexadecimal(string_copy(_w, 5, 2)); + + pal[_index++] = make_color_rgb(_r, _g, _b); + break; + case ".gpl" : + case ".pal" : + if(string_char_at(_w, 1) == "#") break; + var _c = string_splice(_w, " "); + if(array_length(_c) >= 3) + pal[_index++] = make_color_rgb(toNumber(_c[0]), toNumber(_c[1]), toNumber(_c[2])); + break; + } + } + file_text_close(_t); + + return pal; +} #endregion + +globalvar PALETTES; +PALETTES = []; + +function __initPalette() { + PALETTES = []; + + var path = DIRECTORY + "Palettes/" + var file = file_find_first(path + "*", 0); + while(file != "") { + if(isPaletteFile(file)) { + array_push(PALETTES, { + name: filename_name_only(file), + path: path + file, + palette: loadPalette(path + file) + }); + } + file = file_find_next(); + } + file_find_close(); +} \ No newline at end of file diff --git a/scripts/load_palette/load_palette.yy b/scripts/palette_functions/palette_functions.yy similarity index 86% rename from scripts/load_palette/load_palette.yy rename to scripts/palette_functions/palette_functions.yy index eb0799efd..25a66992d 100644 --- a/scripts/load_palette/load_palette.yy +++ b/scripts/palette_functions/palette_functions.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "load_palette", + "name": "palette_functions", "isCompatibility": false, "isDnD": false, "parent": { diff --git a/scripts/panel_gradient/panel_gradient.gml b/scripts/panel_gradient/panel_gradient.gml index 28ff0bac3..df5b20fde 100644 --- a/scripts/panel_gradient/panel_gradient.gml +++ b/scripts/panel_gradient/panel_gradient.gml @@ -7,25 +7,6 @@ function Panel_Gradient() : PanelContent() constructor { w = ui(320); h = ui(480); - presets = []; - - function presetCollect() { - presets = []; - - var path = DIRECTORY + "Gradients/" - var file = file_find_first(path + "*", 0); - while(file != "") { - array_push(presets, { - name: filename_name(file), - gradient: loadGradient(path + file) - }); - - file = file_find_next(); - } - file_find_close(); - } - presetCollect(); - function onResize() { PANEL_PADDING @@ -37,7 +18,7 @@ function Panel_Gradient() : PanelContent() constructor { var ww = sp_gradient.surface_w; var hh = 0; - var amo = array_length(presets); + var amo = array_length(GRADIENTS); var col = floor(ww / ui(160)); var row = ceil(amo / col); @@ -53,7 +34,7 @@ function Panel_Gradient() : PanelContent() constructor { if(ind >= amo) break; var xx = j * gw; - var preset = presets[ind]; + var preset = GRADIENTS[ind]; var isHover = pHOVER && point_in_rectangle(_m[0], _m[1], xx, max(0, yy), xx + gw - ui(8), min(sp_gradient.h, yy + hg)); draw_sprite_stretched(THEME.ui_panel_bg, in_dialog, xx, yy, gw - ui(8), hg); @@ -98,6 +79,6 @@ function Panel_Gradient() : PanelContent() constructor { var by = title_height / 2 - ui(16 + !in_dialog * 2); if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, __txt("Refresh"), THEME.refresh, 1, COLORS._main_icon) == 2) - presetCollect(); + __initGradient(); } } \ No newline at end of file diff --git a/scripts/panel_palette/panel_palette.gml b/scripts/panel_palette/panel_palette.gml index 042885f87..38f32bce0 100644 --- a/scripts/panel_palette/panel_palette.gml +++ b/scripts/panel_palette/panel_palette.gml @@ -7,28 +7,10 @@ function Panel_Palette() : PanelContent() constructor { w = ui(320); h = ui(480); - presets = []; view_mode = 0; color_dragging = noone; - static presetCollect = function() { - presets = []; - - var path = DIRECTORY + "Palettes/" - var file = file_find_first(path + "*", 0); - while(file != "") { - array_push(presets, { - name: filename_name(file), - palette: loadPalette(path + file) - }); - - file = file_find_next(); - } - file_find_close(); - } - presetCollect() - function onResize() { PANEL_PADDING @@ -48,8 +30,8 @@ function Panel_Palette() : PanelContent() constructor { var yy = _y; var _height; - for(var i = 0; i < array_length(presets); i++) { - var preset = presets[i]; + for(var i = 0; i < array_length(PALETTES); i++) { + var preset = PALETTES[i]; var pre_amo = array_length(preset.palette); var col = floor((ww - ui(20)) / _gs); var row = ceil(pre_amo / col);