highlight cryp when taking dmg

This commit is contained in:
Mashy 2018-11-25 11:41:59 +10:00
parent e537e052ca
commit feec35fa3a
4 changed files with 66 additions and 60 deletions

View File

@ -89,6 +89,7 @@ function renderCryp(scene, group, cryp, game, team, iter) {
const crypName = scene.add.text(X_PADDING / 2 + TEAM_MARGIN * team, const crypName = scene.add.text(X_PADDING / 2 + TEAM_MARGIN * team,
Y_PADDING / 2 + TEXT_MARGIN + CRYP_MARGIN * iter, cryp.name, TEXT.HEADER); Y_PADDING / 2 + TEXT_MARGIN + CRYP_MARGIN * iter, cryp.name, TEXT.HEADER);
group.add(crypName); group.add(crypName);
return crypSpawn;
} }
function renderSkills(scene, group, cryp, game, team, iter) { function renderSkills(scene, group, cryp, game, team, iter) {
@ -102,17 +103,6 @@ function renderSkills(scene, group, cryp, game, team, iter) {
} }
} }
function animatePhase(scene, group, game, account) {
const resolved = game.resolved[scene.skills.resolvedIter];
const allyCryp = game.teams.find(t => t.id === account.id).cryps.find(
c => c.id === resolved.source_cryp_id || c.id === resolved.target_cryp_id
);
const enemyCryp = game.teams.filter(t => t.id !== account.id)[0].cryps.find(
c => c.id === resolved.source_cryp_id || c.id === resolved.target_cryp_id
);
renderCryp(scene, group, allyCryp, game, 0, 1);
renderCryp(scene, group, enemyCryp, game, 1, 1);
}
class DrawCrypTeams extends Phaser.GameObjects.Group { class DrawCrypTeams extends Phaser.GameObjects.Group {
constructor(scene, game) { constructor(scene, game) {
@ -122,13 +112,9 @@ class DrawCrypTeams extends Phaser.GameObjects.Group {
renderCryp(scene, this, cryp, game, team, iter); renderCryp(scene, this, cryp, game, team, iter);
renderSkills(scene, this, cryp, game, team, iter); renderSkills(scene, this, cryp, game, team, iter);
}; };
if (scene.registry.get('resolve')) {
animatePhase(scene, this, game, account);
} else {
game.teams.find(t => t.id === account.id).cryps.forEach((cryp, i) => renderTeam(cryp, 0, i)); game.teams.find(t => t.id === account.id).cryps.forEach((cryp, i) => renderTeam(cryp, 0, i));
game.teams.filter(t => t.id !== account.id)[0].cryps.forEach((cryp, i) => renderTeam(cryp, 1, i)); game.teams.filter(t => t.id !== account.id)[0].cryps.forEach((cryp, i) => renderTeam(cryp, 1, i));
} }
}
} }
module.exports = { CrypImage, CrypSkill, DrawCrypTeams }; module.exports = { CrypImage, CrypSkill, DrawCrypTeams, renderCryp};

View File

@ -42,7 +42,7 @@ class Combat extends Phaser.Scene {
const logY = COMBAT.LOG.y(); const logY = COMBAT.LOG.y();
const logWidth = COMBAT.LOG.width(); const logWidth = COMBAT.LOG.width();
this.skills = new CombatSkills(this); this.skills = new CombatSkills(this);
this.logIndex = 0; this.logIter = 0; this.resolvedIter = 0;
this.registry.set('resolve', false); this.registry.set('resolve', false);
this.log = this.add.text(logX, logY, '', TEXT.NORMAL); this.log = this.add.text(logX, logY, '', TEXT.NORMAL);
this.log.setWordWrapWidth(logWidth); this.log.setWordWrapWidth(logWidth);
@ -53,7 +53,6 @@ class Combat extends Phaser.Scene {
if (key === 'game') { if (key === 'game') {
if (!this.registry.get('activeSkill') if (!this.registry.get('activeSkill')
&& !this.registry.get('resolve')) { && !this.registry.get('resolve')) {
this.renderCryps(data);
this.renderLog(data); this.renderLog(data);
} }
} }
@ -62,30 +61,31 @@ class Combat extends Phaser.Scene {
renderLog(game) { renderLog(game) {
if (!game) return false; if (!game) return false;
while (game.log.length !== this.logIndex) {
if (game.log[this.logIndex] === '<Resolve Phase>') {
this.registry.set('resolve', true);
this.logIndex += 1;
combatRender(this, game);
break;
} this.logIndex += 1;
}
// shallow copy because reverse mutates
this.log.setText(Array.from(game.log).slice(0, this.logIndex).reverse());
return true;
}
iterateLog() {
this.logIndex += 1;
}
renderCryps(game) {
if (this.crypTeamRender) { if (this.crypTeamRender) {
this.crypTeamRender.destroy(true); this.crypTeamRender.destroy(true);
} this.crypTeamRender = new DrawCrypTeams(this, game);
while (game.log.length !== this.logIter) {
if (game.log[this.logIter] === '<Resolve Phase>') {
this.registry.set('resolve', true);
this.crypTeamRender.destroy(true);
this.logIter += 1;
combatRender(this, game);
break;
} this.logIter += 1;
} }
this.crypTeamRender = new DrawCrypTeams(this, game); // shallow copy because reverse mutates
this.log.setText(Array.from(game.log).slice(0, this.logIter).reverse());
return true; return true;
} }
iterateLog(game) {
this.logIter += 1;
this.resolvedIter += 1;
this.log.setText(Array.from(game.log).slice(0, this.logIter).reverse());
return this.resolvedIter === game.resolved.length;
}
} }
module.exports = Combat; module.exports = Combat;

View File

@ -1,25 +1,51 @@
const Phaser = require('phaser');
const { renderCryp } = require('./combat.cryps');
const randomSkill = () => { const randomSkill = () => {
const skills = ['wall', 'spit', 'gravBlast', 'gravBomb', 'chargeBall']; const skills = ['wall', 'spit', 'gravBlast', 'gravBomb', 'chargeBall'];
return skills[Math.floor(Math.random() * 5)]; return skills[Math.floor(Math.random() * 5)];
}; };
function animatePhase(scene, group, game, account, delay) {
const resolved = game.resolved[scene.resolvedIter];
const allyCryp = game.teams.find(t => t.id === account.id).cryps.find(
c => c.id === resolved.source_cryp_id || c.id === resolved.target_cryp_id
);
const enemyCryp = game.teams.filter(t => t.id !== account.id)[0].cryps.find(
c => c.id === resolved.source_cryp_id || c.id === resolved.target_cryp_id
);
const allySpawn = renderCryp(scene, group, allyCryp, game, 0, 1);
const enemySpawn = renderCryp(scene, group, enemyCryp, game, 1, 1);
const target = allyCryp.id === resolved.target_cryp_id ? allySpawn : enemySpawn;
scene.time.delayedCall(delay, () => {
target.setTint(0xff0000);
});
}
function combatRender(scene, game) { function combatRender(scene, game) {
let delay = 0; let delay = 0;
// const skill = randomSkill(); const skill = randomSkill();
const resolved = game.resolved[scene.skills.resolvedIter]; const resolved = game.resolved[scene.resolvedIter];
const target = resolved.source_team_id === scene.registry.get('account').id; const account = scene.registry.get('account');
delay = scene.skills[resolved.skill](target); const animatedGroup = new Phaser.GameObjects.Group(scene);
scene.iterateLog(game); const target = resolved.source_team_id === account.id;
scene.log.setText(Array.from(game.log).slice(0, scene.logIndex).reverse());
scene.renderCryps(game); delay = scene.skills[skill](target);
if (scene.skills.checkSkillLog(game)) { animatePhase(scene, animatedGroup, game, account, delay[0]);
scene.time.delayedCall(delay, () => {
if (scene.iterateLog(game)) {
scene.time.delayedCall(delay[1], () => {
scene.registry.set('resolve', false); scene.registry.set('resolve', false);
scene.skills.cleanup(); scene.skills.cleanup();
animatedGroup.destroy(true);
scene.renderLog(game);
}); });
} else { } else {
scene.time.delayedCall(delay, () => { scene.time.delayedCall(delay[1], () => {
scene.skills.cleanup(); scene.skills.cleanup();
animatedGroup.destroy(true);
combatRender(scene, game); combatRender(scene, game);
}); });
} }

View File

@ -19,15 +19,9 @@ class CombatSkills extends Phaser.GameObjects.Group {
constructor(scene) { constructor(scene) {
super(scene); super(scene);
this.scene = scene; this.scene = scene;
this.resolvedIter = 0;
} }
checkSkillLog(game) { wall(target) {
this.resolvedIter += 1;
return this.resolvedIter === game.resolved.length;
}
Attack(target) {
const { spawnLocation, speed, img } = animationParams(target); const { spawnLocation, speed, img } = animationParams(target);
const particles = this.scene.add.particles(img); const particles = this.scene.add.particles(img);
const emitter = particles.createEmitter({ const emitter = particles.createEmitter({
@ -41,7 +35,7 @@ class CombatSkills extends Phaser.GameObjects.Group {
}); });
this.add(particles); this.add(particles);
this.scene.time.delayedCall(1000, () => { emitter.stop(); }, [], this.scene); this.scene.time.delayedCall(1000, () => { emitter.stop(); }, [], this.scene);
return 3000; return [1500, 3000];
} }
spit(target) { spit(target) {
@ -60,7 +54,7 @@ class CombatSkills extends Phaser.GameObjects.Group {
}); });
this.add(particles); this.add(particles);
this.scene.time.delayedCall(1000, () => { emitter.stop(); }, [], this); this.scene.time.delayedCall(1000, () => { emitter.stop(); }, [], this);
return 3000; return [1500, 3000];
} }
gravBomb(target) { gravBomb(target) {
@ -83,7 +77,7 @@ class CombatSkills extends Phaser.GameObjects.Group {
}); });
this.add(particles); this.add(particles);
this.scene.time.delayedCall(1000, () => { this.emitter.stop(); well.active = false; }, [], this.scene); this.scene.time.delayedCall(1000, () => { this.emitter.stop(); well.active = false; }, [], this.scene);
return 2500; return [1000, 2500];
} }
gravBlast(target) { gravBlast(target) {
@ -112,7 +106,7 @@ class CombatSkills extends Phaser.GameObjects.Group {
this.add(particles); this.add(particles);
this.scene.time.delayedCall(1000, () => { emitter.stop(); well.x = targetLocation; }, [], this.scene); this.scene.time.delayedCall(1000, () => { emitter.stop(); well.x = targetLocation; }, [], this.scene);
this.scene.time.delayedCall(3000, () => { well.active = false; }, [], this.scene); this.scene.time.delayedCall(3000, () => { well.active = false; }, [], this.scene);
return 3000; return [1500, 3000];
} }
chargeBall(target) { chargeBall(target) {
@ -146,7 +140,7 @@ class CombatSkills extends Phaser.GameObjects.Group {
this.scene.time.delayedCall(1000, () => { emitter.stop(); }, [], this.scene); this.scene.time.delayedCall(1000, () => { emitter.stop(); }, [], this.scene);
this.scene.time.delayedCall(2000, () => { emitter2.active = true; }, [], this.scene); this.scene.time.delayedCall(2000, () => { emitter2.active = true; }, [], this.scene);
this.scene.time.delayedCall(3000, () => { emitter2.stop(); }, [], this.scene); this.scene.time.delayedCall(3000, () => { emitter2.stop(); }, [], this.scene);
return 4000; return [3000, 4000];
} }
cleanup() { cleanup() {