diff --git a/app/ecs-components/wielder.js b/app/ecs-components/wielder.js index 5e23ea4..e73feb9 100644 --- a/app/ecs-components/wielder.js +++ b/app/ecs-components/wielder.js @@ -9,6 +9,58 @@ export default function(Component) { const {Inventory, Wielder} = Component.ecs.get(this.entity); return Inventory.item(Wielder.activeSlot + 1); }; + Instance.prototype.project = function(position, projection) { + const {Direction: {direction}} = Component.ecs.get(this.entity); + let startX = position.x; + let startY = position.y; + switch (direction) { + case 0: + startX += projection.distance[1]; + startY -= projection.distance[0]; + break; + case 1: + startX += projection.distance[0]; + startY += projection.distance[1]; + break; + case 2: + startX -= projection.distance[1]; + startY += projection.distance[0]; + break; + case 3: + startX -= projection.distance[0]; + startY -= projection.distance[1]; + break; + } + const projected = []; + for (const row in projection.grid) { + const columns = projection.grid[row]; + for (const column in columns) { + const targeted = projection.grid[row][column]; + if (targeted) { + let axe; + switch (direction) { + case 0: + axe = [column, row]; + break; + case 1: + axe = [-row, column]; + break; + case 2: + axe = [-column, -row]; + break; + case 3: + axe = [row, -column]; + break; + } + projected.push({ + x: startX + parseInt(axe[0]), + y: startY + parseInt(axe[1]), + }) + } + } + } + return projected; + } return Instance; } static schema = new Schema({