shape improvement

This commit is contained in:
Tanasart 2024-09-14 12:37:19 +07:00
parent a9e1a56b67
commit 213f39dabc
9 changed files with 70 additions and 39 deletions

View file

@ -164,7 +164,7 @@ event_inherited();
var ind = is_array(_spr)? _spr[1] : 0;
var _ss = hght / max(sprite_get_width(spr), sprite_get_height(spr)) * .7;
draw_sprite_ext(spr, ind, ui(16), _ty, _ss, _ss, 0, COLORS._main_icon);
draw_sprite_ext(spr, ind, ui(16), _ty, _ss, _ss, 0, COLORS._main_icon_light);
}
if(_hasKey) {
@ -174,7 +174,7 @@ event_inherited();
var _hx = _dw - ui(6);
var _hy = _ty + ui(1);
draw_set_text(f_p2, fa_right, fa_center, COLORS._main_accent);
draw_set_text(f_p3, fa_right, fa_center, COLORS._main_accent);
var _ktxt = key_get_name(_key.key, _key.modi);
var _tw = string_width(_ktxt);

View file

@ -1,6 +1,8 @@
/// @description init
draw_sprite_stretched(THEME.textbox, 3, dialog_x, dialog_y, dialog_w, dialog_h);
var _dialog_pd = 12;
// draw_sprite_stretched(THEME.textbox, 3, dialog_x, dialog_y, dialog_w, dialog_h);
draw_sprite_stretched(THEME.dialog, 0, dialog_x - _dialog_pd, dialog_y - _dialog_pd, dialog_w + _dialog_pd * 2, dialog_h + _dialog_pd * 2);
WIDGET_CURRENT = tb_search;
tb_search.setFocusHover(sHOVER, sFOCUS);
@ -15,4 +17,5 @@ sc_content.draw(dialog_x, dialog_y + ui(32));
draw_set_color(CDEF.main_dkgrey);
draw_line(dialog_x, dialog_y + ui(32), dialog_x + dialog_w - 1, dialog_y + ui(32));
draw_sprite_stretched(THEME.textbox, 1, dialog_x, dialog_y, dialog_w, dialog_h);
// draw_sprite_stretched_ext(THEME.textbox, 1, dialog_x, dialog_y, dialog_w, dialog_h, c_white);
draw_sprite_stretched_ext(THEME.dialog, 1, dialog_x - _dialog_pd, dialog_y - _dialog_pd, dialog_w + _dialog_pd * 2, dialog_h + _dialog_pd * 2, COLORS._main_icon, .2);

View file

@ -42,7 +42,7 @@
LATEST_VERSION = 1_17_00;
VERSION = 1_17_12_0;
SAVE_VERSION = 1_17_10_0;
VERSION_STRING = MAC? "1.18.002m" : "1.18.rc2.001";
VERSION_STRING = MAC? "1.18.002m" : "1.18.rc2.002";
BUILD_NUMBER = 1_17_12_0;
HOTKEYS = ds_map_create();

View file

@ -37,7 +37,7 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
shape_types = [
"Rectangle", "Diamond", "Trapezoid", "Parallelogram",
-1,
"Ellipse", "Arc", "Donut", "Crescent", "Disk Segment", "Pie",
"Ellipse", "Arc", "Donut", "Crescent", "Disk Segment", "Pie", "Squircle",
-1,
"Regular polygon", "Star", "Cross", "Rounded Cross",
-1,
@ -85,7 +85,7 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
newInput(14, nodeValue_PathNode("Shape path", self, noone))
.setVisible(true, true);
newInput(15, nodeValue_Enum_Scroll("Positioning Mode", self, 0, [ "Area", "Center + Scale", "Full Image" ]))
newInput(15, nodeValue_Enum_Scroll("Positioning Mode", self, 2, [ "Area", "Center + Scale", "Full Image" ]))
newInput(16, nodeValue_Vec2("Center", self, [ DEF_SURF_W / 2, DEF_SURF_H / 2 ] ))
.setUnitRef(onSurfaceSize);
@ -119,12 +119,16 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
newInput(29, nodeValue("Curve", self, CONNECT_TYPE.input, VALUE_TYPE.curve, CURVE_DEF_01));
newInput(30, nodeValue_Bool("Caps", self, false));
newInput(31, nodeValue_Float("Factor", self, 2.5));
newOutput(0, nodeValue_Output("Surface out", self, VALUE_TYPE.surface, noone));
input_display_list = [
["Output", false], 0, 6,
["Transform", false], 15, 3, 16, 17, 19, 28,
["Shape", false], 14, 2, 9, 4, 13, 5, 7, 8, 21, 22, 23, 24, 25, 26, 27,
["Shape", false], 14, 2, 9, 4, 13, 5, 7, 8, 21, 22, 23, 24, 25, 26, 27, 30, 31,
["Render", true], 10, 18,
["Height", true, 12], 29, 20,
["Background", true, 1], 11,
@ -289,6 +293,8 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
inputs[20].setVisible(_path == noone);
inputs[13].setVisible(true);
inputs[15].setVisible(true);
inputs[30].setVisible(false);
inputs[31].setVisible(false);
_outSurf = surface_verify(_outSurf, _dim[0], _dim[1], attrDepth());
use_path = _path != noone && struct_has(_path, "getPointRatio");
@ -427,17 +433,19 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
case "Arc" :
inputs[5].setVisible(true);
inputs[8].setVisible(true);
inputs[30].setVisible(true);
inputs[5].name = "Inner radius";
var ar = _data[8];
var center = degtorad(ar[0] + ar[1]) / 2;
var range = degtorad(ar[0] - ar[1]) / 2;
var range = abs(degtorad(ar[0] - ar[1]) / 2);
shader_set_i("shape", 4);
shader_set_f("angle", center);
shader_set_i("shape", 4);
shader_set_i("endcap", _data[30]);
shader_set_f("angle", center);
shader_set_f("angle_range", [ sin(range), cos(range) ] );
shader_set_f("inner", _data[5] / 2);
shader_set_f("inner", _data[5] / 2);
break;
case "Teardrop" :
@ -549,6 +557,14 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
shader_set_f("teethAngle", _data[27]);
break;
case "Squircle" :
inputs[31].setVisible(true);
shader_set_i("shape", 19);
shader_set_f("squircle_factor", abs(_data[31]));
break;
}
shader_set_f("dimension", _dim);

View file

@ -712,6 +712,7 @@ function Panel_Menu() : PanelContent() constructor {
tby0 = ty0;
}
if(full_name) tw += string_width(".pxc");
var _b = buttonInstant(THEME.button_hide_fill, tbx0, tby0, tw, th, [mx, my], pFOCUS, pHOVER);
var _hov = _b > 0;

View file

@ -38,6 +38,7 @@ uniform vec2 center;
uniform vec2 scale;
uniform vec2 trep;
uniform float shapeScale;
uniform int endcap;
uniform int teeth;
uniform vec2 teethSize;
@ -45,6 +46,7 @@ uniform float teethAngle;
uniform vec2 arrow;
uniform float arrow_head;
uniform float squircle_factor;
uniform vec4 bgColor;
@ -185,10 +187,14 @@ float sdStar(in vec2 p, in float r, in int n, in float m, in float ang) { //m=[2
// sca is the sin/cos of the orientation
// scb is the sin/cos of the aperture
float sdArc( in vec2 p, in vec2 sca, in vec2 scb, in float ra, in float rb ) {
p = -p;
p *= mat2(sca.x, sca.y, -sca.y, sca.x);
p.x = abs(p.x);
float k = (scb.y * p.x > scb.x * p.y) ? dot(p.xy,scb) : length(p);
return sqrt( dot(p, p) + ra * ra - 2.0 * ra * k ) - rb;
bool k = scb.y * p.x > scb.x * p.y;
if(endcap == 1) return (k? length(p - scb * ra) : abs(length(p) - ra)) - rb;
return (k? 1. : abs(length(p) - ra)) - rb;
}
float sdSegment( in vec2 p, in vec2 a, in vec2 b ) {
@ -422,21 +428,22 @@ void main() {
d = sdStar( coord, 0.9 - corner, sides, 2. + inner * (float(sides) - 2.), angle );
d -= corner;
} else if(shape == 4) { d = sdArc( coord, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner ); }
else if(shape == 5) { d = sdTearDrop( coord + vec2(0., 0.5), stRad, edRad, 1. ); }
else if(shape == 6) { d = sdCross( coord, vec2(1. + corner, outer), corner ); }
else if(shape == 7) { d = sdVesica( coord, inner, outer ); }
else if(shape == 8) { d = sdCrescent( coord, inner, outer, angle ); }
else if(shape == 9) { d = sdDonut( coord, inner ); }
else if(shape == 10) { d = sdRhombus( coord, vec2(1. - corner) ) - corner; }
else if(shape == 11) { d = sdTrapezoid( coord, trep.x - corner, trep.y - corner, 1. - corner ) - corner; }
else if(shape == 12) { d = sdParallelogram( coord, 1. - corner - parall, 1. - corner, parall) - corner; }
else if(shape == 13) { d = sdHeart( coord ); }
else if(shape == 14) { d = sdCutDisk( coord, 1., inner ); }
else if(shape == 15) { d = sdPie( coord, vec2(sin(angle), cos(angle)), 1. ); }
else if(shape == 16) { d = sdRoundedCross( coord, 1. - corner ) - corner; }
else if(shape == 17) { d = sdArrow( coord, arrow.x, arrow.y, arrow_head); }
else if(shape == 18) { d = sdGear( coord, inner, teeth, teethSize, teethAngle); }
} else if(shape == 4) { d = sdArc( coord, vec2(sin(angle), cos(angle)), angle_range, 1. - inner, inner ); }
else if(shape == 5) { d = sdTearDrop( coord + vec2(0., 0.5), stRad, edRad, 1. ); }
else if(shape == 6) { d = sdCross( coord, vec2(1. + corner, outer), corner ); }
else if(shape == 7) { d = sdVesica( coord, inner, outer ); }
else if(shape == 8) { d = sdCrescent( coord, inner, outer, angle ); }
else if(shape == 9) { d = sdDonut( coord, inner ); }
else if(shape == 10) { d = sdRhombus( coord, vec2(1. - corner) ) - corner; }
else if(shape == 11) { d = sdTrapezoid( coord, trep.x - corner, trep.y - corner, 1. - corner ) - corner; }
else if(shape == 12) { d = sdParallelogram( coord, 1. - corner - parall, 1. - corner, parall) - corner; }
else if(shape == 13) { d = sdHeart( coord ); }
else if(shape == 14) { d = sdCutDisk( coord, 1., inner ); }
else if(shape == 15) { d = sdPie( coord, vec2(sin(angle), cos(angle)), 1. ); }
else if(shape == 16) { d = sdRoundedCross( coord, 1. - corner ) - corner; }
else if(shape == 17) { d = sdArrow( coord, arrow.x, arrow.y, arrow_head); }
else if(shape == 18) { d = sdGear( coord, inner, teeth, teethSize, teethAngle); }
else if(shape == 19) { d = pow(pow(abs(coord.x), squircle_factor) + pow(abs(coord.y), squircle_factor), 1. / squircle_factor) - 1.; }
float cc, color = 0.;

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 B

View file

@ -22,6 +22,7 @@
{"$GMSpriteFrame":"","%Name":"83cbb736-e130-438e-b366-d4834ff26292","name":"83cbb736-e130-438e-b366-d4834ff26292","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"c993ff0d-daf9-4950-9c17-252474cc9195","name":"c993ff0d-daf9-4950-9c17-252474cc9195","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"41c086f9-4334-4833-a514-0a6c3194841b","name":"41c086f9-4334-4833-a514-0a6c3194841b","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"89c97a04-3af5-4197-9771-499813b2fd32","name":"89c97a04-3af5-4197-9771-499813b2fd32","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"1b712b1b-6360-41cb-8ff2-e1251fd32421","name":"1b712b1b-6360-41cb-8ff2-e1251fd32421","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"d2df5faf-acdc-4267-9fc3-e2587ea46ffb","name":"d2df5faf-acdc-4267-9fc3-e2587ea46ffb","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"9fbc0143-c73b-4d43-9ab1-2b54fdf9dfa0","name":"9fbc0143-c73b-4d43-9ab1-2b54fdf9dfa0","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
@ -67,7 +68,7 @@
},
"eventStubScript":null,
"eventToFunction":{},
"length":19.0,
"length":20.0,
"lockOrigin":false,
"moments":{
"$KeyframeStore<MomentsEventKeyframe>":"",
@ -116,33 +117,36 @@
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"41c086f9-4334-4833-a514-0a6c3194841b","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"4c444757-09fd-40d2-a457-c3a3ff5cc662","IsCreationKey":false,"Key":9.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"89c97a04-3af5-4197-9771-499813b2fd32","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"a574c8c1-ff17-4631-b4f2-f91557514995","IsCreationKey":false,"Key":10.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"1b712b1b-6360-41cb-8ff2-e1251fd32421","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"45408932-cb01-462e-9fee-4188d46331b4","IsCreationKey":false,"Key":10.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"45408932-cb01-462e-9fee-4188d46331b4","IsCreationKey":false,"Key":11.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"d2df5faf-acdc-4267-9fc3-e2587ea46ffb","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"12a7f51a-f928-49aa-8f69-1261ddf60d83","IsCreationKey":false,"Key":11.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"12a7f51a-f928-49aa-8f69-1261ddf60d83","IsCreationKey":false,"Key":12.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"9fbc0143-c73b-4d43-9ab1-2b54fdf9dfa0","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"f2a3bc4d-69bd-4b2a-95dc-b8b4095852ec","IsCreationKey":false,"Key":12.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"f2a3bc4d-69bd-4b2a-95dc-b8b4095852ec","IsCreationKey":false,"Key":13.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"68cedd47-7826-45d0-936a-09d3f0b2514e","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"9b4d9126-b4d4-4c7a-82ce-cce6f63de1b1","IsCreationKey":false,"Key":13.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"9b4d9126-b4d4-4c7a-82ce-cce6f63de1b1","IsCreationKey":false,"Key":14.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"d327df90-02a8-4278-a2f0-bad7924956ff","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"08e182fb-9797-4ce1-b4bd-d39862c036c0","IsCreationKey":false,"Key":14.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"08e182fb-9797-4ce1-b4bd-d39862c036c0","IsCreationKey":false,"Key":15.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"4dd803df-0824-47d6-a1d9-a4c0b94aa30f","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"7b49830e-1876-4d95-99a2-c9a3f8401044","IsCreationKey":false,"Key":15.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"7b49830e-1876-4d95-99a2-c9a3f8401044","IsCreationKey":false,"Key":16.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"60deee41-cb26-435b-b3dd-7f03e79b3f50","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"ebd5e057-56d6-4239-9544-690c95b076f6","IsCreationKey":false,"Key":16.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"ebd5e057-56d6-4239-9544-690c95b076f6","IsCreationKey":false,"Key":17.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"49f66653-48bb-46ca-adb5-39604325a9d1","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"cd22fe67-e516-45a9-96de-b624bf5c6754","IsCreationKey":false,"Key":17.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"cd22fe67-e516-45a9-96de-b624bf5c6754","IsCreationKey":false,"Key":18.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"71e478b1-ed0d-4f73-b942-57d5680a935e","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"e6879ae7-52d0-4dfe-89fe-0ec9d4d53e26","IsCreationKey":false,"Key":18.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
},"Disabled":false,"id":"e6879ae7-52d0-4dfe-89fe-0ec9d4d53e26","IsCreationKey":false,"Key":19.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange":null,