stellar-lines/src/app/components/dialog/planet-dialog/planet-dialog.component.ts
Bastian Wagner c0ec36ba82 balancing
2025-04-27 09:54:47 +02:00

119 lines
3.0 KiB
TypeScript

import { Component, inject, InjectionToken } from '@angular/core';
import { Planet, TradeInstance } from '../../../model/planet.model';
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
import { CommonModule } from '@angular/common';
import { Good } from '../../../model/goods/good.interface';
import { GoodType } from '../../../model/goods/good-type.enum';
import { GameService } from '../../../service/game.service';
import {CdkDragHandle, DragDropModule} from '@angular/cdk/drag-drop';
import {MatTooltipModule} from '@angular/material/tooltip';
@Component({
selector: 'app-planet-dialog',
imports: [CommonModule, MatDialogModule, DragDropModule, MatTooltipModule, CdkDragHandle],
templateUrl: './planet-dialog.component.html',
styleUrl: './planet-dialog.component.scss'
})
export class PlanetDialogComponent {
public gameService: GameService = inject(GameService)
ngOnInit() {
}
get planet(): Planet {
return this.gameService.showPlanetInfo!;
}
get population(): number {
return Math.floor(this.planet.population);
}
get producedItems(): Good[] {
if (!this.planet) { return []; }
return this.planet.getAllGoods().filter(g => g.productionRate)
}
get storedItems(): Good[] {
return this.planet.getAllGoods().filter(item => item.demandRate || item.amount)
}
get consumedItems(): Good[] {
return this.planet.getAllGoods().filter(g => g.demandRate)
}
requestedItems(): {
type: GoodType;
amount: number;
}[] {
if (!this.planet) { return []; }
return this.planet.requestedGoods
}
getFillPercentange(item: Good): number {
const val = (item.amount / (item.demandRate * this.planet.population * this.planet.demandSecondsBuffer)) * 100;
if (isNaN(val)) {
return 0;
}
return Math.min(Math.floor(val), 100);
}
close() {
this.gameService.showPlanetInfo = undefined;
}
get goodsInTransit(): { type: GoodType, amount: number}[] {
const res: { type: GoodType, amount: number}[] = [];
this.planet.goodsInTransit.forEach(item => {
const ex = res.find(r => r.type == item.type);
if (ex) {
ex.amount += item.amount;
} else {
res.push({
type: item.type,
amount: item.amount
})
}
});
return res;
}
upgradeHarbour() {
this.planet.upgradeHarbour()
}
buildHarbour() {
this.planet.buildHarbour()
}
getOfferedAmount(item: Good): number {
const offers = this.planet.offeredGoods;
return offers.find(o => o.type == item.type)?.amount ?? 0;
}
upgradeProduction() {
this.planet.upgradeProduction();
}
getProductionAmount(item: Good): number {
if (!item.productionRate) { return 0; }
return this.planet.getProductionLvl(item) * item.productionRate;
}
get canUpgradeProduction(): boolean {
return this.gameService.money > this.planet.productionLvlUpgradeCost;
}
get requested(): TradeInstance[] {
return this.planet.requestedGoods;
}
buildFactory() {
this.planet.buildFactory();
}
}