const {Direction, Position, Wielder} = wielder const projected = Wielder.activeItem()?.project(Position.tile, Direction.direction) if (projected?.length > 0) { const {Controlled, Emitter, Sound, Sprite} = wielder const {TileLayers} = ecs.get(1) const layer = TileLayers.layer(0) Controlled.locked = 1; const [, direction] = Sprite.animation.split(':') const plant = { Collider: { bodies: [ { points: [ {x: -8, y: -8}, {x: 7, y: -8}, {x: -8, y: 7}, {x: 7, y: 7}, ], }, ], }, Interactive: { interactScript: '/assets/tomato-plant/interact.js', }, Plant: { growScript: '/assets/tomato-plant/grow.js', mayGrowScript: '/assets/tomato-plant/may-grow.js', stages: Array(5).fill(0.5), }, Sprite: { anchorX: 0.5, anchorY: 0.75, animation: 'stage/0', frame: 0, frames: 1, source: '/assets/tomato-plant/tomato-plant.json', speed: 0, }, Ticking: {}, VisibleAabb: {}, }; const seedParticles = { behaviors: [ { type: 'moveAcceleration', config: { accel: { x: 0, y: 400, }, minStart: 0, maxStart: 0, rotate: false, } }, { type: 'moveSpeed', config: { speed: { list: [ { time: 0, value: 100 }, { time: 1, value: 10 } ] } } }, { type: 'rotation', config: { accel: 0, minSpeed: 0, maxSpeed: 0, minStart: 225, maxStart: 320 } }, { type: 'scale', config: { scale: { list: [ { value: 0.75, time: 0, }, { value: 0.5, time: 1, }, ] } } }, { type: 'textureSingle', config: { texture: 'tomato-plant/tomato-plant/0', } }, ], lifetime: { min: 0.25, max: 0.25, }, frequency: 0.01, emitterLifetime: 0.75, pos: { x: Position.x, y: Position.y, }, }; Emitter.emit(seedParticles) Sound.play('/assets/sow.wav'); Sprite.animation = ['moving', direction].join(':'); for (let i = 0; i < 6; ++i) { Direction.direction = Math.floor(Math.random() * 4); Sprite.animation = ['moving', 0 === Direction.direction ? 'up' : (1 === Direction.direction ? 'right' : (2 === Direction.direction ? 'down' : 'left'))].join(':'); await wait(0.125); } Sprite.animation = ['idle', direction].join(':'); const promises = []; for (let i = 0; i < projected.length; ++i) { promises.push(ecs.create({ ...plant, Plant: { ...plant.Plant, growthFactor: Math.floor(Math.random() * 256), }, Position: { x: projected[i].x * layer.tileSize.x + (0.5 * layer.tileSize.x), y: projected[i].y * layer.tileSize.y + (0.5 * layer.tileSize.y), }, })) } await Promise.all(promises) Controlled.locked = 0; }