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;