From b40c80caff80e1db01b36ef21ac0ca88d945dd1f Mon Sep 17 00:00:00 2001 From: cha0s Date: Wed, 12 Jun 2024 19:35:51 -0500 Subject: [PATCH] feat: animation control --- app/ecs-components/direction.js | 3 + app/ecs-systems/control-direction.js | 27 ++ app/ecs-systems/sprite-direction.js | 39 ++ app/engine/engine.js | 38 +- public/assets/dude.json | 632 +-------------------------- public/assets/dude.png | Bin 4167 -> 9442 bytes 6 files changed, 95 insertions(+), 644 deletions(-) create mode 100644 app/ecs-components/direction.js create mode 100644 app/ecs-systems/control-direction.js create mode 100644 app/ecs-systems/sprite-direction.js diff --git a/app/ecs-components/direction.js b/app/ecs-components/direction.js new file mode 100644 index 0000000..fc88cd8 --- /dev/null +++ b/app/ecs-components/direction.js @@ -0,0 +1,3 @@ +export default { + direction: {type: 'uint8'}, +}; diff --git a/app/ecs-systems/control-direction.js b/app/ecs-systems/control-direction.js new file mode 100644 index 0000000..4994987 --- /dev/null +++ b/app/ecs-systems/control-direction.js @@ -0,0 +1,27 @@ +import {System} from '@/ecs/index.js'; + +export default class ControlDirection extends System { + + tick() { + const {diff} = this.ecs; + for (const id in diff) { + const {Controlled} = diff[id]; + if (Controlled) { + const {Controlled: {up, right, down, left}, Direction} = this.ecs.get(id); + if (up > 0) { + Direction.direction = 0; + } + if (down > 0) { + Direction.direction = 2; + } + if (left > 0) { + Direction.direction = 3; + } + if (right > 0) { + Direction.direction = 1; + } + } + } + } + +} diff --git a/app/ecs-systems/sprite-direction.js b/app/ecs-systems/sprite-direction.js new file mode 100644 index 0000000..e061782 --- /dev/null +++ b/app/ecs-systems/sprite-direction.js @@ -0,0 +1,39 @@ +import {System} from '@/ecs/index.js'; + +export default class SpriteDirection extends System { + + static queries() { + return { + default: ['Sprite'], + }; + } + + tick() { + for (const [Sprite, entityId] of this.select('default')) { + const entity = this.ecs.get(entityId); + const parts = []; + if (entity.Controlled) { + const {up, right, down, left} = entity.Controlled; + if (up > 0 || right > 0 || down > 0 || left > 0) { + parts.push('moving'); + } + else { + parts.push('idle'); + } + } + if (entity.Direction) { + const name = { + 0: 'up', + 1: 'right', + 2: 'down', + 3: 'left', + }; + parts.push(name[entity.Direction.direction]); + } + if (parts.length > 0) { + Sprite.animation = parts.join(':'); + } + } + } + +} diff --git a/app/engine/engine.js b/app/engine/engine.js index 38a12ba..712c29b 100644 --- a/app/engine/engine.js +++ b/app/engine/engine.js @@ -9,6 +9,8 @@ import CalculateAabbs from '@/ecs-systems/calculate-aabbs.js'; import FollowCamera from '@/ecs-systems/follow-camera.js'; import UpdateSpatialHash from '@/ecs-systems/update-spatial-hash.js'; import RunAnimations from '@/ecs-systems/run-animations.js'; +import ControlDirection from '@/ecs-systems/control-direction.js'; +import SpriteDirection from '@/ecs-systems/sprite-direction.js'; import Ecs from '@/engine/ecs.js'; import {decode, encode} from '@/packets/index.js'; @@ -16,16 +18,17 @@ const players = { 0: { Camera: {}, Controlled: {up: 0, right: 0, down: 0, left: 0}, + Direction: {direction: 2}, Momentum: {}, Position: {x: 368, y: 368}, VisibleAabb: {}, World: {world: 1}, Sprite: { - animation: 'down', + animation: 'moving:down', frame: 0, frames: 8, source: '/assets/dude.json', - speed: 0.1, + speed: 0.115, }, }, }; @@ -34,6 +37,8 @@ export default class Engine { static Ecs = Ecs; + incoming = []; + constructor(Server) { const ecs = new this.constructor.Ecs(); const layerSize = {x: Math.ceil(RESOLUTION.x / 4), y: Math.ceil(RESOLUTION.y / 4)}; @@ -57,6 +62,8 @@ export default class Engine { ecs.addSystem(FollowCamera); ecs.addSystem(CalculateAabbs); ecs.addSystem(UpdateSpatialHash); + ecs.addSystem(ControlDirection); + ecs.addSystem(SpriteDirection); ecs.addSystem(RunAnimations); this.ecses = { 1: ecs, @@ -79,17 +86,8 @@ export default class Engine { }); } - accept(connection, {payload, type}) { - switch (type) { - case 'Action': { - const {entity} = this.connectedPlayers.get(connection); - if (payload.type in MOVE_MAP) { - entity.Controlled[MOVE_MAP[payload.type]] = payload.value; - } - break; - } - default: - } + accept(connection, packet) { + this.incoming.push([this.connectedPlayers.get(connection).entity, packet]); } async connectPlayer(connection) { @@ -135,6 +133,20 @@ export default class Engine { tick(elapsed) { for (const i in this.ecses) { this.ecses[i].setClean(); + } + for (const [{Controlled}, {payload, type}] of this.incoming) { + switch (type) { + case 'Action': { + if (payload.type in MOVE_MAP) { + Controlled[MOVE_MAP[payload.type]] = payload.value; + } + break; + } + default: + } + } + this.incoming = []; + for (const i in this.ecses) { this.ecses[i].tick(elapsed); } } diff --git a/public/assets/dude.json b/public/assets/dude.json index 3a83dc6..eb35b65 100644 --- a/public/assets/dude.json +++ b/public/assets/dude.json @@ -1,631 +1 @@ -{ - "animations": { - "up": [ - "dude/0", - "dude/1", - "dude/2", - "dude/3", - "dude/4", - "dude/5", - "dude/6", - "dude/7" - ], - "right": [ - "dude/8", - "dude/9", - "dude/10", - "dude/11", - "dude/12", - "dude/13", - "dude/14", - "dude/15" - ], - "down": [ - "dude/16", - "dude/17", - "dude/18", - "dude/19", - "dude/20", - "dude/21", - "dude/22", - "dude/23" - ], - "left": [ - "dude/24", - "dude/25", - "dude/26", - "dude/27", - "dude/28", - "dude/29", - "dude/30", - "dude/31" - ] - }, - "frames": { - "dude/0": { - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/1": { - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/2": { - "frame": { - "x": 64, - "y": 0, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/3": { - "frame": { - "x": 96, - "y": 0, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/4": { - "frame": { - "x": 128, - "y": 0, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/5": { - "frame": { - "x": 160, - "y": 0, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/6": { - "frame": { - "x": 192, - "y": 0, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/7": { - "frame": { - "x": 224, - "y": 0, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/8": { - "frame": { - "x": 0, - "y": 32, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/9": { - "frame": { - "x": 32, - "y": 32, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/10": { - "frame": { - "x": 64, - "y": 32, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/11": { - "frame": { - "x": 96, - "y": 32, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/12": { - "frame": { - "x": 128, - "y": 32, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/13": { - "frame": { - "x": 160, - "y": 32, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/14": { - "frame": { - "x": 192, - "y": 32, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/15": { - "frame": { - "x": 224, - "y": 32, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/16": { - "frame": { - "x": 0, - "y": 64, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/17": { - "frame": { - "x": 32, - "y": 64, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/18": { - "frame": { - "x": 64, - "y": 64, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/19": { - "frame": { - "x": 96, - "y": 64, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/20": { - "frame": { - "x": 128, - "y": 64, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/21": { - "frame": { - "x": 160, - "y": 64, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/22": { - "frame": { - "x": 192, - "y": 64, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/23": { - "frame": { - "x": 224, - "y": 64, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/24": { - "frame": { - "x": 0, - "y": 96, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/25": { - "frame": { - "x": 32, - "y": 96, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/26": { - "frame": { - "x": 64, - "y": 96, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/27": { - "frame": { - "x": 96, - "y": 96, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/28": { - "frame": { - "x": 128, - "y": 96, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/29": { - "frame": { - "x": 160, - "y": 96, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/30": { - "frame": { - "x": 192, - "y": 96, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - }, - "dude/31": { - "frame": { - "x": 224, - "y": 96, - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 32 - }, - "sourceSize": { - "w": 32, - "h": 32 - } - } - }, - "meta": { - "format": "RGBA8888", - "image": "dude.png", - "scale": 1, - "size": { - "w": 256, - "h": 128 - } - } -} \ No newline at end of file +{"animations":{"idle:up":["dude/0","dude/1","dude/2","dude/3","dude/4","dude/5","dude/6","dude/7"],"idle:right":["dude/8","dude/9","dude/10","dude/11","dude/12","dude/13","dude/14","dude/15"],"idle:down":["dude/16","dude/17","dude/18","dude/19","dude/20","dude/21","dude/22","dude/23"],"idle:left":["dude/24","dude/25","dude/26","dude/27","dude/28","dude/29","dude/30","dude/31"],"moving:up":["dude/32","dude/33","dude/34","dude/35","dude/36","dude/37","dude/38","dude/39"],"moving:right":["dude/40","dude/41","dude/42","dude/43","dude/44","dude/45","dude/46","dude/47"],"moving:down":["dude/48","dude/49","dude/50","dude/51","dude/52","dude/53","dude/54","dude/55"],"moving:left":["dude/56","dude/57","dude/58","dude/59","dude/60","dude/61","dude/62","dude/63"]},"frames":{"dude/0":{"frame":{"x":0,"y":0,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/1":{"frame":{"x":32,"y":0,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/2":{"frame":{"x":64,"y":0,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/3":{"frame":{"x":96,"y":0,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/4":{"frame":{"x":128,"y":0,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/5":{"frame":{"x":160,"y":0,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/6":{"frame":{"x":192,"y":0,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/7":{"frame":{"x":224,"y":0,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/8":{"frame":{"x":0,"y":32,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/9":{"frame":{"x":32,"y":32,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/10":{"frame":{"x":64,"y":32,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/11":{"frame":{"x":96,"y":32,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/12":{"frame":{"x":128,"y":32,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/13":{"frame":{"x":160,"y":32,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/14":{"frame":{"x":192,"y":32,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/15":{"frame":{"x":224,"y":32,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/16":{"frame":{"x":0,"y":64,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/17":{"frame":{"x":32,"y":64,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/18":{"frame":{"x":64,"y":64,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/19":{"frame":{"x":96,"y":64,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/20":{"frame":{"x":128,"y":64,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/21":{"frame":{"x":160,"y":64,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/22":{"frame":{"x":192,"y":64,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/23":{"frame":{"x":224,"y":64,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/24":{"frame":{"x":0,"y":96,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/25":{"frame":{"x":32,"y":96,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/26":{"frame":{"x":64,"y":96,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/27":{"frame":{"x":96,"y":96,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/28":{"frame":{"x":128,"y":96,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/29":{"frame":{"x":160,"y":96,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/30":{"frame":{"x":192,"y":96,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/31":{"frame":{"x":224,"y":96,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/32":{"frame":{"x":0,"y":128,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/33":{"frame":{"x":32,"y":128,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/34":{"frame":{"x":64,"y":128,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/35":{"frame":{"x":96,"y":128,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/36":{"frame":{"x":128,"y":128,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/37":{"frame":{"x":160,"y":128,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/38":{"frame":{"x":192,"y":128,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/39":{"frame":{"x":224,"y":128,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/40":{"frame":{"x":0,"y":160,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/41":{"frame":{"x":32,"y":160,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/42":{"frame":{"x":64,"y":160,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/43":{"frame":{"x":96,"y":160,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/44":{"frame":{"x":128,"y":160,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/45":{"frame":{"x":160,"y":160,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/46":{"frame":{"x":192,"y":160,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/47":{"frame":{"x":224,"y":160,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/48":{"frame":{"x":0,"y":192,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/49":{"frame":{"x":32,"y":192,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/50":{"frame":{"x":64,"y":192,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/51":{"frame":{"x":96,"y":192,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/52":{"frame":{"x":128,"y":192,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/53":{"frame":{"x":160,"y":192,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/54":{"frame":{"x":192,"y":192,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/55":{"frame":{"x":224,"y":192,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/56":{"frame":{"x":0,"y":224,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/57":{"frame":{"x":32,"y":224,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/58":{"frame":{"x":64,"y":224,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/59":{"frame":{"x":96,"y":224,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/60":{"frame":{"x":128,"y":224,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/61":{"frame":{"x":160,"y":224,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/62":{"frame":{"x":192,"y":224,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}},"dude/63":{"frame":{"x":224,"y":224,"w":32,"h":32},"spriteSourceSize":{"x":0,"y":0,"w":32,"h":32},"sourceSize":{"w":32,"h":32}}},"meta":{"format":"RGBA8888","image":"dude.png","scale":1,"size":{"w":256,"h":256}}} \ No newline at end of file diff --git a/public/assets/dude.png b/public/assets/dude.png index 00c6d6c0c34470f740eb8c3d6f8c2a2c676074b8..eda4c06521bd7b53ea98d84bda14d8590afa81bc 100644 GIT binary patch literal 9442 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 Wro6mor2o!3;wkPg{!s delta 3374 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