90 lines
2.9 KiB
JavaScript
90 lines
2.9 KiB
JavaScript
const Phaser = require('phaser');
|
|
const { POSITIONS: { COMBAT } } = require('./constants');
|
|
|
|
const CRYP_MARGIN = COMBAT.crypMargin();
|
|
const BOX_HEIGHT = CRYP_MARGIN * 0.8;
|
|
const BOX_WIDTH = COMBAT.width() * 0.2;
|
|
|
|
|
|
class CrypHitBox extends Phaser.GameObjects.Rectangle {
|
|
constructor(scene, iter, team, cback) {
|
|
const y = COMBAT.y() + COMBAT.height() * 0.05 + CRYP_MARGIN * iter;
|
|
super(scene, (COMBAT.width() - BOX_WIDTH) * team, y, BOX_WIDTH, BOX_HEIGHT, 0x222222);
|
|
this.setOrigin(0);
|
|
this.clickHandler = () => cback();
|
|
}
|
|
|
|
select() {
|
|
this.setFillStyle(0x003300);
|
|
}
|
|
|
|
deselect() {
|
|
this.setFillStyle(0x222222);
|
|
}
|
|
}
|
|
|
|
class CombatHitBox extends Phaser.Scene {
|
|
constructor() {
|
|
super({ key: 'CombatHitBox' });
|
|
}
|
|
|
|
create(phase) {
|
|
this.phase = phase;
|
|
this.registry.events.off('changedata', this.updateData);
|
|
this.registry.events.on('changedata', this.updateData, this);
|
|
if (phase === 'animating') return true;
|
|
this.selectHitBox(phase);
|
|
return true;
|
|
}
|
|
|
|
updateData(parent, key, data) {
|
|
if (key === 'game' && data) {
|
|
// In the case that we hit skill phase but teams change we restart
|
|
if (data.teams.length !== this.teams) this.scene.restart(data.phase);
|
|
}
|
|
if (key === 'gamePhase' && data) {
|
|
const shouldUpdate = data !== this.phase;
|
|
if (shouldUpdate) this.scene.restart(data);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
selectHitBox(phase) {
|
|
const game = this.registry.get('game');
|
|
this.teams = game.teams.length;
|
|
if (phase === 'Skill') return this.skillHitBox(game);
|
|
return false;
|
|
}
|
|
|
|
skillHitBox(game) {
|
|
const account = this.registry.get('account');
|
|
const group = this.scene.get('CombatCryps').cryps;
|
|
const skillScene = this.scene.get('CombatSkills');
|
|
game.teams.forEach((t) => {
|
|
t.cryps.forEach((c) => {
|
|
const cback = () => {
|
|
const { activeSkill } = skillScene;
|
|
if (activeSkill) {
|
|
this.scene.get('CombatSkills').clearCrypActive(activeSkill.cryp.id);
|
|
activeSkill.activate();
|
|
skillScene.activeSkill = null;
|
|
this.game.events.emit('SEND_SKILL', game.id, activeSkill.cryp.id, c.id, activeSkill.skill.skill);
|
|
}
|
|
};
|
|
const crypSpawn = group.children.entries.find(s => s.cryp.id === c.id);
|
|
const team = c.account === account.id ? 0 : 1;
|
|
if (crypSpawn) this.add.existing(new CrypHitBox(this, crypSpawn.iter, team, cback));
|
|
});
|
|
});
|
|
this.scene.moveBelow('Combat');
|
|
}
|
|
|
|
cleanUp() {
|
|
this.registry.events.off('changedata', this.updateData);
|
|
this.scene.remove();
|
|
}
|
|
}
|
|
|
|
module.exports = CombatHitBox;
|