51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
const Phaser = require('phaser');
|
|
const { POSITIONS: { COMBAT }, TEXT } = require('./constants');
|
|
|
|
class CombatLog extends Phaser.Scene {
|
|
constructor() {
|
|
super({ key: 'CombatLog' });
|
|
}
|
|
|
|
create(game) {
|
|
this.registry.events.on('changedata', this.updateData, this);
|
|
this.cameras.main.setViewport(COMBAT.LOG.x(), COMBAT.LOG.y(), COMBAT.LOG.width(), COMBAT.LOG.height());
|
|
this.log = this.add.text(0, 0, '', TEXT.NORMAL);
|
|
this.logIndex = game.log.length;
|
|
this.logData = game.log;
|
|
this.log.setWordWrapWidth(COMBAT.LOG.width());
|
|
this.log.setText(Array.from(game.log).reverse());
|
|
}
|
|
|
|
updateData(parent, key, data) {
|
|
const UPDATE_KEYS = ['game', 'gameLog'];
|
|
if (UPDATE_KEYS.includes(key) && data) {
|
|
if (key === 'game') {
|
|
this.logData = data.log;
|
|
}
|
|
if (key === 'gameLog') {
|
|
this.logIndex = data;
|
|
}
|
|
this.updateLog();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
updateLog() {
|
|
// shallow copy because reverse mutates
|
|
if (this.logData.length > this.logIndex + 1
|
|
&& Array.from(this.logData)[this.logIndex].slice(-2) === 'KO') {
|
|
this.logIndex += 1;
|
|
this.registry.set('gameLog', this.logIndex);
|
|
}
|
|
// }
|
|
this.log.setText(Array.from(this.logData).slice(0, this.logIndex).reverse());
|
|
}
|
|
|
|
cleanUp() {
|
|
this.registry.events.off('changedata', this.updateData);
|
|
this.scene.remove();
|
|
}
|
|
}
|
|
|
|
module.exports = CombatLog;
|