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

76 lines
2.2 KiB
TypeScript

import { EventEmitter } from "@angular/core";
import { interval } from "rxjs";
import { Planet } from "../model/planet.model";
import { PlanetStatus } from "./planet-status.ui";
import { GameService } from "../service/game.service";
export class PlanetUi extends Phaser.Physics.Arcade.Sprite {
public leftClick: EventEmitter<PlanetUi> = new EventEmitter();
public rightClick: EventEmitter<PlanetUi> = new EventEmitter();
public model: Planet;
private status: PlanetStatus | undefined;
private harbourImage!: any;
private updateInterval = interval(1000)
constructor(scene: Phaser.Scene, x: number, y: number, texture: string, config: any, gameService: GameService) {
super(scene, x, y, texture);
// this.setDisplaySize(200, 200);
this.model = new Planet(config, gameService);
scene.add.existing(this);
this.setInteractive({ useHandCursor: true });
this.leftClick.emit();
this.on('pointerdown', (pointer: Phaser.Input.Pointer) => {
if (pointer.button == Phaser.Input.MOUSE_DOWN) {
this.leftClick.emit(this)
} else if (pointer.button == Phaser.Input.MOUSE_UP) {
this.rightClick.emit(this);
}
});
this.status = new PlanetStatus(scene, this, () => this.model.population, () => this.model.isGrowing ? 'growing' : 'shrinking', () => this.model.getCriticalGoods())
this.updateInterval.subscribe(() => this.update())
this.harbourImage = this.scene.add.image(this.getWorldPoint().x, this.getWorldPoint().y, 'harbour')
this.harbourImage.setDisplaySize(164, 256);
this.harbourImage.setVisible(false);
// this.setScale(0.5)
// this.setInteractive(new Phaser.Geom.Circle(x, y, 200), Phaser.Geom.Circle.Contains);
}
override update(...args: any[]): void {
const offers = this.model.offeredGoods;
let text = `${this.model.name}`;
if (offers.length > 0) {
text += `\nAngebot: ${offers[0].type}: ${offers[0].amount.toFixed(2)}`
}
const request = this.model.requestedGoods;
if (request.length > 0) {
text += `\nNachgefragt: ${request[0].type}: ${request[0].amount.toFixed(2)}`
}
this.status?.update();
this.harbourImage.setVisible(this.model.hasHarbour)
}
}