84 lines
3.2 KiB
JavaScript
84 lines
3.2 KiB
JavaScript
const { CrypImage } = require('./combat.cryps');
|
|
const { DELAYS, POSITIONS: { COMBAT } } = require('./constants');
|
|
|
|
const randomSkill = () => {
|
|
const skills = ['wall', 'spit', 'gravBlast', 'gravBomb', 'chargeBall'];
|
|
return skills[Math.floor(Math.random() * 5)];
|
|
};
|
|
|
|
function findResolveCryps(scene, group, game) {
|
|
const resolved = game.resolved[scene.resolvedIter];
|
|
const allyCryp = scene.allyTeam.cryps.find(
|
|
c => c.id === resolved.source_cryp_id || c.id === resolved.target_cryp_id
|
|
);
|
|
const enemyCryp = scene.enemyTeam.cryps.find(
|
|
c => c.id === resolved.source_cryp_id || c.id === resolved.target_cryp_id
|
|
);
|
|
const allySpawn = group.children.entries
|
|
.filter(obj => obj instanceof CrypImage)
|
|
.find(c => c.cryp.id === allyCryp.id);
|
|
const enemySpawn = group.children.entries
|
|
.filter(obj => obj instanceof CrypImage)
|
|
.find(c => c.cryp.id === enemyCryp.id);
|
|
|
|
const target = allyCryp.id === resolved.target_cryp_id ? allySpawn : enemySpawn;
|
|
return {allySpawn, enemySpawn, target };
|
|
}
|
|
|
|
function animatePhase(scene, group, game, delay) {
|
|
// Find cryps and targets
|
|
const tweenParams = (targets, centreSpot, enemy) => {
|
|
let x = centreSpot ? COMBAT.width() * 0.3 : targets.x;
|
|
x = (enemy && centreSpot) ? x + COMBAT.width() * 0.4 : x;
|
|
const y = centreSpot ? COMBAT.height() * 13.25 / 35 : targets.y;
|
|
const ease = 'Power1';
|
|
const duration = DELAYS.MOVE_CREEP;
|
|
return { targets, x, y, ease, duration };
|
|
};
|
|
const { allySpawn, enemySpawn, target } = findResolveCryps(scene, group, game);
|
|
const moveAllyBattle = tweenParams(allySpawn, true, false);
|
|
const moveAllyOrig = tweenParams(allySpawn, false, false);
|
|
const moveEnemyBattle = tweenParams(enemySpawn, true, true);
|
|
const moveEnemyOrig = tweenParams(enemySpawn, false, true);
|
|
// Move cryps into posistion
|
|
scene.tweens.add(moveAllyBattle);
|
|
scene.tweens.add(moveEnemyBattle);
|
|
// Target cryp takes damage into posistion
|
|
scene.time.delayedCall(delay + DELAYS.MOVE_CREEP, () => {
|
|
target.takeDamage(100);
|
|
});
|
|
// Move cryps back
|
|
scene.time.delayedCall(delay + DELAYS.MOVE_CREEP + DELAYS.DAMAGE_TICK, () => {
|
|
scene.tweens.add(moveAllyOrig);
|
|
scene.tweens.add(moveEnemyOrig);
|
|
});
|
|
}
|
|
|
|
|
|
function combatRender(scene, game, group) {
|
|
const skill = randomSkill();
|
|
const resolved = game.resolved[scene.resolvedIter];
|
|
const target = resolved.source_team_id === scene.account.id;
|
|
const delay = DELAYS[skill];
|
|
scene.time.delayedCall(DELAYS.MOVE_CREEP, () => {
|
|
scene.skills[skill](target);
|
|
});
|
|
animatePhase(scene, group, game, delay[0]);
|
|
|
|
if (scene.iterateLog(game)) {
|
|
scene.time.delayedCall(delay[1] + DELAYS.MOVE_CREEP * 2, () => {
|
|
scene.registry.set('resolve', false);
|
|
scene.skills.cleanup();
|
|
scene.renderLog(game);
|
|
});
|
|
} else {
|
|
scene.time.delayedCall(delay[1] + DELAYS.MOVE_CREEP * 2, () => {
|
|
scene.skills.cleanup();
|
|
combatRender(scene, game, group);
|
|
});
|
|
}
|
|
return true;
|
|
}
|
|
|
|
module.exports = combatRender;
|