Palette, gradient dialog fix. Line optimize. Sprite stack fix.

This commit is contained in:
MakhamDev 2023-10-30 10:18:18 +07:00
parent ff5124b551
commit 7bfecbf6a5
20 changed files with 239 additions and 198 deletions

View file

@ -40,7 +40,7 @@ if !ready exit;
var by = dialog_y + ui(12);
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, __txt("Refresh"), THEME.refresh) == 2)
presetCollect();
__initPalette();
bx -= ui(32);
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, __txtx("color_selector_open_palette", "Open palette folder"), THEME.folder) == 2) {

View file

@ -45,9 +45,7 @@ if !ready exit;
var bx = presets_x + presets_w - ui(44);
var by = dialog_y + ui(12);
var _b = buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, __txtx("add_preset", "Add to preset"));
if(_b == 2) {
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, __txtx("add_preset", "Add to preset")) == 2) {
var dia = dialogCall(o_dialog_file_name, mouse_mx + ui(8), mouse_my + ui(8));
dia.onModify = function (txt) {
var gradStr = "";
@ -62,7 +60,7 @@ if !ready exit;
var file = file_text_open_write(txt + ".txt");
file_text_write_string(file, gradStr);
file_text_close(file);
presetCollect();
__initGradient();
};
dia.path = DIRECTORY + "Gradients/"
}
@ -70,7 +68,7 @@ if !ready exit;
bx -= ui(32);
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, __txt("Refresh"), THEME.refresh) == 2)
presetCollect();
__initGradient();
bx -= ui(32);
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, __txtx("graident_editor_open_folder", "Open gradient folder"), THEME.folder) == 2) {

View file

@ -2,17 +2,17 @@
event_inherited();
#region data
dialog_w = ui(812);
dialog_h = ui(440);
dialog_w = ui(812);
dialog_h = ui(440);
title_height = 52;
destroy_on_click_out = true;
name = __txtx("palette_editor_title", "Palette editor");
name = __txtx("palette_editor_title", "Palette editor");
palette = 0;
index_selecting = 0;
index_dragging = -1;
interactable = true;
index_dragging = -1;
interactable = true;
setColor = function(color) {
if(index_selecting == -1 || palette == 0) return;
@ -22,9 +22,9 @@ event_inherited();
onApply(palette);
}
onApply = noone;
onApply = noone;
selector = new colorSelector(setColor);
selector.dropper_close = false;
selector.dropper_close = false;
selector.discretize_pal = false;
previous_palette = c_black;
@ -58,7 +58,7 @@ event_inherited();
sp_preset_w = ui(240 - 32 - 16);
sp_presets = new scrollPane(sp_preset_w, dialog_h - ui(62), function(_y, _m) {
var ww = sp_preset_w - ui(40);
var ww = sp_preset_w - ui(40);
var hh = ui(32);
var yy = _y + ui(8);
var hg = ui(52);
@ -87,7 +87,7 @@ event_inherited();
}
if(mouse_press(mb_right, interactable && sFOCUS)) {
hovering_name = pal.name;
hovering_name = pal.path;
menuCall("palette_window_preset_menu",,, [
menuItem(__txtx("palette_editor_delete", "Delete palette"), function() {
file_delete(hovering_name);

View file

@ -53,15 +53,15 @@ if palette == 0 exit;
file_text_writeln(file);
}
file_text_close(file);
presetCollect();
__initPalette();
};
dia.path = DIRECTORY + "Palettes/"
}
bx -= ui(32);
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, __txt("Refresh"), THEME.refresh) == 2) {
presetCollect();
}
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, __txt("Refresh"), THEME.refresh) == 2)
__initPalette();
draw_sprite_ui_uniform(THEME.refresh, 0, bx + ui(14), by + ui(14), 1, COLORS._main_icon);
bx -= ui(32);

View file

@ -100,7 +100,6 @@ function __part(_node) constructor {
life_total = life;
if(node.onPartCreate != noone) node.onPartCreate(self);
trailActive = true;
trailLife = 0;
x_history = array_create(life);
y_history = array_create(life);
@ -176,6 +175,7 @@ function __part(_node) constructor {
static step = function(frame = 0) { #region
gml_pragma("forceinline");
//if(life_total > 0) print($"Step {seed}: {trailLife}");
trailLife++;
if(!active) return;
@ -201,7 +201,11 @@ function __part(_node) constructor {
dirr += wig_dir.get(seed + life);
if(turning != 0) {
var trn = turnSpd? turning * diss : turning;
var trn = turning;
if(turnSpd > 0) trn = turning * diss * turnSpd;
else if(turnSpd < 0) trn = turning / diss * turnSpd;
dirr += trn
}
}

View file

@ -116,7 +116,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co
inputs[| 35] = nodeValue("Turn both directions", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false, "Apply randomized 1, -1 multiplier to the turning speed." )
.rejectArray();
inputs[| 36] = nodeValue("Turn scale with speed", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false )
inputs[| 36] = nodeValue("Turn scale with speed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, false )
.rejectArray();
inputs[| 37] = nodeValue("Collide ground", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false )
@ -426,6 +426,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co
}
}
//print($"\n===== Running VFX {_time} =====")
//var activeParts = 0;
for(var i = 0; i < array_length(parts); i++) {
//activeParts++;

View file

@ -23,30 +23,60 @@ function draw_line_width2(x0, y0, x1, y1, w0, w1, cap = false) {
}
}
function draw_line_width2_angle(x0, y0, x1, y1, w0, w1, a0 = 0, a1 = 0, _oc = c_white, _nc = c_white, widColor = false) {
var _x0 = x0 + lengthdir_x(w0 / 2, a0);
var _y0 = y0 + lengthdir_y(w0 / 2, a0);
var _x1 = x1 + lengthdir_x(w1 / 2, a1);
var _y1 = y1 + lengthdir_y(w1 / 2, a1);
function draw_line_width2_angle(x0, y0, x1, y1, w0, w1, a0 = 0, a1 = 0, _oc = c_white, _nc = c_white) {
var _d0x = lengthdir_x(w0 / 2, a0);
var _d0y = lengthdir_y(w0 / 2, a0);
var _d1x = lengthdir_x(w1 / 2, a1);
var _d1y = lengthdir_y(w1 / 2, a1);
var _x0 = x0 + _d0x;
var _y0 = y0 + _d0y;
var _x1 = x1 + _d1x;
var _y1 = y1 + _d1y;
//draw_set_color(c_red);
draw_primitive_begin(pr_trianglestrip);
draw_vertex_color( x0, y0, widColor? merge_color(_oc, c_black, 0.5) : _oc, 1);
draw_vertex_color( x1, y1, widColor? merge_color(_nc, c_black, 0.5) : _nc, 1);
draw_vertex_color(_x0, _y0, widColor? merge_color(_oc, c_black, 0.0) : _oc, 1);
draw_vertex_color(_x1, _y1, widColor? merge_color(_nc, c_black, 0.0) : _nc, 1);
draw_primitive_end();
draw_vertex_color( x0, y0, _oc, 1);
draw_vertex_color( x1, y1, _nc, 1);
draw_vertex_color(_x0, _y0, _oc, 1);
draw_vertex_color(_x1, _y1, _nc, 1);
var _x0 = x0 + lengthdir_x(w0 / 2, a0 + 180);
var _y0 = y0 + lengthdir_y(w0 / 2, a0 + 180);
var _x1 = x1 + lengthdir_x(w1 / 2, a1 + 180);
var _y1 = y1 + lengthdir_y(w1 / 2, a1 + 180);
var _x0 = x0 - _d0x;
var _y0 = y0 - _d0y;
var _x1 = x1 - _d1x;
var _y1 = y1 - _d1y;
//draw_set_color(c_blue);
draw_primitive_begin(pr_trianglestrip);
draw_vertex_color( x0, y0, widColor? merge_color(_oc, c_black, 0.5) : _oc, 1);
draw_vertex_color( x1, y1, widColor? merge_color(_nc, c_black, 0.5) : _nc, 1);
draw_vertex_color(_x0, _y0, widColor? merge_color(_oc, c_black, 1.0) : _oc, 1);
draw_vertex_color(_x1, _y1, widColor? merge_color(_nc, c_black, 1.0) : _nc, 1);
draw_primitive_end();
draw_vertex_color( x0, y0, _oc, 1);
draw_vertex_color( x1, y1, _nc, 1);
draw_vertex_color(_x0, _y0, _oc, 1);
draw_vertex_color(_x1, _y1, _nc, 1);
}
function draw_line_width2_angle_width(x0, y0, x1, y1, w0, w1, a0 = 0, a1 = 0, _oc = c_white, _nc = c_white) {
var _d0x = lengthdir_x(w0 / 2, a0);
var _d0y = lengthdir_y(w0 / 2, a0);
var _d1x = lengthdir_x(w1 / 2, a1);
var _d1y = lengthdir_y(w1 / 2, a1);
var _x0 = x0 + _d0x;
var _y0 = y0 + _d0y;
var _x1 = x1 + _d1x;
var _y1 = y1 + _d1y;
//draw_set_color(c_red);
draw_vertex_color( x0, y0, _oc, 1);
draw_vertex_color( x1, y1, _nc, 1);
draw_vertex_color(_x0, _y0, 0, 1);
draw_vertex_color(_x1, _y1, 0, 1);
var _x0 = x0 - _d0x;
var _y0 = y0 - _d0y;
var _x1 = x1 - _d1x;
var _y1 = y1 - _d1y;
//draw_set_color(c_blue);
draw_vertex_color( x0, y0, _oc, 1);
draw_vertex_color( x1, y1, _nc, 1);
draw_vertex_color(_x0, _y0, c_black, 1);
draw_vertex_color(_x1, _y1, c_black, 1);
}

View file

@ -5,7 +5,9 @@ function Node_VFX_Spawner(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y
reloop = true;
attributes.Output_pool = false;
array_push(attributeEditors, ["Output all particles", function() { return attributes.Output_pool; },
new checkBox(function() { attributes.Output_pool = !attributes.Output_pool; }) ]);
inputs[| 21].setVisible(false, false);
inputs[| input_len + 0] = nodeValue("Spawn trigger", self, JUNCTION_CONNECT.input, VALUE_TYPE.node, false)
@ -23,7 +25,8 @@ function Node_VFX_Spawner(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y
UPDATE_PART_FORWARD
static onUpdate = function(frame = CURRENT_FRAME) { #region
runVFX(frame);
if(PROJECT.animator.frame_progress)
runVFX(frame);
if(attributes.Output_pool) {
outputs[| 0].setValue(parts);

View file

@ -98,6 +98,7 @@ function Node_VFX_Trail(_x, _y, _group = noone) : Node(_x, _y, _group) construct
var _trail_st = max(1, _vfx.trailLife - _life);
var _trail_len = _trail_ed - _trail_st;
//if(_vfx.life_total > 0) print($"{_vfx.active} | {_vfx.seed} : {_vfx.trailLife}")
if(_trail_len <= 0) continue;
var _lngh = 0;

View file

@ -367,6 +367,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru
static onDestroy = function() { #region
if(is_undefined(inParent)) return;
ds_list_remove(group.inputs, inParent);
group.sortIO();
} #endregion
static ungroup = function() { #region

View file

@ -122,7 +122,8 @@ function Node_Group_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constr
static onDestroy = function() { #region
if(is_undefined(outParent)) return;
ds_list_delete(group.outputs, ds_list_find_index(group.outputs, outParent));
ds_list_remove(group.outputs, outParent);
group.sortIO();
} #endregion
static ungroup = function() { #region
@ -139,7 +140,7 @@ function Node_Group_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constr
static onLoadGroup = function() { #region
if(group == noone) nodeDelete(self);
} #endregion
//static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
// var bbox = drawGetBbox(xx, yy, _s);
// draw_set_text(f_h5, fa_center, fa_center, c_white);

View file

@ -77,6 +77,8 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
lines = [];
widthMap = ds_map_create();
attribute_surface_depth();
attribute_interpolation();
@ -122,39 +124,42 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
} #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) {
var _dim = _data[0];
var _bg = _data[1];
var _seg = _data[2];
var _wid = _data[3];
var _wig = _data[4];
var _sed = _data[5];
var _ang = _data[6] % 360;
var _pat = _data[7];
var _ratio = _data[8];
var _shift = _data[9];
#region data
var _dim = _data[0];
var _bg = _data[1];
var _seg = _data[2];
var _wid = _data[3];
var _wig = _data[4];
var _sed = _data[5];
var _ang = _data[6] % 360;
var _pat = _data[7];
var _ratio = _data[8];
var _shift = _data[9];
var _color = _data[10];
var _widc = _data[11];
var _widap = _data[12];
var _color = _data[10];
var _widc = _data[11];
var _widap = _data[12];
var _cap = _data[13];
var _capP = _data[14];
var _colP = _data[15];
var _colW = _data[16];
var _1px = _data[17];
var _cap = _data[13];
var _capP = _data[14];
var _colP = _data[15];
var _colW = _data[16];
var _1px = _data[17];
var _fixL = _data[19];
var _segL = _data[20];
var _fixL = _data[19];
var _segL = _data[20];
var _tex = _data[18];
var _texPos = _data[21];
var _texRot = _data[22];
var _texSca = _data[23];
var _tex = _data[18];
var _texPos = _data[21];
var _texRot = _data[22];
var _texSca = _data[23];
var _colb = _data[24];
inputs[| 14].setVisible(_cap);
var _colb = _data[24];
#endregion
if(CURRENT_FRAME == 0 || inputs[| 11].is_anim)
ds_map_clear(widthMap);
var _rangeMin = min(_ratio[0], _ratio[1]);
var _rangeMax = max(_ratio[0], _ratio[1]);
if(_rangeMax == 1) _rangeMax = 0.99999;
@ -334,6 +339,10 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
lines = [ points ];
} #endregion
#region draw
//print($"==== Drawing frame {CURRENT_FRAME} ====")
surface_set_target(_outSurf);
if(_bg) draw_clear_alpha(0, 1);
else DRAW_CLEAR
@ -347,14 +356,15 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
shader_set_f("scale", _texSca);
shader_set_interpolation(_tex);
draw_primitive_begin_texture(pr_trianglestrip, tex);
}
for( var i = 0, n = array_length(lines); i < n; i++ ) {
var points = lines[i];
if(array_length(points) < 2) continue;
if(_useTex) draw_primitive_begin_texture(pr_trianglestrip, tex);
else draw_primitive_begin(pr_trianglestrip);
random_set_seed(_sed + i);
var pxs = [];
var dat = array_safe_get(_pathData, i, noone);
@ -369,12 +379,16 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
var prgc = p0.progCrop;
if(_1px) {
_nx = _nx - 0.5;
_nx = _nx - 0.5;
_ny = _ny - 0.5;
}
_nw = random_range(_wid[0], _wid[1]);
_nw *= eval_curve_x(_widc, _widap? prog : prgc);
var widProg = value_snap_real(_widap? prog : prgc, 0.01);
_nw = random_range(_wid[0], _wid[1]);
if(!ds_map_exists(widthMap, widProg))
widthMap[? widProg] = eval_curve_x(_widc, widProg, 0.1);
_nw *= widthMap[? widProg];
_nw *= p0.weight;
_nc = colorMultiply(_col_base, _color.eval(_colP? prog : prgc));
@ -443,8 +457,10 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
draw_vertex_texture_color(ox1, oy1, 1, (j - 1) / _len, _oc, 1);
draw_vertex_texture_color(nx0, ny0, 0, (j - 0) / _len, _nc, 1);
draw_vertex_texture_color(nx1, ny1, 1, (j - 0) / _len, _nc, 1);
} else
draw_line_width2_angle(_ox, _oy, _nx, _ny, _ow, _nw, _od + 90, _nd + 90, _oc, _nc, _colW);
} else if(_colW)
draw_line_width2_angle_width(_ox, _oy, _nx, _ny, _ow, _nw, _od + 90, _nd + 90, merge_color(_oc, c_black, 0.5), merge_color(_nc, c_black, 0.5));
else
draw_line_width2_angle(_ox, _oy, _nx, _ny, _ow, _nw, _od + 90, _nd + 90, _oc, _nc);
} else {
var p1 = points[j + 1];
_nd = point_direction(_nx, _ny, p1.x, p1.y);
@ -458,12 +474,12 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
}
}
if(_useTex) {
draw_primitive_end();
shader_reset();
}
draw_primitive_end();
}
if(_useTex) shader_reset();
surface_reset_target();
#endregion
return _outSurf;
}

View file

@ -425,20 +425,20 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio
///**/ addNodeObject(d3d, "3D Instancer", s_node_3d_set_material, "Node_3D_Instancer", [1, Node_3D_Instancer]).setVersion(11560);
///**/ addNodeObject(d3d, "3D Particle", s_node_3d_set_material, "Node_3D_Particle", [1, Node_3D_Particle]).setVersion(11560);
ds_list_add(d3d, "Legacy"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////
addNodeObject(d3d, "3D Plane", s_node_3d_plane, "__Node_3D_Plane", [1, __Node_3D_Plane],, "Put 2D image on a plane in 3D space.").isDeprecated();
addNodeObject(d3d, "3D Cube", s_node_3d_cube, "__Node_3D_Cube", [1, __Node_3D_Cube]).isDeprecated();
addNodeObject(d3d, "3D Cylinder", s_node_3d_cylinder, "__Node_3D_Cylinder", [1, __Node_3D_Cylinder]).isDeprecated();
addNodeObject(d3d, "3D Sphere", s_node_3d_sphere, "__Node_3D_Sphere", [1, __Node_3D_Sphere]).setVersion(1090).isDeprecated();
addNodeObject(d3d, "3D Cone", s_node_3d_cone, "__Node_3D_Cone", [1, __Node_3D_Cone]).setVersion(1090).isDeprecated();
addNodeObject(d3d, "3D Extrude", s_node_3d_extrude, "__Node_3D_Extrude", [1, __Node_3D_Extrude],, "Extrude 2D image into 3D object.").isDeprecated();
//ds_list_add(d3d, "Legacy"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////
//addNodeObject(d3d, "3D Plane", s_node_3d_plane, "__Node_3D_Plane", [1, __Node_3D_Plane],, "Put 2D image on a plane in 3D space.").isDeprecated();
//addNodeObject(d3d, "3D Cube", s_node_3d_cube, "__Node_3D_Cube", [1, __Node_3D_Cube]).isDeprecated();
//addNodeObject(d3d, "3D Cylinder", s_node_3d_cylinder, "__Node_3D_Cylinder", [1, __Node_3D_Cylinder]).isDeprecated();
//addNodeObject(d3d, "3D Sphere", s_node_3d_sphere, "__Node_3D_Sphere", [1, __Node_3D_Sphere]).setVersion(1090).isDeprecated();
//addNodeObject(d3d, "3D Cone", s_node_3d_cone, "__Node_3D_Cone", [1, __Node_3D_Cone]).setVersion(1090).isDeprecated();
//addNodeObject(d3d, "3D Extrude", s_node_3d_extrude, "__Node_3D_Extrude", [1, __Node_3D_Extrude],, "Extrude 2D image into 3D object.").isDeprecated();
addNodeObject(d3d, "3D Transform", s_node_3d_transform, "__Node_3D_Transform", [1, __Node_3D_Transform]).setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Combine", s_node_3d_obj_combine, "__Node_3D_Combine", [1, __Node_3D_Combine],, "Combine multiple 3D object to a single scene,").setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Repeat", s_node_3d_array, "__Node_3D_Repeat", [1, __Node_3D_Repeat], ["3d array"], "Repeat 3D object multiple times.").setVersion(1080).isDeprecated();
addNodeObject(d3d, "3D Displace", s_node_3d_displace, "__Node_3D_Displace", [1, __Node_3D_Displace]).setVersion(1143).isDeprecated();
//addNodeObject(d3d, "3D Transform", s_node_3d_transform, "__Node_3D_Transform", [1, __Node_3D_Transform]).setVersion(1080).isDeprecated();
//addNodeObject(d3d, "3D Combine", s_node_3d_obj_combine, "__Node_3D_Combine", [1, __Node_3D_Combine],, "Combine multiple 3D object to a single scene,").setVersion(1080).isDeprecated();
//addNodeObject(d3d, "3D Repeat", s_node_3d_array, "__Node_3D_Repeat", [1, __Node_3D_Repeat], ["3d array"], "Repeat 3D object multiple times.").setVersion(1080).isDeprecated();
//addNodeObject(d3d, "3D Displace", s_node_3d_displace, "__Node_3D_Displace", [1, __Node_3D_Displace]).setVersion(1143).isDeprecated();
addNodeObject(d3d, "3D Export", s_node_3d_export, "__Node_3D_Export", [1, __Node_3D_Export]).setVersion(1143).isDeprecated();
//addNodeObject(d3d, "3D Export", s_node_3d_export, "__Node_3D_Export", [1, __Node_3D_Export]).setVersion(1143).isDeprecated();
#endregion
var generator = ds_list_create(); #region

View file

@ -127,7 +127,7 @@ function Node_Sprite_Stack(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
var _surf = getInputData(0);
var _arry = getInputData(12);
inputs[| 2].setVisible(_arry && is_array(_surf));
inputs[| 2].setVisible(_arry == 0 || !is_array(_surf));
inputs[| 10].setVisible(_high);
inputs[| 11].setVisible(_high);

View file

@ -1,23 +1,6 @@
function Node_Stripe(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "Stripe";
shader = sh_stripe;
uniform_grad_use = shader_get_uniform(shader, "gradient_use");
uniform_grad_blend = shader_get_uniform(shader, "gradient_blend");
uniform_grad = shader_get_uniform(shader, "gradient_color");
uniform_grad_time = shader_get_uniform(shader, "gradient_time");
uniform_grad_key = shader_get_uniform(shader, "gradient_keys");
uniform_dim = shader_get_uniform(shader, "dimension");
uniform_pos = shader_get_uniform(shader, "position");
uniform_angle = shader_get_uniform(shader, "angle");
uniform_amount = shader_get_uniform(shader, "amount");
uniform_blend = shader_get_uniform(shader, "blend");
uniform_rand = shader_get_uniform(shader, "rand");
uniform_clr0 = shader_get_uniform(shader, "color0");
uniform_clr1 = shader_get_uniform(shader, "color1");
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF )
.setDisplay(VALUE_DISPLAY.vector);
@ -44,26 +27,29 @@ function Node_Stripe(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
inputs[| 9] = nodeValue("Color 2", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black);
inputs[| 10] = nodeValue("Strip ratio", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5)
.setDisplay(VALUE_DISPLAY.slider);
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
input_display_list = [
["Output", true], 0,
["Pattern", false], 1, 2, 4, 5,
["Pattern", false], 1, 10, 2, 4, 5,
["Render", false], 6, 7, 8, 9, 3
];
attribute_surface_depth();
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
var pos = getInputData(4);
var px = _x + pos[0] * _s;
var py = _y + pos[1] * _s;
inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my, _snx, _sny);
}
} #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) {
static processData = function(_outSurf, _data, _output_index, _array_index) { #region
var _dim = _data[0];
var _amo = _data[1];
var _ang = _data[2];
@ -71,8 +57,9 @@ function Node_Stripe(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
var _pos = _data[4];
var _rnd = _data[5];
var _clr0 = _data[8];
var _clr1 = _data[9];
var _clr0 = _data[ 8];
var _clr1 = _data[ 9];
var _rat = _data[10];
var _grad_use = _data[6];
inputs[| 7].setVisible(_grad_use);
@ -87,28 +74,27 @@ function Node_Stripe(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
_outSurf = surface_verify(_outSurf, _dim[0], _dim[1], attrDepth());
surface_set_target(_outSurf);
shader_set(shader);
shader_set_uniform_f(uniform_dim, _dim[0], _dim[1]);
shader_set_uniform_f(uniform_pos, _pos[0] / _dim[0], _pos[1] / _dim[1]);
shader_set_uniform_f(uniform_angle, degtorad(_ang));
shader_set_uniform_f(uniform_amount, _amo);
shader_set_uniform_f(uniform_blend, _bnd);
shader_set_uniform_f(uniform_rand, _rnd);
surface_set_shader(_outSurf, sh_stripe);
shader_set_f("dimension", _dim[0], _dim[1]);
shader_set_f("position", _pos[0] / _dim[0], _pos[1] / _dim[1]);
shader_set_f("angle", degtorad(_ang));
shader_set_f("amount", _amo);
shader_set_f("blend", _bnd);
shader_set_f("randomAmount", _rnd);
shader_set_f("ratio", _rat);
shader_set_uniform_f_array_safe(uniform_clr0, colToVec4(_clr0));
shader_set_uniform_f_array_safe(uniform_clr1, colToVec4(_clr1));
shader_set_f("color0", colToVec4(_clr0));
shader_set_f("color1", colToVec4(_clr1));
shader_set_uniform_i(uniform_grad_use, _grad_use);
shader_set_uniform_i(uniform_grad_blend, _gra.type);
shader_set_uniform_f_array_safe(uniform_grad, _grad_color);
shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time);
shader_set_uniform_i(uniform_grad_key, array_length(_gra.keys));
shader_set_i("gradient_use", _grad_use);
shader_set_i("gradient_blend", _gra.type);
shader_set_f("gradient_color", _grad_color);
shader_set_f("gradient_time", _grad_time);
shader_set_i("gradient_keys", array_length(_gra.keys));
draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1);
shader_reset();
surface_reset_target();
draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1);
surface_reset_shader();
return _outSurf;
}
} #endregion
}

View file

@ -409,8 +409,8 @@ function Panel_Collection() : PanelContent() constructor {
rootx = _x;
var bx = w - ui(44);
var by = ui(12);
var bx = w - ui(40);
var by = ui(9);
var bs = ui(32);
if(search_string == "") {

View file

@ -99,7 +99,7 @@ function Panel_Palette() : 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();
__initPalette();
bx -= ui(32)
if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, __txtx("palette_change_preview_size", "Change preview size"), THEME.icon_visibility, 1, COLORS._main_icon) == 2)

View file

@ -8,12 +8,12 @@ function shell_execute(path, command, ref = noone) {
gml_pragma("forceinline");
var txt = $"{path} {command}";
noti_status(txt, THEME.noti_icon_console,, ref);
if(global.PROC_ID == 0) noti_status(txt, THEME.noti_icon_console,, ref);
try {
var res = execute_shell(path, command);
noti_status("Execute shell complete", THEME.noti_icon_console,, ref);
if(global.PROC_ID == 0) noti_status("Execute shell complete", THEME.noti_icon_console,, ref);
} catch(e) {
noti_warning($"Execute shell failed: {e}", THEME.noti_icon_console_failed, COLORS._main_value_negative, ref);
if(global.PROC_ID == 0) noti_warning($"Execute shell failed: {e}", THEME.noti_icon_console_failed, COLORS._main_value_negative, ref);
}
}

View file

@ -1,13 +1,16 @@
function value_snap_real(val, snap = 1) {
gml_pragma("forceinline")
return snap == 0? val : round(val / snap) * snap;
}
function value_snap(val, snap = 1) {
gml_pragma("forceinline")
if(!is_array(val)) {
if(snap == 0) return val;
return round(val / snap) * snap;
}
if(!is_array(val))
return value_snap_real(val, snap);
var _val = [];
for( var i = 0, n = array_length(val); i < n; i++ )
_val[i] = snap == 0? val[i] : round(val[i] / snap) * snap;
_val[i] = value_snap(val[i], snap);
return _val;
}

View file

@ -4,29 +4,28 @@
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
#define GRADIENT_LIMIT 128
uniform int gradient_use;
uniform int gradient_blend;
uniform vec4 gradient_color[GRADIENT_LIMIT];
uniform float gradient_time[GRADIENT_LIMIT];
uniform int gradient_keys;
uniform vec4 color0;
uniform vec4 color1;
uniform vec2 dimension;
uniform vec2 position;
uniform float angle;
uniform float amount;
uniform float rand;
uniform int blend;
#define PI 3.14159265359
float random (in vec2 st) { return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123); }
uniform vec2 dimension;
uniform vec2 position;
uniform float angle;
uniform float amount;
uniform float ratio;
uniform float randomAmount;
uniform int blend;
vec3 rgb2hsv(vec3 c) {
#define GRADIENT_LIMIT 128
uniform int gradient_use;
uniform int gradient_blend;
uniform vec4 gradient_color[GRADIENT_LIMIT];
uniform float gradient_time[GRADIENT_LIMIT];
uniform int gradient_keys;
uniform vec4 color0;
uniform vec4 color1;
vec3 rgb2hsv(vec3 c) { #region
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
@ -34,21 +33,21 @@ vec3 rgb2hsv(vec3 c) {
float d = q.x - min(q.w, q.y);
float e = 0.0000000001;
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
}
} #endregion
vec3 hsv2rgb(vec3 c) {
vec3 hsv2rgb(vec3 c) { #region
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
}
} #endregion
float hueDist(float a0, float a1, float t) {
float hueDist(float a0, float a1, float t) { #region
float da = fract(a1 - a0);
float ds = fract(2. * da) - da;
return a0 + ds * t;
}
} #endregion
vec3 hsvMix(vec3 c1, vec3 c2, float t) {
vec3 hsvMix(vec3 c1, vec3 c2, float t) { #region
vec3 h1 = rgb2hsv(c1);
vec3 h2 = rgb2hsv(c2);
@ -58,9 +57,9 @@ vec3 hsvMix(vec3 c1, vec3 c2, float t) {
h.z = mix(h1.z, h2.z, t);
return hsv2rgb(h);
}
} #endregion
vec4 gradientEval(in float prog) {
vec4 gradientEval(in float prog) { #region
vec4 col = vec4(0.);
for(int i = 0; i < GRADIENT_LIMIT; i++) {
@ -88,28 +87,26 @@ vec4 gradientEval(in float prog) {
}
return col;
}
} #endregion
void main() {
vec2 pos = v_vTexcoord - position;
float ratio = dimension.x / dimension.y;
float prog = pos.x * ratio * cos(angle) - pos.y * sin(angle);
float _a = 1. / amount;
float random (in vec2 st) { return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123); }
void main() { #region
vec2 pos = v_vTexcoord - position;
float aspect = dimension.x / dimension.y;
float prog = pos.x * aspect * cos(angle) - pos.y * sin(angle);
float _a = 1. / amount;
float slot = floor(prog / _a);
float ground = (slot + (random(vec2(slot + 0.)) * 2. - 1.) * rand * 0.5 + 0.) * _a;
float ceiling = (slot + (random(vec2(slot + 1.)) * 2. - 1.) * rand * 0.5 + 1.) * _a;
float _s = (prog - ground) / (ceiling - ground);
float slot = floor(prog / _a);
float ground = (slot + (random(vec2(slot + 0.)) * 2. - 1.) * randomAmount * 0.5 + 0.) * _a;
float ceiling = (slot + (random(vec2(slot + 1.)) * 2. - 1.) * randomAmount * 0.5 + 1.) * _a;
float _s = (prog - ground) / (ceiling - ground);
if(gradient_use == 0) {
if(blend == 0) {
gl_FragColor = _s > .5? color0 : color1;
} else
gl_FragColor = vec4(vec3(sin(_s * 2. * PI) * 0.5 + 0.5), 1.);
if(blend == 0) gl_FragColor = _s > ratio? color0 : color1;
else gl_FragColor = vec4(vec3(sin(_s * 2. * PI) * 0.5 + 0.5), 1.);
} else {
if(_s > .5)
gl_FragColor = vec4(gradientEval(random(vec2(slot))).rgb, 1.);
else
gl_FragColor = vec4(gradientEval(random(vec2(slot + 1.))).rgb, 1.);
if(_s > ratio) gl_FragColor = vec4(gradientEval(random(vec2(slot))).rgb, 1.);
else gl_FragColor = vec4(gradientEval(random(vec2(slot + 1.))).rgb, 1.);
}
}
} #endregion