// Skill function called by phaser combat const Phaser = require('phaser'); function skills(skill, img, location, spd) { if (this.combat) { return; } this.combat = true; const particles = this.add.particles(img); switch (skill) { case 'blast': this.proj = this.physics.add.image(-100, 300, 'proj'); this.emitter = particles.createEmitter({ speed: 25, scale: { start: 1, end: 0 }, blendMode: 'ADD', }); this.emitter.startFollow(this.proj); this.physics.add.overlap(this.proj, this.players, this.explode, null, this); this.proj.x = location; this.proj.setVelocity(spd, 0); break; case 'wall': this.emitter = particles.createEmitter({ x: location, y: { min: 200, max: 350 }, lifespan: 2000, speedX: { min: spd, max: spd * 2 }, scale: { start: 0.4, end: 0 }, quantity: 4, blendMode: 'ADD', }); this.time.delayedCall(1000, () => { this.emitter.stop(); }, [], this); break; case 'spit': if (location > 250) { this.angleMin = 180; this.angleMax = 220; } else { this.angleMin = 320; this.angleMax = 360; } this.emitter = particles.createEmitter({ x: location, y: 300, lifespan: 2000, angle: { min: this.angleMin, max: this.angleMax }, speed: spd * 2, scale: { start: 0.4, end: 1 }, gravityY: 250, quantity: 4, blendMode: 'ADD', }); this.time.delayedCall(1000, () => { this.emitter.stop(); }, [], this); break; case 'gravBomb': this.well = particles.createGravityWell({ x: 150, y: 150, power: 4, gravity: 500, }); this.emitter = particles.createEmitter({ x: 150, y: 150, lifespan: 1500, speed: 1000, scale: { start: 0.7, end: 1 }, blendMode: 'ADD', }); this.time.delayedCall(1000, () => { this.emitter.stop(); this.well.active = false; }, [], this); break; case 'gravBlast': this.well = particles.createGravityWell({ x: 400, y: 300, power: 4, gravity: 500, }); this.emitter = particles.createEmitter({ x: 400, y: 300, lifespan: 2000, speed: 1000, scale: { start: 0.7, end: 1 }, blendMode: 'ADD', bounds: { x: 0, y: 250, w: 450, h: 150, }, }); this.time.delayedCall(1000, () => { this.emitter.stop(); this.well.x = 100; }, [], this); this.time.delayedCall(3000, () => { this.well.active = false; }, [], this); break; case 'chargeBall': this.emitter = particles.createEmitter({ x: -400, y: -100, lifespan: 1000, moveToX: 450, moveToY: 150, scale: 0.75, quantity: 4, _frequency: 20, blendMode: 'ADD', emitZone: { source: new Phaser.Geom.Rectangle(0, 0, 1600, 700) }, }); this.emitter2 = particles.createEmitter({ radial: false, x: { min: 450, max: 50, steps: 256 }, y: { min: 150, max: 300, steps: 256 }, lifespan: 1000, speedX: { min: 200, max: 400 }, quantity: 4, gravityY: 0, scale: { start: 1.5, end: 0, ease: 'Power3' }, blendMode: 'ADD', active: false, }); this.time.delayedCall(1000, () => { this.emitter.stop(); }, [], this); this.time.delayedCall(2000, () => { this.emitter2.active = true; }, [], this); this.time.delayedCall(3000, () => { this.emitter2.stop(); }, [], this); break; default: break; } } module.exports = skills;