61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { GoodType } from "../model/goods/good-type.enum";
|
|
import { PlanetUi } from "./planet.ui";
|
|
|
|
export class PlanetStatus {
|
|
private container: Phaser.GameObjects.Container;
|
|
private text: Phaser.GameObjects.Text;
|
|
|
|
constructor(
|
|
private scene: Phaser.Scene,
|
|
private planetSprite: PlanetUi,
|
|
private getPopulation: () => number,
|
|
private getGrowthState: () => 'growing' | 'shrinking',
|
|
private getCriticalGoods: () => GoodType[]
|
|
) {
|
|
this.text = scene.add.text(0, 0, '', {
|
|
fontSize: '12px',
|
|
color: '#ffffff',
|
|
backgroundColor: '#00000088',
|
|
padding: { x: 5, y: 3 },
|
|
align: 'center'
|
|
}).setOrigin(0.5, 1);
|
|
|
|
this.container = scene.add.container(planetSprite.getWorldPoint().x, planetSprite.getWorldPoint().y - (planetSprite.height / 2) - 5, [this.text]);
|
|
this.container.setDepth(100); // über Planeten
|
|
}
|
|
|
|
update() {
|
|
this.container.setScale(1 / this.scene.cameras.main.zoom)
|
|
const population = Math.floor(this.getPopulation());
|
|
const growth = this.getGrowthState();
|
|
const criticalGoods = this.getCriticalGoods();
|
|
|
|
let growthSymbol = '';
|
|
if (growth === 'growing') {
|
|
growthSymbol = '🚀';
|
|
} else if (growth === 'shrinking') {
|
|
growthSymbol = '⬇️';
|
|
}
|
|
|
|
let criticalText = '';
|
|
if (criticalGoods.length > 0) {
|
|
criticalText = ' 🛑 ' + criticalGoods.map(g => g.toString().substring(0, 2)).join(',');
|
|
}
|
|
|
|
let text = `${this.planetSprite.model.name}`;
|
|
|
|
if (this.planetSprite.model.hasHarbour) {
|
|
text += `, 👥 ${population} ${growthSymbol}${criticalText}`
|
|
}
|
|
|
|
this.text.setText(text);
|
|
|
|
// Position immer über Planet aktualisieren
|
|
this.container.setPosition(this.planetSprite.x, this.planetSprite.y - (this.planetSprite.height / 2) - 5);
|
|
}
|
|
|
|
destroy() {
|
|
this.text.destroy();
|
|
this.container.destroy();
|
|
}
|
|
} |