mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-24 14:06:23 +01:00
New VFX boids node.
This commit is contained in:
parent
08463ddced
commit
5b5b2999f7
13 changed files with 296 additions and 14 deletions
|
@ -100,7 +100,7 @@
|
|||
{"name":"smokeSim","order":4,"path":"folders/nodes/data/simulation/smokeSim.yy",},
|
||||
{"name":"strandSim","order":5,"path":"folders/nodes/data/simulation/strandSim.yy",},
|
||||
{"name":"VFX","order":6,"path":"folders/nodes/data/simulation/VFX.yy",},
|
||||
{"name":"effects","order":1,"path":"folders/nodes/data/simulation/VFX/effects.yy",},
|
||||
{"name":"generators","order":1,"path":"folders/nodes/data/simulation/VFX/generators.yy",},
|
||||
{"name":"transform","order":28,"path":"folders/nodes/data/transform.yy",},
|
||||
{"name":"value","order":29,"path":"folders/nodes/data/value.yy",},
|
||||
{"name":"atlas","order":1,"path":"folders/nodes/data/value/atlas.yy",},
|
||||
|
@ -1224,6 +1224,7 @@
|
|||
{"name":"node_vector4","order":6,"path":"scripts/node_vector4/node_vector4.yy",},
|
||||
{"name":"node_VFX_accelerate","order":1,"path":"scripts/node_VFX_accelerate/node_VFX_accelerate.yy",},
|
||||
{"name":"node_VFX_attract","order":2,"path":"scripts/node_VFX_attract/node_VFX_attract.yy",},
|
||||
{"name":"node_VFX_boids","order":10,"path":"scripts/node_VFX_boids/node_VFX_boids.yy",},
|
||||
{"name":"node_VFX_destroy","order":3,"path":"scripts/node_VFX_destroy/node_VFX_destroy.yy",},
|
||||
{"name":"node_VFX_group_inline","order":5,"path":"scripts/node_VFX_group_inline/node_VFX_group_inline.yy",},
|
||||
{"name":"node_VFX_group","order":4,"path":"scripts/node_VFX_group/node_VFX_group.yy",},
|
||||
|
@ -2549,6 +2550,7 @@
|
|||
{"name":"s_node_vec3","order":16,"path":"sprites/s_node_vec3/s_node_vec3.yy",},
|
||||
{"name":"s_node_vec4","order":17,"path":"sprites/s_node_vec4/s_node_vec4.yy",},
|
||||
{"name":"s_node_vfx_attract","order":8,"path":"sprites/s_node_vfx_attract/s_node_vfx_attract.yy",},
|
||||
{"name":"s_node_vfx_boid","order":16,"path":"sprites/s_node_vfx_boid/s_node_vfx_boid.yy",},
|
||||
{"name":"s_node_vfx_destroy","order":7,"path":"sprites/s_node_vfx_destroy/s_node_vfx_destroy.yy",},
|
||||
{"name":"s_node_vfx_input","order":12,"path":"sprites/s_node_vfx_input/s_node_vfx_input.yy",},
|
||||
{"name":"s_node_vfx_osc","order":14,"path":"sprites/s_node_vfx_osc/s_node_vfx_osc.yy",},
|
||||
|
|
|
@ -198,7 +198,7 @@
|
|||
{"$GMFolder":"","%Name":"strandSim","folderPath":"folders/nodes/data/simulation/strandSim.yy","name":"strandSim","resourceType":"GMFolder","resourceVersion":"2.0",},
|
||||
{"$GMFolder":"","%Name":"VFX","folderPath":"folders/nodes/data/simulation/VFX.yy","name":"VFX","resourceType":"GMFolder","resourceVersion":"2.0",},
|
||||
{"$GMFolder":"","%Name":"affector","folderPath":"folders/nodes/data/simulation/VFX/affector.yy","name":"affector","resourceType":"GMFolder","resourceVersion":"2.0",},
|
||||
{"$GMFolder":"","%Name":"effects","folderPath":"folders/nodes/data/simulation/VFX/effects.yy","name":"effects","resourceType":"GMFolder","resourceVersion":"2.0",},
|
||||
{"$GMFolder":"","%Name":"generators","folderPath":"folders/nodes/data/simulation/VFX/generators.yy","name":"generators","resourceType":"GMFolder","resourceVersion":"2.0",},
|
||||
{"$GMFolder":"","%Name":"transform","folderPath":"folders/nodes/data/transform.yy","name":"transform","resourceType":"GMFolder","resourceVersion":"2.0",},
|
||||
{"$GMFolder":"","%Name":"value","folderPath":"folders/nodes/data/value.yy","name":"value","resourceType":"GMFolder","resourceVersion":"2.0",},
|
||||
{"$GMFolder":"","%Name":"array","folderPath":"folders/nodes/data/value/array.yy","name":"array","resourceType":"GMFolder","resourceVersion":"2.0",},
|
||||
|
@ -1833,6 +1833,7 @@
|
|||
{"id":{"name":"node_vector4","path":"scripts/node_vector4/node_vector4.yy",},},
|
||||
{"id":{"name":"node_VFX_accelerate","path":"scripts/node_VFX_accelerate/node_VFX_accelerate.yy",},},
|
||||
{"id":{"name":"node_VFX_attract","path":"scripts/node_VFX_attract/node_VFX_attract.yy",},},
|
||||
{"id":{"name":"node_VFX_boids","path":"scripts/node_VFX_boids/node_VFX_boids.yy",},},
|
||||
{"id":{"name":"node_VFX_destroy","path":"scripts/node_VFX_destroy/node_VFX_destroy.yy",},},
|
||||
{"id":{"name":"node_VFX_group_inline","path":"scripts/node_VFX_group_inline/node_VFX_group_inline.yy",},},
|
||||
{"id":{"name":"node_VFX_group","path":"scripts/node_VFX_group/node_VFX_group.yy",},},
|
||||
|
@ -3293,6 +3294,7 @@
|
|||
{"id":{"name":"s_node_vec4","path":"sprites/s_node_vec4/s_node_vec4.yy",},},
|
||||
{"id":{"name":"s_node_vfx_accel","path":"sprites/s_node_vfx_accel/s_node_vfx_accel.yy",},},
|
||||
{"id":{"name":"s_node_vfx_attract","path":"sprites/s_node_vfx_attract/s_node_vfx_attract.yy",},},
|
||||
{"id":{"name":"s_node_vfx_boid","path":"sprites/s_node_vfx_boid/s_node_vfx_boid.yy",},},
|
||||
{"id":{"name":"s_node_vfx_destroy","path":"sprites/s_node_vfx_destroy/s_node_vfx_destroy.yy",},},
|
||||
{"id":{"name":"s_node_vfx_input","path":"sprites/s_node_vfx_input/s_node_vfx_input.yy",},},
|
||||
{"id":{"name":"s_node_vfx_osc","path":"sprites/s_node_vfx_osc/s_node_vfx_osc.yy",},},
|
||||
|
|
|
@ -36,7 +36,7 @@ function __particleObject() constructor {
|
|||
static step = function() {}
|
||||
|
||||
__temp_pt = [ 0, 0 ];
|
||||
static draw = function(exact, surf_w, surf_h) { #region
|
||||
static draw = function(exact, surf_w, surf_h) {
|
||||
if(!surface_exists(surf)) return;
|
||||
|
||||
var _sw = surface_get_width(surf) * scx;
|
||||
|
@ -44,13 +44,13 @@ function __particleObject() constructor {
|
|||
|
||||
point_rotate(-_sw / 2, -_sh / 2, 0, 0, rot, __temp_pt);
|
||||
draw_surface_ext(surf, x + __temp_pt[0], y + __temp_pt[1], scx, scy, rot, blend, alp);
|
||||
} #endregion
|
||||
}
|
||||
|
||||
static clone = function() { #region
|
||||
static clone = function() {
|
||||
var _p = new __particleObject();
|
||||
struct_override(_p, self);
|
||||
return _p;
|
||||
} #endregion
|
||||
}
|
||||
}
|
||||
|
||||
function __part(_node) : __particleObject() constructor {
|
||||
|
@ -385,8 +385,8 @@ function __part(_node) : __particleObject() constructor {
|
|||
}
|
||||
|
||||
if(life_incr) {
|
||||
scx_history[life_incr - 1] = scx;
|
||||
scy_history[life_incr - 1] = scy;
|
||||
scx_history[life_incr - 1] = scx;
|
||||
scy_history[life_incr - 1] = scy;
|
||||
}
|
||||
|
||||
var _xx = drawx;
|
||||
|
|
162
scripts/node_VFX_boids/node_VFX_boids.gml
Normal file
162
scripts/node_VFX_boids/node_VFX_boids.gml
Normal file
|
@ -0,0 +1,162 @@
|
|||
function Node_VFX_Boids(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||
name = "Boids";
|
||||
color = COLORS.node_blend_vfx;
|
||||
icon = THEME.vfx;
|
||||
reloop = true;
|
||||
|
||||
manual_ungroupable = false;
|
||||
node_draw_icon = s_node_vfx_boid;
|
||||
|
||||
setDimension(96, 48);
|
||||
|
||||
newInput(0, nodeValue_Particle("Particles", self, -1 ))
|
||||
.setVisible(true, true);
|
||||
|
||||
newInput(1, nodeValue_Float("Sep. radius", self, 4 ));
|
||||
|
||||
newInput(2, nodeValue_Float("Sep. influence", self, 0.2 ))
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
newInput(3, nodeValue_Float("Ali. radius", self, 32 ));
|
||||
|
||||
newInput(4, nodeValue_Float("Ali. influence", self, 0.2 ))
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
newInput(5, nodeValue_Float("Grp. radius", self, 32 ));
|
||||
|
||||
newInput(6, nodeValue_Float("Grp. influence", self, 0.2 ))
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
newInput(7, nodeValue_Float("Speed amplification", self, 1 ));
|
||||
|
||||
input_display_list = [ 0, 7,
|
||||
["Separation", false], 1, 2,
|
||||
["Alignment", false], 3, 4,
|
||||
["Grouping", false], 5, 6,
|
||||
];
|
||||
|
||||
newOutput(0, nodeValue_Output("Particles", self, VALUE_TYPE.particle, -1 ));
|
||||
|
||||
UPDATE_PART_FORWARD
|
||||
|
||||
static update = function(frame = CURRENT_FRAME) {
|
||||
var parts = getInputData(0);
|
||||
|
||||
outputs[0].setValue(parts);
|
||||
if(parts == -1) return;
|
||||
|
||||
if(array_empty(parts)) return;
|
||||
var _allparts = [];
|
||||
|
||||
if(!is_array(parts[0])) parts = [ parts ];
|
||||
|
||||
for( var i = 0, n = array_length(parts); i < n; i++ ) {
|
||||
var _parts = parts[i];
|
||||
for( var j = 0, m = array_length(_parts); j < m; j++ ) {
|
||||
var p = _parts[j];
|
||||
if(p.active) array_append(_allparts, p);
|
||||
}
|
||||
}
|
||||
|
||||
var _sep_rad = getInputData(1), _sep_rad2 = _sep_rad * _sep_rad;
|
||||
var _sep_amo = getInputData(2);
|
||||
var _ali_rad = getInputData(3), _ali_rad2 = _ali_rad * _ali_rad;
|
||||
var _ali_amo = getInputData(4);
|
||||
var _grp_rad = getInputData(5), _grp_rad2 = _grp_rad * _grp_rad;
|
||||
var _grp_amo = getInputData(6);
|
||||
var _spd_amp = getInputData(7);
|
||||
|
||||
var amo = array_length(_allparts);
|
||||
var p0, p0x, p0y, p0vx, p0vy;
|
||||
var p1, p1x, p1y, p1vx, p1vy;
|
||||
var avx, avy, avc;
|
||||
var ax, ay, ac;
|
||||
|
||||
var max_rad2 = max(_sep_rad2, _ali_rad2, _grp_rad2);
|
||||
|
||||
for( var i = 0; i < amo; i++ ) {
|
||||
p0 = _allparts[i];
|
||||
|
||||
p0x = p0.x;
|
||||
p0y = p0.y;
|
||||
p0vx = p0.speedx;
|
||||
p0vy = p0.speedy;
|
||||
|
||||
avx = 0;
|
||||
avy = 0;
|
||||
avc = 0;
|
||||
|
||||
ax = 0;
|
||||
ay = 0;
|
||||
ac = 0;
|
||||
|
||||
var dis = sqrt(p0vx * p0vx + p0vy * p0vy) * _spd_amp;
|
||||
|
||||
for( var j = 0; j < amo; j++ ) {
|
||||
if(j == i) continue;
|
||||
|
||||
p1 = _allparts[j];
|
||||
|
||||
p1x = p1.x;
|
||||
p1y = p1.y;
|
||||
p1vx = p1.speedx;
|
||||
p1vy = p1.speedy;
|
||||
|
||||
var _dx = p0x - p1x;
|
||||
var _dy = p0y - p1y;
|
||||
|
||||
var _dist = _dx * _dx + _dy * _dy;
|
||||
if(_dist >= max_rad2) continue;
|
||||
|
||||
if(_dist < _sep_rad2) {
|
||||
p0x += (p0x - p1x) * _sep_amo;
|
||||
p0y += (p0y - p1y) * _sep_amo;
|
||||
}
|
||||
|
||||
if(_dist < _ali_rad2) {
|
||||
avx += p1vx;
|
||||
avy += p1vy;
|
||||
avc++;
|
||||
}
|
||||
|
||||
if(_dist < _grp_rad2) {
|
||||
ax += p1x;
|
||||
ay += p1y;
|
||||
ac++;
|
||||
}
|
||||
}
|
||||
|
||||
if(avc) {
|
||||
avx /= avc;
|
||||
avy /= avc;
|
||||
|
||||
p0vx += (avx - p0vx) * _ali_amo;
|
||||
p0vy += (avy - p0vy) * _ali_amo;
|
||||
}
|
||||
|
||||
if(ac) {
|
||||
ax /= ac;
|
||||
ay /= ac;
|
||||
|
||||
p0x += (ax - p0x) * _grp_amo;
|
||||
p0y += (ay - p0y) * _grp_amo;
|
||||
}
|
||||
|
||||
var dir = point_direction(p0.x, p0.y, p0x, p0y);
|
||||
var _disn = point_distance( p0.x, p0.y, p0x, p0y);
|
||||
|
||||
p0.x += lengthdir_x(min(dis, _disn), dir);
|
||||
p0.y += lengthdir_y(min(dis, _disn), dir);
|
||||
p0.speedx = p0vx;
|
||||
p0.speedy = p0vy;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
|
||||
var bbox = drawGetBbox(xx, yy, _s);
|
||||
draw_sprite_fit(node_draw_icon, 0, bbox.xc, bbox.yc, bbox.w, bbox.h);
|
||||
}
|
||||
|
||||
getPreviewingNode = VFX_PREVIEW_NODE;
|
||||
}
|
13
scripts/node_VFX_boids/node_VFX_boids.yy
Normal file
13
scripts/node_VFX_boids/node_VFX_boids.yy
Normal file
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"$GMScript":"v1",
|
||||
"%Name":"node_VFX_boids",
|
||||
"isCompatibility":false,
|
||||
"isDnD":false,
|
||||
"name":"node_VFX_boids",
|
||||
"parent":{
|
||||
"name":"affector",
|
||||
"path":"folders/nodes/data/simulation/VFX/affector.yy",
|
||||
},
|
||||
"resourceType":"GMScript",
|
||||
"resourceVersion":"2.0",
|
||||
}
|
|
@ -5,8 +5,8 @@
|
|||
"isDnD":false,
|
||||
"name":"node_VFX_trail",
|
||||
"parent":{
|
||||
"name":"effects",
|
||||
"path":"folders/nodes/data/simulation/VFX/effects.yy",
|
||||
"name":"generators",
|
||||
"path":"folders/nodes/data/simulation/VFX/generators.yy",
|
||||
},
|
||||
"resourceType":"GMScript",
|
||||
"resourceVersion":"2.0",
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
"isDnD":false,
|
||||
"name":"node_VFX_triangulate",
|
||||
"parent":{
|
||||
"name":"effects",
|
||||
"path":"folders/nodes/data/simulation/VFX/effects.yy",
|
||||
"name":"generators",
|
||||
"path":"folders/nodes/data/simulation/VFX/generators.yy",
|
||||
},
|
||||
"resourceType":"GMScript",
|
||||
"resourceVersion":"2.0",
|
||||
|
|
|
@ -394,7 +394,7 @@ function __initNodes() {
|
|||
addNodeObject(vfx, "Output", s_node_vfx_output, "Node_Group_Output", [1, Node_Group_Output]).hideRecent().hideGlobal();
|
||||
addNodeObject(vfx, "Renderer", s_node_vfx_render_output, "Node_VFX_Renderer_Output", [1, Node_VFX_Renderer_Output]).hideRecent().hideGlobal();
|
||||
|
||||
ds_list_add(vfx, "VFXs");
|
||||
ds_list_add(vfx, "Main");
|
||||
addNodeObject(vfx, "Spawner", s_node_vfx_spawn, "Node_VFX_Spawner", [1, Node_VFX_Spawner],, "Spawn new particles.").hideRecent();
|
||||
addNodeObject(vfx, "Renderer", s_node_vfx_render, "Node_VFX_Renderer", [1, Node_VFX_Renderer],, "Render particle objects to surface.").hideRecent();
|
||||
|
||||
|
@ -407,8 +407,9 @@ function __initNodes() {
|
|||
addNodeObject(vfx, "Turbulence", s_node_vfx_turb, "Node_VFX_Turbulence", [1, Node_VFX_Turbulence],, "Move particle in range randomly.").hideRecent();
|
||||
addNodeObject(vfx, "Repel", s_node_vfx_repel, "Node_VFX_Repel", [1, Node_VFX_Repel],, "Move particle away from point.").hideRecent();
|
||||
addNodeObject(vfx, "Oscillate", s_node_vfx_osc, "Node_VFX_Oscillate", [1, Node_VFX_Oscillate],, "Swing particle around its original trajectory.").hideRecent().setVersion(11560);
|
||||
addNodeObject(vfx, "Boids", s_node_vfx_boid, "Node_VFX_Boids", [1, Node_VFX_Boids],, "Apply boids algorithm to create a flock behaviour.").hideRecent().setVersion(1_18_01_0);
|
||||
|
||||
ds_list_add(vfx, "Effects");
|
||||
ds_list_add(vfx, "Generates");
|
||||
addNodeObject(vfx, "VFX Trail", s_node_vfx_trail, "Node_VFX_Trail", [1, Node_VFX_Trail],, "Generate path from particle movement.").hideRecent().setVersion(11560);
|
||||
addNodeObject(vfx, "VFX Triangulate", s_node_vfx_triangulate, "Node_VFX_Triangulate", [1, Node_VFX_Triangulate],, "Render line between particles.").hideRecent().setVersion(11670);
|
||||
|
||||
|
|
|
@ -992,6 +992,10 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
|||
editWidget = new outputStructBox();
|
||||
break;
|
||||
|
||||
case VALUE_TYPE.particle :
|
||||
editWidget = noone;
|
||||
break;
|
||||
|
||||
default :
|
||||
editWidget = new outputBox();
|
||||
break;
|
||||
|
|
|
@ -15,6 +15,14 @@ function outputBox() : widget() constructor {
|
|||
|
||||
draw_set_text(font, fa_left, fa_top, COLORS._main_text_sub);
|
||||
|
||||
if(string_length(_value) > 512) {
|
||||
var _hh = string_height("l") + ui(16);
|
||||
|
||||
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, _hh, COLORS._main_icon_light);
|
||||
draw_text_add(_x + ui(8), _y + ui(8), "Output...");
|
||||
return _hh;
|
||||
}
|
||||
|
||||
if(typeof(_value) == "ref" && string_starts_with(string(_value), "ref surface")) {
|
||||
var _hh = ui(64);
|
||||
draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, _hh, COLORS._main_icon_light);
|
||||
|
|
BIN
sprites/s_node_vfx_boid/315b67dc-c803-4e72-9801-ef198c97cae1.png
Normal file
BIN
sprites/s_node_vfx_boid/315b67dc-c803-4e72-9801-ef198c97cae1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
90
sprites/s_node_vfx_boid/s_node_vfx_boid.yy
Normal file
90
sprites/s_node_vfx_boid/s_node_vfx_boid.yy
Normal file
|
@ -0,0 +1,90 @@
|
|||
{
|
||||
"$GMSprite":"",
|
||||
"%Name":"s_node_vfx_boid",
|
||||
"bboxMode":0,
|
||||
"bbox_bottom":58,
|
||||
"bbox_left":7,
|
||||
"bbox_right":59,
|
||||
"bbox_top":3,
|
||||
"collisionKind":1,
|
||||
"collisionTolerance":0,
|
||||
"DynamicTexturePage":false,
|
||||
"edgeFiltering":false,
|
||||
"For3D":false,
|
||||
"frames":[
|
||||
{"$GMSpriteFrame":"","%Name":"315b67dc-c803-4e72-9801-ef198c97cae1","name":"315b67dc-c803-4e72-9801-ef198c97cae1","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
],
|
||||
"gridX":0,
|
||||
"gridY":0,
|
||||
"height":64,
|
||||
"HTile":false,
|
||||
"layers":[
|
||||
{"$GMImageLayer":"","%Name":"f78537d0-f9c3-4664-9942-8b890bb575e1","blendMode":0,"displayName":"default","isLocked":false,"name":"f78537d0-f9c3-4664-9942-8b890bb575e1","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
|
||||
],
|
||||
"name":"s_node_vfx_boid",
|
||||
"nineSlice":null,
|
||||
"origin":4,
|
||||
"parent":{
|
||||
"name":"VFX",
|
||||
"path":"folders/nodes/icons/VFX.yy",
|
||||
},
|
||||
"preMultiplyAlpha":false,
|
||||
"resourceType":"GMSprite",
|
||||
"resourceVersion":"2.0",
|
||||
"sequence":{
|
||||
"$GMSequence":"",
|
||||
"%Name":"s_node_vfx_boid",
|
||||
"autoRecord":true,
|
||||
"backdropHeight":768,
|
||||
"backdropImageOpacity":0.5,
|
||||
"backdropImagePath":"",
|
||||
"backdropWidth":1366,
|
||||
"backdropXOffset":0.0,
|
||||
"backdropYOffset":0.0,
|
||||
"events":{
|
||||
"$KeyframeStore<MessageEventKeyframe>":"",
|
||||
"Keyframes":[],
|
||||
"resourceType":"KeyframeStore<MessageEventKeyframe>",
|
||||
"resourceVersion":"2.0",
|
||||
},
|
||||
"eventStubScript":null,
|
||||
"eventToFunction":{},
|
||||
"length":1.0,
|
||||
"lockOrigin":false,
|
||||
"moments":{
|
||||
"$KeyframeStore<MomentsEventKeyframe>":"",
|
||||
"Keyframes":[],
|
||||
"resourceType":"KeyframeStore<MomentsEventKeyframe>",
|
||||
"resourceVersion":"2.0",
|
||||
},
|
||||
"name":"s_node_vfx_boid",
|
||||
"playback":1,
|
||||
"playbackSpeed":30.0,
|
||||
"playbackSpeedType":0,
|
||||
"resourceType":"GMSequence",
|
||||
"resourceVersion":"2.0",
|
||||
"showBackdrop":true,
|
||||
"showBackdropImage":false,
|
||||
"timeUnits":1,
|
||||
"tracks":[
|
||||
{"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"315b67dc-c803-4e72-9801-ef198c97cae1","path":"sprites/s_node_vfx_boid/s_node_vfx_boid.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"b9096a29-6e8e-486e-9532-495ccac08c40","IsCreationKey":false,"Key":0.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,
|
||||
"volume":1.0,
|
||||
"xorigin":32,
|
||||
"yorigin":32,
|
||||
},
|
||||
"swatchColours":null,
|
||||
"swfPrecision":0.5,
|
||||
"textureGroupId":{
|
||||
"name":"Default",
|
||||
"path":"texturegroups/Default",
|
||||
},
|
||||
"type":0,
|
||||
"VTile":false,
|
||||
"width":64,
|
||||
}
|
Loading…
Reference in a new issue