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 00c6d6c..eda4c06 100644 Binary files a/public/assets/dude.png and b/public/assets/dude.png differ