- [Line] Fix line not drawing with polygon shape.
|
@ -732,6 +732,7 @@
|
||||||
{"name":"sh_blur_zoom","order":5,"path":"shaders/sh_blur_zoom/sh_blur_zoom.yy",},
|
{"name":"sh_blur_zoom","order":5,"path":"shaders/sh_blur_zoom/sh_blur_zoom.yy",},
|
||||||
{"name":"node_isosurf","order":3,"path":"scripts/node_isosurf/node_isosurf.yy",},
|
{"name":"node_isosurf","order":3,"path":"scripts/node_isosurf/node_isosurf.yy",},
|
||||||
{"name":"__add_node_item","order":13,"path":"scripts/__add_node_item/__add_node_item.yy",},
|
{"name":"__add_node_item","order":13,"path":"scripts/__add_node_item/__add_node_item.yy",},
|
||||||
|
{"name":"s_node_shape_poly_type","order":22,"path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},
|
||||||
{"name":"node_VFX_renderer","order":2,"path":"scripts/node_VFX_renderer/node_VFX_renderer.yy",},
|
{"name":"node_VFX_renderer","order":2,"path":"scripts/node_VFX_renderer/node_VFX_renderer.yy",},
|
||||||
{"name":"s_node_pb_fx_stack","order":2,"path":"sprites/s_node_pb_fx_stack/s_node_pb_fx_stack.yy",},
|
{"name":"s_node_pb_fx_stack","order":2,"path":"sprites/s_node_pb_fx_stack/s_node_pb_fx_stack.yy",},
|
||||||
{"name":"fd_draw_sprite_to_collision_mask_surface","order":1,"path":"scripts/fd_draw_sprite_to_collision_mask_surface/fd_draw_sprite_to_collision_mask_surface.yy",},
|
{"name":"fd_draw_sprite_to_collision_mask_surface","order":1,"path":"scripts/fd_draw_sprite_to_collision_mask_surface/fd_draw_sprite_to_collision_mask_surface.yy",},
|
||||||
|
|
|
@ -981,6 +981,7 @@
|
||||||
{"id":{"name":"sh_blur_zoom","path":"shaders/sh_blur_zoom/sh_blur_zoom.yy",},},
|
{"id":{"name":"sh_blur_zoom","path":"shaders/sh_blur_zoom/sh_blur_zoom.yy",},},
|
||||||
{"id":{"name":"node_isosurf","path":"scripts/node_isosurf/node_isosurf.yy",},},
|
{"id":{"name":"node_isosurf","path":"scripts/node_isosurf/node_isosurf.yy",},},
|
||||||
{"id":{"name":"__add_node_item","path":"scripts/__add_node_item/__add_node_item.yy",},},
|
{"id":{"name":"__add_node_item","path":"scripts/__add_node_item/__add_node_item.yy",},},
|
||||||
|
{"id":{"name":"s_node_shape_poly_type","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},
|
||||||
{"id":{"name":"node_VFX_renderer","path":"scripts/node_VFX_renderer/node_VFX_renderer.yy",},},
|
{"id":{"name":"node_VFX_renderer","path":"scripts/node_VFX_renderer/node_VFX_renderer.yy",},},
|
||||||
{"id":{"name":"s_node_pb_fx_stack","path":"sprites/s_node_pb_fx_stack/s_node_pb_fx_stack.yy",},},
|
{"id":{"name":"s_node_pb_fx_stack","path":"sprites/s_node_pb_fx_stack/s_node_pb_fx_stack.yy",},},
|
||||||
{"id":{"name":"fd_draw_sprite_to_collision_mask_surface","path":"scripts/fd_draw_sprite_to_collision_mask_surface/fd_draw_sprite_to_collision_mask_surface.yy",},},
|
{"id":{"name":"fd_draw_sprite_to_collision_mask_surface","path":"scripts/fd_draw_sprite_to_collision_mask_surface/fd_draw_sprite_to_collision_mask_surface.yy",},},
|
||||||
|
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
@ -27,8 +27,9 @@ if(tb.slide_range != noone)
|
||||||
cur_val = clamp(cur_val, tb.curr_range[0], tb.curr_range[1]);
|
cur_val = clamp(cur_val, tb.curr_range[0], tb.curr_range[1]);
|
||||||
|
|
||||||
var _val = value_snap(cur_val, _s);
|
var _val = value_snap(cur_val, _s);
|
||||||
if(tb.slide_int)
|
if(tb.slide_int) _val = round(_val);
|
||||||
_val = round(_val);
|
|
||||||
|
if(abs(_val) < _s * 4) _val = 0;
|
||||||
|
|
||||||
tb._input_text = string_real(_val);
|
tb._input_text = string_real(_val);
|
||||||
if(tb.apply()) UNDO_HOLDING = true;
|
if(tb.apply()) UNDO_HOLDING = true;
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
function Mesh() constructor {
|
function Mesh() constructor {
|
||||||
triangles = [];
|
triangles = [];
|
||||||
|
center = [ 0, 0 ];
|
||||||
|
|
||||||
static getRandomPoint = function(seed) {
|
static getRandomPoint = function(seed) { #region
|
||||||
random_set_seed(seed);
|
random_set_seed(seed);
|
||||||
if(array_length(triangles) == 0) return [ 0, 0 ];
|
if(array_length(triangles) == 0) return [ 0, 0 ];
|
||||||
|
|
||||||
|
@ -17,9 +18,9 @@ function Mesh() constructor {
|
||||||
var _y = (1 - sqrt(a1)) * p0.y + (sqrt(a1) * (1 - a2)) * p1.y + (sqrt(a1) * a2) * p2.y;
|
var _y = (1 - sqrt(a1)) * p0.y + (sqrt(a1) * (1 - a2)) * p1.y + (sqrt(a1) * a2) * p2.y;
|
||||||
|
|
||||||
return new __vec2( _x, _y );
|
return new __vec2( _x, _y );
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
static draw = function(_x, _y, _s) {
|
static draw = function(_x, _y, _s) { #region
|
||||||
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
||||||
var t = triangles[i];
|
var t = triangles[i];
|
||||||
|
|
||||||
|
@ -27,9 +28,9 @@ function Mesh() constructor {
|
||||||
draw_line(_x + t[1].x * _s, _y + t[1].y * _s, _x + t[2].x * _s, _y + t[2].y * _s);
|
draw_line(_x + t[1].x * _s, _y + t[1].y * _s, _x + t[2].x * _s, _y + t[2].y * _s);
|
||||||
draw_line(_x + t[0].x * _s, _y + t[0].y * _s, _x + t[2].x * _s, _y + t[2].y * _s);
|
draw_line(_x + t[0].x * _s, _y + t[0].y * _s, _x + t[2].x * _s, _y + t[2].y * _s);
|
||||||
}
|
}
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
static pointIn = function(_x, _y) {
|
static pointIn = function(_x, _y) { #region
|
||||||
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
||||||
var t = triangles[i];
|
var t = triangles[i];
|
||||||
|
|
||||||
|
@ -38,9 +39,9 @@ function Mesh() constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
static mergePath = function() {
|
static mergePath = function() { #region
|
||||||
if(array_length(triangles) == 0) return [];
|
if(array_length(triangles) == 0) return [];
|
||||||
|
|
||||||
var segments = [];
|
var segments = [];
|
||||||
|
@ -95,9 +96,9 @@ function Mesh() constructor {
|
||||||
|
|
||||||
ds_map_destroy(pointsPairs);
|
ds_map_destroy(pointsPairs);
|
||||||
return path;
|
return path;
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
static clone = function() {
|
static clone = function() { #region
|
||||||
var msh = new Mesh();
|
var msh = new Mesh();
|
||||||
|
|
||||||
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
||||||
|
@ -108,8 +109,30 @@ function Mesh() constructor {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
msh.center = [ center[0], center[1] ];
|
||||||
|
|
||||||
return msh;
|
return msh;
|
||||||
|
} #endregion
|
||||||
|
|
||||||
|
static calcCoM = function() { #region
|
||||||
|
var _ax = 0, _ay = 0;
|
||||||
|
var _p = 0;
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
||||||
|
var _tr = triangles[i];
|
||||||
|
|
||||||
|
for( var j = 0; j < 3; j++ ) {
|
||||||
|
_ax += _tr[j].x;
|
||||||
|
_ay += _tr[j].y;
|
||||||
|
_p++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
center = [ 0, 0 ];
|
||||||
|
if(_p == 0) return;
|
||||||
|
|
||||||
|
center = [ _ax / _p, _ay / _p ];
|
||||||
|
} #endregion
|
||||||
|
|
||||||
static serialize = function() { return ""; }
|
static serialize = function() { return ""; }
|
||||||
static deserialize = function(s) { return self; }
|
static deserialize = function(s) { return self; }
|
||||||
|
|
|
@ -25,7 +25,7 @@ function Node_VFX_effector(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
inputs[| 0] = nodeValue("Particles", self, JUNCTION_CONNECT.input, VALUE_TYPE.particle, -1 )
|
inputs[| 0] = nodeValue("Particles", self, JUNCTION_CONNECT.input, VALUE_TYPE.particle, -1 )
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16, 4, 4, AREA_SHAPE.rectangle ])
|
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area)
|
.setDisplay(VALUE_DISPLAY.area)
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ function Path() constructor {
|
||||||
function PathSegment() : Path() constructor {
|
function PathSegment() : Path() constructor {
|
||||||
segments = [];
|
segments = [];
|
||||||
|
|
||||||
static getBoundary = function() {
|
static getBoundary = function() { #region
|
||||||
if(getSegmentCount() == 0) return new BoundingBox( 0, 0, 0, 0 );
|
if(getSegmentCount() == 0) return new BoundingBox( 0, 0, 0, 0 );
|
||||||
|
|
||||||
var minx = segments[0].x, maxx = segments[0].x;
|
var minx = segments[0].x, maxx = segments[0].x;
|
||||||
|
@ -38,11 +38,12 @@ function PathSegment() : Path() constructor {
|
||||||
maxy = max(maxy, s.y);
|
maxy = max(maxy, s.y);
|
||||||
}
|
}
|
||||||
return new BoundingBox( minx, miny, maxx, maxy );
|
return new BoundingBox( minx, miny, maxx, maxy );
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
static getSegmentCount = function() { return array_length(segments); }
|
static getSegmentCount = function() { return array_length(segments); }
|
||||||
static getLineCount = function() { return 1; }
|
static getLineCount = function() { return 1; }
|
||||||
|
|
||||||
static setSegment = function(segment) {
|
static setSegment = function(segment) { #region
|
||||||
self.segments = segment;
|
self.segments = segment;
|
||||||
lengths = [];
|
lengths = [];
|
||||||
lengthAccs = [];
|
lengthAccs = [];
|
||||||
|
@ -53,33 +54,40 @@ function PathSegment() : Path() constructor {
|
||||||
np = segment[i];
|
np = segment[i];
|
||||||
|
|
||||||
if(i) {
|
if(i) {
|
||||||
lengths[i] = point_distance(op.x, op.y, np.x, np.y);
|
lengths[i - 1] = point_distance(op.x, op.y, np.x, np.y);
|
||||||
lengthTotal += lengths[i];
|
lengthTotal += lengths[i - 1];
|
||||||
lengthAccs[i] = lengthTotal;
|
lengthAccs[i - 1] = lengthTotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
op = np;
|
op = np;
|
||||||
}
|
}
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
static getPointDistance = function(_dist) {
|
static getPointDistance = function(_dist, _ind = 0, out = undefined) { #region
|
||||||
for( var i = 1; i < array_length(lengths); i += 1 ) {
|
if(out == undefined) out = new __vec2(); else { out.x = 0; out.y = 0; }
|
||||||
|
|
||||||
|
for( var i = 0; i < array_length(lengths); i++ ) {
|
||||||
if(_dist <= lengths[i]) {
|
if(_dist <= lengths[i]) {
|
||||||
var rat = _dist / lengths[i];
|
var rat = _dist / lengths[i];
|
||||||
return segments[i - 1].lerpTo(segments[i], rat);
|
|
||||||
|
out.x = lerp(segments[i].x, segments[i + 1].x, rat);
|
||||||
|
out.y = lerp(segments[i].y, segments[i + 1].y, rat);
|
||||||
|
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
_dist -= lengths[i];
|
_dist -= lengths[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return new __vec2(0, 0);
|
out.x = segments[i].x;
|
||||||
}
|
out.y = segments[i].y;
|
||||||
|
|
||||||
static getPointRatio = function(_rat) {
|
return out;
|
||||||
return getPointDistance(frac(_rat) * lengthTotal);
|
} #endregion
|
||||||
}
|
|
||||||
|
|
||||||
static getTangentRatio = function(_rat) {
|
static getPointRatio = function(_rat, _ind = 0, out = undefined) { return getPointDistance(frac(_rat) * lengthTotal, _ind, out); }
|
||||||
|
|
||||||
|
static getTangentRatio = function(_rat) { #region
|
||||||
_rat = frac(_rat);
|
_rat = frac(_rat);
|
||||||
var l = _rat * lengthTotal;
|
var l = _rat * lengthTotal;
|
||||||
|
|
||||||
|
@ -93,5 +101,19 @@ function PathSegment() : Path() constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
} #endregion
|
||||||
|
|
||||||
|
static draw = function(_x, _y, _s) { #region
|
||||||
|
var ox, oy, nx, ny;
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(segments); i < n; i++ ) {
|
||||||
|
nx = _x + segments[i].x * _s;
|
||||||
|
ny = _y + segments[i].y * _s;
|
||||||
|
|
||||||
|
if(i) draw_line(ox, oy, nx, ny);
|
||||||
|
|
||||||
|
ox = nx;
|
||||||
|
oy = ny;
|
||||||
}
|
}
|
||||||
|
} #endregion
|
||||||
}
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
triangles,
|
triangles,
|
||||||
}
|
}
|
||||||
|
|
||||||
function SHAPE_rectangle(_sca) {
|
function SHAPE_rectangle(_sca) { #region
|
||||||
var triangles = [
|
var triangles = [
|
||||||
[ new __vec2(-_sca[0], -_sca[1]), new __vec2( _sca[0], -_sca[1]), new __vec2(-_sca[0], _sca[1]) ],
|
[ new __vec2(-_sca[0], -_sca[1]), new __vec2( _sca[0], -_sca[1]), new __vec2(-_sca[0], _sca[1]) ],
|
||||||
[ new __vec2( _sca[0], -_sca[1]), new __vec2(-_sca[0], _sca[1]), new __vec2( _sca[0], _sca[1]) ],
|
[ new __vec2( _sca[0], -_sca[1]), new __vec2(-_sca[0], _sca[1]), new __vec2( _sca[0], _sca[1]) ],
|
||||||
|
@ -16,12 +16,12 @@
|
||||||
new __vec2(-_sca[0], -_sca[1]) ];
|
new __vec2(-_sca[0], -_sca[1]) ];
|
||||||
|
|
||||||
return [
|
return [
|
||||||
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
[ { type: SHAPE_TYPE.triangles, triangles: triangles } ],
|
||||||
segment
|
segment
|
||||||
];
|
];
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function SHAPE_circle(_sca, data = {}) {
|
function SHAPE_circle(_sca, data = {}) { #region
|
||||||
var prec = max(3, data.side);
|
var prec = max(3, data.side);
|
||||||
var triangles = [];
|
var triangles = [];
|
||||||
var ang = 360 / prec;
|
var ang = 360 / prec;
|
||||||
|
@ -43,9 +43,9 @@
|
||||||
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
||||||
segment
|
segment
|
||||||
];
|
];
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function SHAPE_star(_sca, data = {}) {
|
function SHAPE_star(_sca, data = {}) { #region
|
||||||
var prec = max(3, data.side);
|
var prec = max(3, data.side);
|
||||||
var inner = data.inner;
|
var inner = data.inner;
|
||||||
var triangles = [];
|
var triangles = [];
|
||||||
|
@ -74,9 +74,9 @@
|
||||||
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
||||||
segment
|
segment
|
||||||
];
|
];
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function SHAPE_capsule(_sca, data = {}) {
|
function SHAPE_capsule(_sca, data = {}) { #region
|
||||||
var rad = data.radius;
|
var rad = data.radius;
|
||||||
var prec = max(2, data.side);
|
var prec = max(2, data.side);
|
||||||
var hh = _sca[1] * rad;
|
var hh = _sca[1] * rad;
|
||||||
|
@ -143,9 +143,9 @@
|
||||||
shapes,
|
shapes,
|
||||||
segment
|
segment
|
||||||
];
|
];
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function SHAPE_ring(_sca, data = {}) {
|
function SHAPE_ring(_sca, data = {}) { #region
|
||||||
var prec = max(3, data.side);
|
var prec = max(3, data.side);
|
||||||
var inner = data.inner;
|
var inner = data.inner;
|
||||||
var triangles = [];
|
var triangles = [];
|
||||||
|
@ -176,9 +176,9 @@
|
||||||
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
||||||
segment
|
segment
|
||||||
];
|
];
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function SHAPE_gear(_sca, data = {}) {
|
function SHAPE_gear(_sca, data = {}) { #region
|
||||||
var teeth = max(3, data.teeth);
|
var teeth = max(3, data.teeth);
|
||||||
var teethH = data.teethH;
|
var teethH = data.teethH;
|
||||||
var teethT = data.teethT;
|
var teethT = data.teethT;
|
||||||
|
@ -229,9 +229,9 @@
|
||||||
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
||||||
segment
|
segment
|
||||||
];
|
];
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function SHAPE_cross(_sca, data = {}) {
|
function SHAPE_cross(_sca, data = {}) { #region
|
||||||
var inner = data.inner;
|
var inner = data.inner;
|
||||||
var triangles = [];
|
var triangles = [];
|
||||||
var segment = [];
|
var segment = [];
|
||||||
|
@ -271,9 +271,9 @@
|
||||||
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
||||||
segment
|
segment
|
||||||
];
|
];
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function SHAPE_arc(_sca, data = {}) {
|
function SHAPE_arc(_sca, data = {}) { #region
|
||||||
var prec = max(3, data.side);
|
var prec = max(3, data.side);
|
||||||
var inner = data.inner;
|
var inner = data.inner;
|
||||||
var radRan = data.radRan;
|
var radRan = data.radRan;
|
||||||
|
@ -364,6 +364,6 @@
|
||||||
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
[{ type: SHAPE_TYPE.triangles, triangles: triangles }],
|
||||||
segment
|
segment
|
||||||
];
|
];
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
#endregion
|
#endregion
|
|
@ -10,7 +10,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co
|
||||||
inputs[| 2] = nodeValue("Spawn amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 2, 2 ], "Amount of particle spawn in that frame." )
|
inputs[| 2] = nodeValue("Spawn amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 2, 2 ], "Amount of particle spawn in that frame." )
|
||||||
.setDisplay(VALUE_DISPLAY.range, { linked : true });
|
.setDisplay(VALUE_DISPLAY.range, { linked : true });
|
||||||
|
|
||||||
inputs[| 3] = nodeValue("Spawn area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ] )
|
inputs[| 3] = nodeValue("Spawn area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA )
|
||||||
.setDisplay(VALUE_DISPLAY.area);
|
.setDisplay(VALUE_DISPLAY.area);
|
||||||
|
|
||||||
inputs[| 4] = nodeValue("Spawn distribution", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
|
inputs[| 4] = nodeValue("Spawn distribution", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
|
||||||
|
|
|
@ -17,6 +17,8 @@ enum AREA_INDEX {
|
||||||
shape
|
shape
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#macro DEF_AREA [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle, AREA_MODE.area ]
|
||||||
|
|
||||||
function areaBox(_onModify, _unit = noone) : widget() constructor {
|
function areaBox(_onModify, _unit = noone) : widget() constructor {
|
||||||
onModify = _onModify;
|
onModify = _onModify;
|
||||||
unit = _unit;
|
unit = _unit;
|
||||||
|
@ -125,7 +127,7 @@ function areaBox(_onModify, _unit = noone) : widget() constructor {
|
||||||
y = _y;
|
y = _y;
|
||||||
w = 0;
|
w = 0;
|
||||||
h = ui(204);
|
h = ui(204);
|
||||||
mode = _display_data.area_type;
|
mode = array_safe_get(_data, 5);
|
||||||
|
|
||||||
var _bx = _x - ui(48);
|
var _bx = _x - ui(48);
|
||||||
var _by = _y + ui(64 - 48);
|
var _by = _y + ui(64 - 48);
|
||||||
|
@ -219,7 +221,7 @@ function areaBox(_onModify, _unit = noone) : widget() constructor {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_display_data.area_type = (mode + 1) % 3;
|
onModify(5, (mode + 1) % 3);
|
||||||
} #endregion
|
} #endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#macro AREA_DEF [ 16, 16, 4, 4, AREA_SHAPE.rectangle ]
|
|
||||||
|
|
||||||
enum AREA_DISTRIBUTION {
|
enum AREA_DISTRIBUTION {
|
||||||
area,
|
area,
|
||||||
border
|
border
|
||||||
|
|
|
@ -51,7 +51,8 @@ function array_resize_fill(arr, size, fill = 0) { #region
|
||||||
|
|
||||||
enum ARRAY_OVERFLOW {
|
enum ARRAY_OVERFLOW {
|
||||||
_default,
|
_default,
|
||||||
loop
|
loop,
|
||||||
|
pingpong
|
||||||
}
|
}
|
||||||
|
|
||||||
function array_safe_get(arr, index, def = 0, overflow = ARRAY_OVERFLOW._default) { #region
|
function array_safe_get(arr, index, def = 0, overflow = ARRAY_OVERFLOW._default) { #region
|
||||||
|
@ -59,15 +60,26 @@ function array_safe_get(arr, index, def = 0, overflow = ARRAY_OVERFLOW._default)
|
||||||
if(!is_array(arr)) return def;
|
if(!is_array(arr)) return def;
|
||||||
if(is_array(index)) return def;
|
if(is_array(index)) return def;
|
||||||
|
|
||||||
if(overflow == ARRAY_OVERFLOW.loop) {
|
|
||||||
var len = array_length(arr);
|
var len = array_length(arr);
|
||||||
|
if(len == 0) return def;
|
||||||
|
|
||||||
|
if(overflow == ARRAY_OVERFLOW.loop) {
|
||||||
if(index < 0)
|
if(index < 0)
|
||||||
index = len - safe_mod(abs(index), len);
|
index = len - safe_mod(abs(index), len);
|
||||||
index = safe_mod(index, len);
|
index = index % len;
|
||||||
|
|
||||||
|
} else if(overflow == ARRAY_OVERFLOW.pingpong) {
|
||||||
|
if(index < 0) index = len - safe_mod(abs(index), len);
|
||||||
|
|
||||||
|
var _plen = len * 2 - 1;
|
||||||
|
index = index % _plen;
|
||||||
|
|
||||||
|
if(index >= len)
|
||||||
|
index = _plen - index;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(index < 0) return def;
|
if(index < 0) return def;
|
||||||
if(index >= array_length(arr)) return def;
|
if(index >= len) return def;
|
||||||
return arr[index] == undefined? def : arr[index];
|
return arr[index] == undefined? def : arr[index];
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
|
|
@ -15,28 +15,51 @@ function Node_MK_Delay_Machine(_x, _y, _group = noone) : Node(_x, _y, _group) co
|
||||||
|
|
||||||
inputs[| 4] = nodeValue("Alpha over Delay", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_11);
|
inputs[| 4] = nodeValue("Alpha over Delay", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_11);
|
||||||
|
|
||||||
|
inputs[| 5] = nodeValue("Palette Select", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Loop", "Pingpong", "Random" ]);
|
||||||
|
|
||||||
|
inputs[| 6] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random())
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
outputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
input_display_list = [ 0,
|
input_display_list = [ 0,
|
||||||
["Delay", false], 1, 2,
|
["Delay", false], 1, 2,
|
||||||
["Render", false], 3, 4,
|
["Render", false], 3, 5, 6, 4,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
insp2UpdateTooltip = "Clear cache";
|
||||||
|
insp2UpdateIcon = [ THEME.cache, 0, COLORS._main_icon ];
|
||||||
|
|
||||||
|
static onInspector2Update = function() { clearCache(); }
|
||||||
|
|
||||||
|
static step = function() {
|
||||||
|
var _psel = getInputData(5);
|
||||||
|
|
||||||
|
inputs[| 6].setVisible(_psel == 2);
|
||||||
|
}
|
||||||
|
|
||||||
static update = function() {
|
static update = function() {
|
||||||
var _surf = getInputData(0);
|
var _surf = getInputData(0);
|
||||||
var _amo = getInputData(1);
|
var _amo = getInputData(1);
|
||||||
var _frm = getInputData(2);
|
var _frm = getInputData(2);
|
||||||
var _pal = getInputData(3);
|
var _pal = getInputData(3);
|
||||||
var _alpC = getInputData(4);
|
var _alpC = getInputData(4);
|
||||||
|
var _psel = getInputData(5);
|
||||||
|
var _seed = getInputData(6);
|
||||||
|
|
||||||
cacheCurrentFrame(_surf);
|
cacheCurrentFrame(_surf);
|
||||||
|
|
||||||
|
random_set_seed(_seed);
|
||||||
|
|
||||||
var _sw = surface_get_width_safe(_surf);
|
var _sw = surface_get_width_safe(_surf);
|
||||||
var _sh = surface_get_height_safe(_surf);
|
var _sh = surface_get_height_safe(_surf);
|
||||||
|
|
||||||
var _outSurf = outputs[| 0].getValue();
|
var _outSurf = outputs[| 0].getValue();
|
||||||
_outSurf = surface_verify(_outSurf, _sw, _sh);
|
_outSurf = surface_verify(_outSurf, _sw, _sh);
|
||||||
|
|
||||||
|
var cc, aa;
|
||||||
|
var _psiz = array_length(_pal) - 1;
|
||||||
|
|
||||||
surface_set_target(_outSurf);
|
surface_set_target(_outSurf);
|
||||||
DRAW_CLEAR
|
DRAW_CLEAR
|
||||||
|
|
||||||
|
@ -45,8 +68,13 @@ function Node_MK_Delay_Machine(_x, _y, _group = noone) : Node(_x, _y, _group) co
|
||||||
var _s = array_safe_get(cached_output, _ff);
|
var _s = array_safe_get(cached_output, _ff);
|
||||||
if(!is_surface(_s)) continue;
|
if(!is_surface(_s)) continue;
|
||||||
|
|
||||||
var cc = array_safe_get(_pal, i, c_white, ARRAY_OVERFLOW.loop);
|
switch(_psel) {
|
||||||
var aa = eval_curve_x(_alpC, 1 - i / _amo);
|
case 0 : cc = array_safe_get(_pal, i, c_white, ARRAY_OVERFLOW.loop); break;
|
||||||
|
case 1 : cc = array_safe_get(_pal, i, c_white, ARRAY_OVERFLOW.pingpong); break;
|
||||||
|
case 2 : cc = array_safe_get(_pal, irandom(_psiz), c_white); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
aa = eval_curve_x(_alpC, 1 - i / _amo);
|
||||||
|
|
||||||
draw_surface_ext(_s, 0, 0, 1, 1, 0, cc, aa);
|
draw_surface_ext(_s, 0, 0, 1, 1, 0, cc, aa);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ function Node_FLIP_Wall(_x, _y, _group = noone) : Node(_x, _y, _group) construct
|
||||||
inputs[| 0] = nodeValue("Domain", self, JUNCTION_CONNECT.input, VALUE_TYPE.fdomain, noone )
|
inputs[| 0] = nodeValue("Domain", self, JUNCTION_CONNECT.input, VALUE_TYPE.fdomain, noone )
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16, 4, 4, AREA_SHAPE.rectangle ])
|
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA )
|
||||||
.setDisplay(VALUE_DISPLAY.area);
|
.setDisplay(VALUE_DISPLAY.area);
|
||||||
|
|
||||||
input_display_list = [ 0,
|
input_display_list = [ 0,
|
||||||
|
|
|
@ -5,7 +5,7 @@ function Node_Camera(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
|
||||||
inputs[| 0] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
inputs[| 0] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
onSurfaceSize = function() { return surface_get_dimension(getInputData(0)); };
|
onSurfaceSize = function() { return surface_get_dimension(getInputData(0)); };
|
||||||
inputs[| 1] = nodeValue("Focus area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 0, 16, 16, AREA_SHAPE.rectangle ])
|
inputs[| 1] = nodeValue("Focus area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Zoom", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
inputs[| 2] = nodeValue("Zoom", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||||
|
|
|
@ -20,22 +20,34 @@ function Node_Diffuse(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
|
|
||||||
inputs[| 7] = nodeValue("External", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
inputs[| 7] = nodeValue("External", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
||||||
|
|
||||||
inputs[| 8] = nodeValue("External strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.3)
|
inputs[| 8] = nodeValue("External Strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1)
|
||||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01] });
|
.setDisplay(VALUE_DISPLAY.slider, { range: [ -0.25, 0.25, 0.01] });
|
||||||
|
|
||||||
inputs[| 9] = nodeValue("Detail", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1)
|
inputs[| 9] = nodeValue("Detail", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1)
|
||||||
|
|
||||||
|
inputs[| 10] = nodeValue("External Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Point", "Vector" ]);
|
||||||
|
|
||||||
|
inputs[| 11] = nodeValue("External Direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
|
.setDisplay(VALUE_DISPLAY.rotation);
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
input_display_list = [ 0, 6,
|
input_display_list = [ 0, 6,
|
||||||
["Diffuse", false], 1,
|
["Diffuse", false], 1,
|
||||||
["Flow", false], 2, 9, 3, 4,
|
["Flow", false], 2, 9, 3, 4,
|
||||||
["Forces", false], 8,
|
["Forces", false], 10, 8, 11,
|
||||||
["Rendering", false], 5,
|
["Rendering", false], 5,
|
||||||
]
|
]
|
||||||
|
|
||||||
temp_surface = [ surface_create(1, 1), surface_create(1, 1) ];
|
temp_surface = [ surface_create(1, 1), surface_create(1, 1) ];
|
||||||
|
|
||||||
|
static step = function() {
|
||||||
|
var _ftyp = getInputData(10);
|
||||||
|
|
||||||
|
inputs[| 11].setVisible(_ftyp == 1);
|
||||||
|
}
|
||||||
|
|
||||||
static update = function() {
|
static update = function() {
|
||||||
var _surf = getInputData(0);
|
var _surf = getInputData(0);
|
||||||
var _diss = getInputData(1);
|
var _diss = getInputData(1);
|
||||||
|
@ -46,6 +58,8 @@ function Node_Diffuse(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var _seed = getInputData(6);
|
var _seed = getInputData(6);
|
||||||
var _fstr = getInputData(8);
|
var _fstr = getInputData(8);
|
||||||
var _detl = getInputData(9);
|
var _detl = getInputData(9);
|
||||||
|
var _ftyp = getInputData(10);
|
||||||
|
var _fdir = getInputData(11);
|
||||||
|
|
||||||
if(!is_surface(_surf)) return;
|
if(!is_surface(_surf)) return;
|
||||||
|
|
||||||
|
@ -71,7 +85,9 @@ function Node_Diffuse(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
shader_set_i("iteration", _detl);
|
shader_set_i("iteration", _detl);
|
||||||
shader_set_f("flowRate", _flow);
|
shader_set_f("flowRate", _flow);
|
||||||
shader_set_f("seed", _seed + CURRENT_FRAME * _rand / 100);
|
shader_set_f("seed", _seed + CURRENT_FRAME * _rand / 100);
|
||||||
|
shader_set_i("externalForceType", _ftyp);
|
||||||
shader_set_f("externalForce", _fstr);
|
shader_set_f("externalForce", _fstr);
|
||||||
|
shader_set_f("externalForceDir", degtorad(_fdir));
|
||||||
|
|
||||||
draw_surface_safe(temp_surface[0]);
|
draw_surface_safe(temp_surface[0]);
|
||||||
surface_reset_shader();
|
surface_reset_shader();
|
||||||
|
|
|
@ -217,7 +217,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
|
|
||||||
case "Area" :
|
case "Area" :
|
||||||
if(!is_array(_val) || array_length(_val) != 5)
|
if(!is_array(_val) || array_length(_val) != 5)
|
||||||
inParent.animator = new valueAnimator([0, 0, 0, 0, 5], inParent);
|
inParent.animator = new valueAnimator(DEF_AREA, inParent);
|
||||||
inParent.setDisplay(VALUE_DISPLAY.area);
|
inParent.setDisplay(VALUE_DISPLAY.area);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -250,6 +250,7 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
var _segLength = struct_has(_pat, "getAccuLength")? _pat.getAccuLength(i) : [];
|
var _segLength = struct_has(_pat, "getAccuLength")? _pat.getAccuLength(i) : [];
|
||||||
var _segLengthAmo = array_length(_segLength);
|
var _segLengthAmo = array_length(_segLength);
|
||||||
var _segIndex = 0;
|
var _segIndex = 0;
|
||||||
|
var _segIndexPrev = 0;
|
||||||
|
|
||||||
if(_segLengthAmo)
|
if(_segLengthAmo)
|
||||||
while(_prog_curr > _segLength[_segIndex]) {
|
while(_prog_curr > _segLength[_segIndex]) {
|
||||||
|
@ -260,9 +261,11 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//print($"===== {_prog_curr}/{_segLength} : {_segIndex} =====");
|
//print($"===== {_prog_curr} / {_segLength} : {_segIndex} - {_pathLength} =====");
|
||||||
|
|
||||||
while(_total >= 0) {
|
while(_total >= 0) {
|
||||||
wght = 1;
|
wght = 1;
|
||||||
|
_segIndexPrev = _segIndex;
|
||||||
|
|
||||||
if(_useDistance) {
|
if(_useDistance) {
|
||||||
var segmentLength = array_safe_get(_segLength, _segIndex, _pathLength);
|
var segmentLength = array_safe_get(_segLength, _segIndex, _pathLength);
|
||||||
|
@ -273,10 +276,11 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
//print($"{segmentLength}/{_pathLength} = {_prog_next}");
|
//print($"{segmentLength}/{_pathLength} = {_prog_next}");
|
||||||
if(_prog_next == segmentLength) _segIndex++;
|
if(_prog_next == segmentLength) _segIndex++;
|
||||||
|
|
||||||
var _pp = _clamp? clamp(_pathPng, 0, _pathLength) : _pathPng
|
var _pp = _clamp? clamp(_pathPng, 0, _pathLength) : _pathPng;
|
||||||
//print($"_pp = {_pp}");
|
//print($"_pp = {_pp}");
|
||||||
|
|
||||||
p = _pat.getPointDistance(_pp, i, p);
|
p = _pat.getPointDistance(_pp, i, p);
|
||||||
|
|
||||||
if(struct_has(_pat, "getWeightDistance"))
|
if(struct_has(_pat, "getWeightDistance"))
|
||||||
wght = _pat.getWeightDistance(_pp, i);
|
wght = _pat.getWeightDistance(_pp, i);
|
||||||
} else {
|
} else {
|
||||||
|
@ -322,7 +326,7 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
pointAmo++;
|
pointAmo++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_prog_next == _prog_curr) break;
|
if(_prog_next == _prog_curr && _segIndexPrev == _segIndex) break;
|
||||||
else if(_prog_next > _prog_curr) {
|
else if(_prog_next > _prog_curr) {
|
||||||
_prog_total += _prog_next - _prog_curr;
|
_prog_total += _prog_next - _prog_curr;
|
||||||
_total -= _prog_next - _prog_curr;
|
_total -= _prog_next - _prog_curr;
|
||||||
|
@ -333,7 +337,7 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
_ox = _nx;
|
_ox = _nx;
|
||||||
_oy = _ny;
|
_oy = _ny;
|
||||||
|
|
||||||
if(_total_prev == _total && ++_freeze > 16) break;
|
if(_total_prev == _total && _segIndexPrev == _segIndex && ++_freeze > 16) { print("Terminate line not moving"); break; }
|
||||||
_total_prev = _total;
|
_total_prev = _total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
function Node_Mesh_Transform(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
function Node_Mesh_Transform(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
name = "Mesh Transform";
|
name = "Mesh Transform";
|
||||||
|
|
||||||
w = 96;
|
w = 96;
|
||||||
|
|
||||||
inputs[| 0] = nodeValue("Mesh", self, JUNCTION_CONNECT.input, VALUE_TYPE.mesh, noone)
|
inputs[| 0] = nodeValue("Mesh", self, JUNCTION_CONNECT.input, VALUE_TYPE.mesh, noone)
|
||||||
|
@ -21,20 +20,24 @@ function Node_Mesh_Transform(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
outputs[| 0] = nodeValue("Mesh", self, JUNCTION_CONNECT.output, VALUE_TYPE.mesh, noone);
|
outputs[| 0] = nodeValue("Mesh", self, JUNCTION_CONNECT.output, VALUE_TYPE.mesh, noone);
|
||||||
|
|
||||||
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) {
|
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) {
|
||||||
|
var imesh = getInputData(0);
|
||||||
|
var omesh = outputs[| 0].getValue();
|
||||||
|
if(imesh == noone) return;
|
||||||
|
|
||||||
|
var _cm = imesh.center;
|
||||||
var pos = getInputData(1);
|
var pos = getInputData(1);
|
||||||
|
|
||||||
var px = _x + pos[0] * _s;
|
var ax = _x + _cm[0] * _s;
|
||||||
var py = _y + pos[1] * _s;
|
var ay = _y + _cm[1] * _s;
|
||||||
|
|
||||||
active &= !inputs[| 1].drawOverlay(hover, active, _x, _y, _s, _mx, _my, _snx, _sny);
|
var px = ax + pos[0] * _s;
|
||||||
|
var py = ay + pos[1] * _s;
|
||||||
|
|
||||||
|
active &= !inputs[| 1].drawOverlay(hover, active, ax, ay, _s, _mx, _my, _snx, _sny);
|
||||||
active &= !inputs[| 2].drawOverlay(hover, active, px, py, _s, _mx, _my, _snx, _sny);
|
active &= !inputs[| 2].drawOverlay(hover, active, px, py, _s, _mx, _my, _snx, _sny);
|
||||||
active &= !inputs[| 4].drawOverlay(hover, active, _x, _y, _s, _mx, _my, _snx, _sny, THEME.anchor );
|
|
||||||
|
|
||||||
var mesh = outputs[| 0].getValue();
|
|
||||||
if(mesh == noone) return;
|
|
||||||
|
|
||||||
draw_set_color(COLORS._main_accent);
|
draw_set_color(COLORS._main_accent);
|
||||||
mesh.draw(_x, _y, _s);
|
omesh.draw(_x, _y, _s);
|
||||||
}
|
}
|
||||||
|
|
||||||
function pointTransform(p, _pos, _rot, _sca, _anc) {
|
function pointTransform(p, _pos, _rot, _sca, _anc) {
|
||||||
|
@ -56,6 +59,9 @@ function Node_Mesh_Transform(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
|
|
||||||
if(_msh == noone) return;
|
if(_msh == noone) return;
|
||||||
var mesh = _msh.clone();
|
var mesh = _msh.clone();
|
||||||
|
var _cm = _msh.center;
|
||||||
|
|
||||||
|
_anc = [ _cm[0] + _anc[0], _cm[1] + _anc[1] ];
|
||||||
|
|
||||||
for( var i = 0, n = array_length(mesh.triangles); i < n; i++ ) {
|
for( var i = 0, n = array_length(mesh.triangles); i < n; i++ ) {
|
||||||
var t = mesh.triangles[i];
|
var t = mesh.triangles[i];
|
||||||
|
@ -65,6 +71,8 @@ function Node_Mesh_Transform(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
pointTransform(t[2], _pos, _rot, _sca, _anc);
|
pointTransform(t[2], _pos, _rot, _sca, _anc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mesh.calcCoM();
|
||||||
|
|
||||||
outputs[| 0].setValue(mesh);
|
outputs[| 0].setValue(mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ function Node_MK_Brownian(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 10);
|
inputs[| 2] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 10);
|
||||||
|
|
||||||
inputs[| 3] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, AREA_DEF)
|
inputs[| 3] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area);
|
.setDisplay(VALUE_DISPLAY.area);
|
||||||
|
|
||||||
inputs[| 4] = nodeValue("Direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 45, 135, 0, 0 ] )
|
inputs[| 4] = nodeValue("Direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 45, 135, 0, 0 ] )
|
||||||
|
|
|
@ -9,7 +9,7 @@ function Node_MK_Fall(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random());
|
inputs[| 2] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random());
|
||||||
|
|
||||||
inputs[| 3] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, AREA_DEF)
|
inputs[| 3] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area);
|
.setDisplay(VALUE_DISPLAY.area);
|
||||||
|
|
||||||
inputs[| 4] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 10);
|
inputs[| 4] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 10);
|
||||||
|
|
|
@ -5,7 +5,7 @@ function Node_Path_Map_Area(_x, _y, _group = noone) : Node(_x, _y, _group) const
|
||||||
inputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.input, VALUE_TYPE.pathnode, noone)
|
inputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.input, VALUE_TYPE.pathnode, noone)
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [16, 16, 16, 16])
|
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area);
|
.setDisplay(VALUE_DISPLAY.area);
|
||||||
inputs[| 1].editWidget.adjust_shape = false;
|
inputs[| 1].editWidget.adjust_shape = false;
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ function Node_Rigid_Object_Spawner(_x, _y, _group = noone) : Node(_x, _y, _group
|
||||||
inputs[| 0] = nodeValue("Object", self, JUNCTION_CONNECT.input, VALUE_TYPE.rigid, noone)
|
inputs[| 0] = nodeValue("Object", self, JUNCTION_CONNECT.input, VALUE_TYPE.rigid, noone)
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Spawn area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, AREA_DEF)
|
inputs[| 1] = nodeValue("Spawn area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area)
|
.setDisplay(VALUE_DISPLAY.area)
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
.setDisplay(VALUE_DISPLAY.rotation_random);
|
.setDisplay(VALUE_DISPLAY.rotation_random);
|
||||||
|
|
||||||
onSurfaceSize = function() { return getInputData(1, DEF_SURF); };
|
onSurfaceSize = function() { return getInputData(1, DEF_SURF); };
|
||||||
inputs[| 5] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ])
|
inputs[| 5] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
||||||
|
|
||||||
inputs[| 6] = nodeValue("Distribution", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 5)
|
inputs[| 6] = nodeValue("Distribution", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 5)
|
||||||
|
|
|
@ -5,7 +5,7 @@ function Node_Scatter_Points(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
w = 96;
|
w = 96;
|
||||||
|
|
||||||
onSurfaceSize = function() { return getInputData(7, DEF_SURF); };
|
onSurfaceSize = function() { return getInputData(7, DEF_SURF); };
|
||||||
inputs[| 0] = nodeValue("Point area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ])
|
inputs[| 0] = nodeValue("Point area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA )
|
||||||
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Point distribution", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
inputs[| 1] = nodeValue("Point distribution", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
|
|
|
@ -43,7 +43,7 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
||||||
.setDisplay(VALUE_DISPLAY.enum_scroll, _types);
|
.setDisplay(VALUE_DISPLAY.enum_scroll, _types);
|
||||||
|
|
||||||
onSurfaceSize = function() { return getInputData(0, DEF_SURF); };
|
onSurfaceSize = function() { return getInputData(0, DEF_SURF); };
|
||||||
inputs[| 3] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ])
|
inputs[| 3] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
||||||
|
|
||||||
inputs[| 4] = nodeValue("Sides", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 3)
|
inputs[| 4] = nodeValue("Sides", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 3)
|
||||||
|
|
|
@ -2,6 +2,8 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
name = "Polygon Shape";
|
name = "Polygon Shape";
|
||||||
|
|
||||||
shapesArray = [ "Rectangle", "Ellipse", "Star", "Capsule", "Ring", "Arc", "Gear", "Cross" ];
|
shapesArray = [ "Rectangle", "Ellipse", "Star", "Capsule", "Ring", "Arc", "Gear", "Cross" ];
|
||||||
|
for( var i = 0, n = array_length(shapesArray); i < n; i++ )
|
||||||
|
shapesArray[i] = new scrollItem(shapesArray[i], s_node_shape_poly_type, i);
|
||||||
|
|
||||||
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF )
|
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF )
|
||||||
.setDisplay(VALUE_DISPLAY.vector);
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
|
@ -22,7 +24,7 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
inputs[| 6] = nodeValue("Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
|
inputs[| 6] = nodeValue("Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
|
||||||
.setDisplay(VALUE_DISPLAY.rotation);
|
.setDisplay(VALUE_DISPLAY.rotation);
|
||||||
|
|
||||||
inputs[| 7] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0.5, 0.5 ])
|
inputs[| 7] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.5 ])
|
||||||
.setDisplay(VALUE_DISPLAY.vector)
|
.setDisplay(VALUE_DISPLAY.vector)
|
||||||
.setUnitRef(function(index) { return getDimension(index); }, VALUE_UNIT.reference);
|
.setUnitRef(function(index) { return getDimension(index); }, VALUE_UNIT.reference);
|
||||||
|
|
||||||
|
@ -77,6 +79,9 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
draw_set_color(c_grey);
|
draw_set_color(c_grey);
|
||||||
mesh.draw(_x, _y, _s);
|
mesh.draw(_x, _y, _s);
|
||||||
node_draw_transform_box(active, _x, _y, _s, _mx, _my, _snx, _sny, 5, 6, 7, true);
|
node_draw_transform_box(active, _x, _y, _s, _mx, _my, _snx, _sny, 5, 6, 7, true);
|
||||||
|
|
||||||
|
draw_set_color(COLORS._main_accent);
|
||||||
|
path.draw(_x, _y, _s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static vertex_transform = function(_p, _pos, _rot) {
|
static vertex_transform = function(_p, _pos, _rot) {
|
||||||
|
@ -141,6 +146,8 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
draw_set_color(_shc);
|
draw_set_color(_shc);
|
||||||
draw_primitive_begin(pr_trianglelist);
|
draw_primitive_begin(pr_trianglelist);
|
||||||
|
|
||||||
|
outputs[| 2].setVisible(_mesh == noone);
|
||||||
|
|
||||||
if(_mesh != noone) {
|
if(_mesh != noone) {
|
||||||
for( var j = 0; j < array_length(_mesh.triangles); j++ ) {
|
for( var j = 0; j < array_length(_mesh.triangles); j++ ) {
|
||||||
var tri = _mesh.triangles[j];
|
var tri = _mesh.triangles[j];
|
||||||
|
@ -153,13 +160,11 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
draw_vertex(p2.x, p2.y);
|
draw_vertex(p2.x, p2.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
outputs[| 2].setVisible(false, false);
|
|
||||||
} else {
|
} else {
|
||||||
outputs[| 2].setVisible(true, true);
|
|
||||||
|
|
||||||
var shapeData = [];
|
var shapeData = [];
|
||||||
|
|
||||||
switch(array_safe_get(shapesArray, _shp)) {
|
switch(array_safe_get(shapesArray, _shp).name) {
|
||||||
case "Rectangle" : shapeData = SHAPE_rectangle(_sca); break;
|
case "Rectangle" : shapeData = SHAPE_rectangle(_sca); break;
|
||||||
case "Ellipse" : shapeData = SHAPE_circle(_sca, data); break;
|
case "Ellipse" : shapeData = SHAPE_circle(_sca, data); break;
|
||||||
case "Star" : shapeData = SHAPE_star(_sca, data); break;
|
case "Star" : shapeData = SHAPE_star(_sca, data); break;
|
||||||
|
@ -168,6 +173,12 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
case "Arc" : shapeData = SHAPE_arc(_sca, data); break;
|
case "Arc" : shapeData = SHAPE_arc(_sca, data); break;
|
||||||
case "Gear" : shapeData = SHAPE_gear(_sca, data); break;
|
case "Gear" : shapeData = SHAPE_gear(_sca, data); break;
|
||||||
case "Cross" : shapeData = SHAPE_cross(_sca, data); break;
|
case "Cross" : shapeData = SHAPE_cross(_sca, data); break;
|
||||||
|
default:
|
||||||
|
draw_primitive_end();
|
||||||
|
draw_set_alpha(1);
|
||||||
|
|
||||||
|
surface_reset_target();
|
||||||
|
return _outSurf;
|
||||||
}
|
}
|
||||||
|
|
||||||
var points = shapeData[0];
|
var points = shapeData[0];
|
||||||
|
@ -185,6 +196,7 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
for( var i = 0, n = array_length(points); i < n; i++ ) {
|
for( var i = 0, n = array_length(points); i < n; i++ ) {
|
||||||
if(points[i].type == SHAPE_TYPE.points)
|
if(points[i].type == SHAPE_TYPE.points)
|
||||||
shapes[i] = polygon_triangulate(points[i].points);
|
shapes[i] = polygon_triangulate(points[i].points);
|
||||||
|
|
||||||
else if(points[i].type == SHAPE_TYPE.triangles)
|
else if(points[i].type == SHAPE_TYPE.triangles)
|
||||||
shapes[i] = points[i].triangles;
|
shapes[i] = points[i].triangles;
|
||||||
}
|
}
|
||||||
|
@ -203,6 +215,8 @@ function Node_Shape_Polygon(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
array_push(mesh.triangles, tri);
|
array_push(mesh.triangles, tri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mesh.calcCoM();
|
||||||
}
|
}
|
||||||
draw_primitive_end();
|
draw_primitive_end();
|
||||||
draw_set_alpha(1);
|
draw_set_alpha(1);
|
||||||
|
|
|
@ -10,7 +10,7 @@ function Node_Smoke_Add_Collider(_x, _y, _group = noone) : Node_Smoke(_x, _y, _g
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Collider", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
inputs[| 1] = nodeValue("Collider", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16, 4, 4, AREA_SHAPE.rectangle ])
|
inputs[| 2] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA )
|
||||||
.setDisplay(VALUE_DISPLAY.area);
|
.setDisplay(VALUE_DISPLAY.area);
|
||||||
|
|
||||||
input_display_list = [
|
input_display_list = [
|
||||||
|
|
|
@ -8,7 +8,7 @@ function Node_Smoke_Turbulence(_x, _y, _group = noone) : Node_Smoke(_x, _y, _gro
|
||||||
inputs[| 0] = nodeValue("Domain", self, JUNCTION_CONNECT.input, VALUE_TYPE.sdomain, noone)
|
inputs[| 0] = nodeValue("Domain", self, JUNCTION_CONNECT.input, VALUE_TYPE.sdomain, noone)
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Effect area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, AREA_DEF)
|
inputs[| 1] = nodeValue("Effect area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA)
|
||||||
.setDisplay(VALUE_DISPLAY.area);
|
.setDisplay(VALUE_DISPLAY.area);
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.10)
|
inputs[| 2] = nodeValue("Strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.10)
|
||||||
|
|
|
@ -519,7 +519,7 @@ function nodeValueMap(_name, _node, _junc = noone) { return new NodeValue(
|
||||||
function nodeValueGradientRange(_name, _node, _junc = noone) { return new NodeValue(_name, _node, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 1, 0 ]).setDisplay(VALUE_DISPLAY.gradient_range).setVisible(false, false).setMapped(_junc); }
|
function nodeValueGradientRange(_name, _node, _junc = noone) { return new NodeValue(_name, _node, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 1, 0 ]).setDisplay(VALUE_DISPLAY.gradient_range).setVisible(false, false).setMapped(_junc); }
|
||||||
|
|
||||||
function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constructor {
|
function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constructor {
|
||||||
static DISPLAY_DATA_KEYS = [ "linked", "angle_display", "bone_id", "area_type", "unit", "atlas_crop" ];
|
static DISPLAY_DATA_KEYS = [ "linked", "angle_display", "bone_id", "unit", "atlas_crop" ];
|
||||||
|
|
||||||
#region ---- main ----
|
#region ---- main ----
|
||||||
active = true;
|
active = true;
|
||||||
|
@ -1028,7 +1028,6 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
for( var i = 0, n = array_length(animators); i < n; i++ )
|
for( var i = 0, n = array_length(animators); i < n; i++ )
|
||||||
animators[i].suffix = " " + array_safe_get(global.displaySuffix_Area, i, "");
|
animators[i].suffix = " " + array_safe_get(global.displaySuffix_Area, i, "");
|
||||||
|
|
||||||
display_data.area_type = AREA_MODE.area;
|
|
||||||
extract_node = "Node_Area";
|
extract_node = "Node_Area";
|
||||||
break; #endregion
|
break; #endregion
|
||||||
case VALUE_DISPLAY.padding : #region
|
case VALUE_DISPLAY.padding : #region
|
||||||
|
@ -1487,8 +1486,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
if(display_type == VALUE_DISPLAY.area) { #region
|
if(display_type == VALUE_DISPLAY.area) { #region
|
||||||
var dispType = nodeFrom.display_data.area_type;
|
var surfGet = struct_try_get(nodeFrom.display_data, "onSurfaceSize", -1);
|
||||||
var surfGet = nodeFrom.display_data.onSurfaceSize;
|
|
||||||
|
|
||||||
if(!applyUnit) return value;
|
if(!applyUnit) return value;
|
||||||
if(!is_callable(surfGet)) return value;
|
if(!is_callable(surfGet)) return value;
|
||||||
|
@ -1498,6 +1496,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
var ww = surf[0];
|
var ww = surf[0];
|
||||||
var hh = surf[1];
|
var hh = surf[1];
|
||||||
|
|
||||||
|
var dispType = array_safe_get(value, 5, AREA_MODE.area);
|
||||||
|
|
||||||
switch(dispType) {
|
switch(dispType) {
|
||||||
case AREA_MODE.area :
|
case AREA_MODE.area :
|
||||||
return value;
|
return value;
|
||||||
|
|
|
@ -14,7 +14,7 @@ function Node_Widget_Test(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
inputs[| 6] = nodeValue("rotatorRandom", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0, 0, 0, 0]) .setDisplay(VALUE_DISPLAY.rotation_random)
|
inputs[| 6] = nodeValue("rotatorRandom", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0, 0, 0, 0]) .setDisplay(VALUE_DISPLAY.rotation_random)
|
||||||
inputs[| 7] = nodeValue("slider", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.slider)
|
inputs[| 7] = nodeValue("slider", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.slider)
|
||||||
inputs[| 8] = nodeValue("sliderRange", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0]) .setDisplay(VALUE_DISPLAY.slider_range)
|
inputs[| 8] = nodeValue("sliderRange", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 0]) .setDisplay(VALUE_DISPLAY.slider_range)
|
||||||
inputs[| 9] = nodeValue("areaBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.area)
|
inputs[| 9] = nodeValue("areaBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA) .setDisplay(VALUE_DISPLAY.area)
|
||||||
inputs[| 10] = nodeValue("paddingBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.padding)
|
inputs[| 10] = nodeValue("paddingBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.padding)
|
||||||
inputs[| 11] = nodeValue("cornerBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.corner)
|
inputs[| 11] = nodeValue("cornerBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.corner)
|
||||||
inputs[| 12] = nodeValue("controlPointBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.puppet_control)
|
inputs[| 12] = nodeValue("controlPointBox", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0, 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.puppet_control)
|
||||||
|
|
|
@ -4,7 +4,7 @@ function Node_Wrap_Area(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
onSurfaceSize = function() { return surface_get_dimension(getInputData(0)); };
|
onSurfaceSize = function() { return surface_get_dimension(getInputData(0)); };
|
||||||
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16, 4, 4, AREA_SHAPE.rectangle ])
|
inputs[| 1] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA )
|
||||||
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
.setDisplay(VALUE_DISPLAY.area, { onSurfaceSize });
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Active", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true);
|
inputs[| 2] = nodeValue("Active", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true);
|
||||||
|
|
|
@ -7,9 +7,11 @@ uniform float scale;
|
||||||
uniform int iteration;
|
uniform int iteration;
|
||||||
uniform float flowRate;
|
uniform float flowRate;
|
||||||
|
|
||||||
|
uniform int externalForceType;
|
||||||
uniform float externalForce;
|
uniform float externalForce;
|
||||||
|
uniform float externalForceDir;
|
||||||
|
|
||||||
///////////////////// PERLIN START /////////////////////
|
#region ///////////////////// PERLIN START /////////////////////
|
||||||
|
|
||||||
float random (in vec2 st) { return smoothstep(0., 1., abs(fract(sin(dot(st.xy + vec2(21.456, 46.856), vec2(12.989, 78.233))) * (43758.545 + seed)) * 2. - 1.)); }
|
float random (in vec2 st) { return smoothstep(0., 1., abs(fract(sin(dot(st.xy + vec2(21.456, 46.856), vec2(12.989, 78.233))) * (43758.545 + seed)) * 2. - 1.)); }
|
||||||
vec2 random2 (in vec2 st) { float a = random(st) * 6.28319; return vec2(cos(a), sin(a)); }
|
vec2 random2 (in vec2 st) { float a = random(st) * 6.28319; return vec2(cos(a), sin(a)); }
|
||||||
|
@ -57,7 +59,7 @@ float perlin ( vec2 st ) {
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////// PERLIN END /////////////////////
|
#endregion ///////////////////// PERLIN END /////////////////////
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec2 tx = 1. / dimension;
|
vec2 tx = 1. / dimension;
|
||||||
|
@ -67,7 +69,12 @@ void main() {
|
||||||
float y0 = perlin((v_vTexcoord + vec2(0., -tx.y)) * scale);
|
float y0 = perlin((v_vTexcoord + vec2(0., -tx.y)) * scale);
|
||||||
float y1 = perlin((v_vTexcoord + vec2(0., tx.y)) * scale);
|
float y1 = perlin((v_vTexcoord + vec2(0., tx.y)) * scale);
|
||||||
|
|
||||||
vec2 flow = vec2(x1 - x0, y1 - y0) + externalForce * (v_vTexcoord - 0.5);
|
vec2 flow = vec2(x1 - x0, y1 - y0);
|
||||||
|
|
||||||
|
if(externalForceType == 0)
|
||||||
|
flow += externalForce * (v_vTexcoord - 0.5);
|
||||||
|
if(externalForceType == 1)
|
||||||
|
flow += externalForce * vec2(cos(externalForceDir), sin(externalForceDir));
|
||||||
|
|
||||||
gl_FragColor = texture2D( gm_BaseTexture, v_vTexcoord - flow * flowRate );
|
gl_FragColor = texture2D( gm_BaseTexture, v_vTexcoord - flow * flowRate );
|
||||||
}
|
}
|
||||||
|
|
After Width: | Height: | Size: 377 B |
After Width: | Height: | Size: 525 B |
After Width: | Height: | Size: 499 B |
After Width: | Height: | Size: 502 B |
After Width: | Height: | Size: 326 B |
After Width: | Height: | Size: 448 B |
After Width: | Height: | Size: 403 B |
After Width: | Height: | Size: 506 B |
After Width: | Height: | Size: 377 B |
After Width: | Height: | Size: 525 B |
After Width: | Height: | Size: 499 B |
After Width: | Height: | Size: 502 B |
After Width: | Height: | Size: 326 B |
After Width: | Height: | Size: 448 B |
After Width: | Height: | Size: 403 B |
After Width: | Height: | Size: 506 B |
88
sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMSprite",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "s_node_shape_poly_type",
|
||||||
|
"bbox_bottom": 21,
|
||||||
|
"bbox_left": 2,
|
||||||
|
"bbox_right": 21,
|
||||||
|
"bbox_top": 2,
|
||||||
|
"bboxMode": 0,
|
||||||
|
"collisionKind": 1,
|
||||||
|
"collisionTolerance": 0,
|
||||||
|
"DynamicTexturePage": false,
|
||||||
|
"edgeFiltering": false,
|
||||||
|
"For3D": false,
|
||||||
|
"frames": [
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"c062d35a-662c-46c4-9898-cf687121115d",},
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"cf030556-92eb-437b-80ed-1fbaec3ab825",},
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"36c0e241-654d-449a-bdce-eae92c78e585",},
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"e38974be-d29b-448b-abd5-314672c45348",},
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"66c44ad0-2d4d-4a6f-a9e2-bcc3fdaa7ef8",},
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"93f9eeec-4d25-46a1-a737-87461d798a1a",},
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"e6a7b907-9f2c-4296-bc7a-6a36993f07bc",},
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"0688681e-9e32-4046-9fb9-c28411414622",},
|
||||||
|
],
|
||||||
|
"gridX": 0,
|
||||||
|
"gridY": 0,
|
||||||
|
"height": 24,
|
||||||
|
"HTile": false,
|
||||||
|
"layers": [
|
||||||
|
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"2cf10068-76aa-4aa4-8fdc-cf8df2b3f52f","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
|
||||||
|
],
|
||||||
|
"nineSlice": null,
|
||||||
|
"origin": 4,
|
||||||
|
"parent": {
|
||||||
|
"name": "nodes",
|
||||||
|
"path": "folders/sprites/nodes.yy",
|
||||||
|
},
|
||||||
|
"preMultiplyAlpha": false,
|
||||||
|
"sequence": {
|
||||||
|
"resourceType": "GMSequence",
|
||||||
|
"resourceVersion": "1.4",
|
||||||
|
"name": "s_node_shape_poly_type",
|
||||||
|
"autoRecord": true,
|
||||||
|
"backdropHeight": 768,
|
||||||
|
"backdropImageOpacity": 0.5,
|
||||||
|
"backdropImagePath": "",
|
||||||
|
"backdropWidth": 1366,
|
||||||
|
"backdropXOffset": 0.0,
|
||||||
|
"backdropYOffset": 0.0,
|
||||||
|
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"eventStubScript": null,
|
||||||
|
"eventToFunction": {},
|
||||||
|
"length": 8.0,
|
||||||
|
"lockOrigin": false,
|
||||||
|
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"playback": 1,
|
||||||
|
"playbackSpeed": 30.0,
|
||||||
|
"playbackSpeedType": 0,
|
||||||
|
"showBackdrop": true,
|
||||||
|
"showBackdropImage": false,
|
||||||
|
"timeUnits": 1,
|
||||||
|
"tracks": [
|
||||||
|
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"c062d35a-662c-46c4-9898-cf687121115d","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},},"Disabled":false,"id":"0f523f3d-7e20-4e72-b9ee-526dba4a192e","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"cf030556-92eb-437b-80ed-1fbaec3ab825","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},},"Disabled":false,"id":"52176aad-60cc-4bb8-a0ea-04ba50d60741","IsCreationKey":false,"Key":1.0,"Length":1.0,"Stretch":false,},
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"36c0e241-654d-449a-bdce-eae92c78e585","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},},"Disabled":false,"id":"ebd74768-c03f-4c26-9237-dffe7f34055d","IsCreationKey":false,"Key":2.0,"Length":1.0,"Stretch":false,},
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"e38974be-d29b-448b-abd5-314672c45348","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},},"Disabled":false,"id":"6263dbe0-79da-47dc-8fa9-14feb4f26b65","IsCreationKey":false,"Key":3.0,"Length":1.0,"Stretch":false,},
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"66c44ad0-2d4d-4a6f-a9e2-bcc3fdaa7ef8","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},},"Disabled":false,"id":"867db5cb-a02e-4788-9af9-88378e7f0681","IsCreationKey":false,"Key":4.0,"Length":1.0,"Stretch":false,},
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"93f9eeec-4d25-46a1-a737-87461d798a1a","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},},"Disabled":false,"id":"0fadce67-c866-4605-9c97-edf2ef587835","IsCreationKey":false,"Key":5.0,"Length":1.0,"Stretch":false,},
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"e6a7b907-9f2c-4296-bc7a-6a36993f07bc","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},},"Disabled":false,"id":"233508fd-5c70-4f24-9a3a-da5f1badca4e","IsCreationKey":false,"Key":6.0,"Length":1.0,"Stretch":false,},
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"0688681e-9e32-4046-9fb9-c28411414622","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},},"Disabled":false,"id":"04e1457a-ced5-44dd-92ae-523f18bb4959","IsCreationKey":false,"Key":7.0,"Length":1.0,"Stretch":false,},
|
||||||
|
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
|
||||||
|
],
|
||||||
|
"visibleRange": null,
|
||||||
|
"volume": 1.0,
|
||||||
|
"xorigin": 12,
|
||||||
|
"yorigin": 12,
|
||||||
|
},
|
||||||
|
"swatchColours": null,
|
||||||
|
"swfPrecision": 2.525,
|
||||||
|
"textureGroupId": {
|
||||||
|
"name": "Default",
|
||||||
|
"path": "texturegroups/Default",
|
||||||
|
},
|
||||||
|
"type": 0,
|
||||||
|
"VTile": false,
|
||||||
|
"width": 24,
|
||||||
|
}
|