From b4c38d1ee078016a032c5be88cf52b650e69729f Mon Sep 17 00:00:00 2001 From: cha0s Date: Wed, 26 Jun 2024 09:17:35 -0500 Subject: [PATCH] feat: projection verification --- app/ecs-components/wielder.js | 11 +- public/assets/hoe/start.js | 233 +++++++++++++++++----------------- 2 files changed, 126 insertions(+), 118 deletions(-) diff --git a/app/ecs-components/wielder.js b/app/ecs-components/wielder.js index e73feb9..a4ded67 100644 --- a/app/ecs-components/wielder.js +++ b/app/ecs-components/wielder.js @@ -10,6 +10,7 @@ export default function(Component) { return Inventory.item(Wielder.activeSlot + 1); }; Instance.prototype.project = function(position, projection) { + const {TileLayers: {layers: [layer]}} = Component.ecs.get(1); const {Direction: {direction}} = Component.ecs.get(this.entity); let startX = position.x; let startY = position.y; @@ -52,10 +53,12 @@ export default function(Component) { axe = [row, -column]; break; } - projected.push({ - x: startX + parseInt(axe[0]), - y: startY + parseInt(axe[1]), - }) + const x = startX + parseInt(axe[0]); + const y = startY + parseInt(axe[1]); + if (x < 0 || y < 0 || x >= layer.area.x || y >= layer.area.y) { + continue; + } + projected.push({x, y}); } } } diff --git a/public/assets/hoe/start.js b/public/assets/hoe/start.js index f964404..c33e2cf 100644 --- a/public/assets/hoe/start.js +++ b/public/assets/hoe/start.js @@ -1,123 +1,128 @@ -const {Controlled, Emitter, Position, Sound, Sprite, Wielder} = wielder -const {TileLayers} = ecs.get(1) -const layer = TileLayers.layer(0) +const {Position, Wielder} = wielder const projected = Wielder.project(Position.tile, item.tool.projection) +if (projected.length > 0) { -Controlled.locked = 1; -const [, direction] = Sprite.animation.split(':'); + const {Controlled, Emitter, Sound, Sprite} = wielder + const {TileLayers} = ecs.get(1) + const layer = TileLayers.layer(0) -const dirtParticles = { - behaviors: [ - { - type: 'moveAcceleration', - config: { - accel: { - x: 0, - y: 200, - }, - minStart: 0, - maxStart: 0, - rotate: false, - } - }, - { - type: 'moveSpeed', - config: { - speed: { - list: [ - { - time: 0, - value: 60 - }, - { - time: 1, - value: 10 - } - ] + Controlled.locked = 1 + const [, direction] = Sprite.animation.split(':') + + const dirtParticles = { + behaviors: [ + { + type: 'moveAcceleration', + config: { + accel: { + x: 0, + y: 200, + }, + minStart: 0, + maxStart: 0, + rotate: false, } - } - }, - { - type: 'rotation', - config: { - accel: 0, - minSpeed: 0, - maxSpeed: 0, - minStart: 225, - maxStart: 320 - } - }, - { - type: 'scale', - config: { - scale: { - list: [ - { - value: 0.25, - time: 0, - }, - { - value: 0.125, - time: 1, - }, - ] - } - } - }, - { - type: 'textureSingle', - config: { - texture: 'tileset/7', - } - }, - ], - lifetime: { - min: 0.25, - max: 0.25, - }, - frequency: 0.01, - emitterLifetime: 0.25, - pos: { - x: 0, - y: 0 - }, -}; - -for (let i = 0; i < 2; ++i) { - Sound.play('/assets/hoe/dig.wav'); - for (let i = 0; i < projected.length; ++i) { - Emitter.emit({ - ...dirtParticles, - behaviors: [ - ...dirtParticles.behaviors, - { - type: 'spawnShape', - config: { - type: 'rect', - data: { - x: projected[i].x * layer.tileSize.x, - y: projected[i].y * layer.tileSize.y, - w: layer.tileSize.x, - h: layer.tileSize.y, - } + }, + { + type: 'moveSpeed', + config: { + speed: { + list: [ + { + time: 0, + value: 60 + }, + { + time: 1, + value: 10 + } + ] } } - ] - }) - } - Sprite.animation = ['moving', direction].join(':'); - await wait(300) - Sprite.animation = ['idle', direction].join(':'); - await wait(100) -} + }, + { + type: 'rotation', + config: { + accel: 0, + minSpeed: 0, + maxSpeed: 0, + minStart: 225, + maxStart: 320 + } + }, + { + type: 'scale', + config: { + scale: { + list: [ + { + value: 0.25, + time: 0, + }, + { + value: 0.125, + time: 1, + }, + ] + } + } + }, + { + type: 'textureSingle', + config: { + texture: 'tileset/7', + } + }, + ], + lifetime: { + min: 0.25, + max: 0.25, + }, + frequency: 0.01, + emitterLifetime: 0.25, + pos: { + x: 0, + y: 0 + }, + }; -for (let i = 0; i < projected.length; ++i) { - if ([1, 2, 3, 4].includes(layer.tile(projected[i]))) { - layer.stamp(projected[i], [[6]]) + for (let i = 0; i < 2; ++i) { + Sound.play('/assets/hoe/dig.wav'); + for (let i = 0; i < projected.length; ++i) { + Emitter.emit({ + ...dirtParticles, + behaviors: [ + ...dirtParticles.behaviors, + { + type: 'spawnShape', + config: { + type: 'rect', + data: { + x: projected[i].x * layer.tileSize.x, + y: projected[i].y * layer.tileSize.y, + w: layer.tileSize.x, + h: layer.tileSize.y, + } + } + } + ] + }) + } + Sprite.animation = ['moving', direction].join(':'); + await wait(300) + Sprite.animation = ['idle', direction].join(':'); + await wait(100) } - else if ([6].includes(layer.tile(projected[i]))) { - layer.stamp(projected[i], [[7]]) - } -} -Controlled.locked = 0; + for (let i = 0; i < projected.length; ++i) { + if ([1, 2, 3, 4].includes(layer.tile(projected[i]))) { + layer.stamp(projected[i], [[6]]) + } + else if ([6].includes(layer.tile(projected[i]))) { + layer.stamp(projected[i], [[7]]) + } + } + + Controlled.locked = 0; + +}