stellar-lines/src/app/ui/planet-status.ui.ts
Bastian Wagner a5767a2c79 alpha
2025-04-26 18:12:52 +02:00

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();
}
}