119 lines
3.0 KiB
TypeScript
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();
|
|
}
|
|
}
|
|
|