wip: 개체 작업 진행
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { must } from "@sammo/util";
|
||||
import type { General } from "./General.js";
|
||||
import type { IResourceController } from "./ResourceController.js";
|
||||
import type { ITroopEntity } from "./TroopEntity.js";
|
||||
import type { GeneralID } from "./defs.js";
|
||||
|
||||
export class Troop {
|
||||
private _raw: ITroopEntity
|
||||
private _leader: WeakRef<General>;
|
||||
private _members: Map<GeneralID, WeakRef<General>>;
|
||||
|
||||
public get raw(): Readonly<ITroopEntity> {
|
||||
return this._raw;
|
||||
}
|
||||
|
||||
constructor(
|
||||
raw: ITroopEntity,
|
||||
private resourceController: IResourceController
|
||||
){
|
||||
this._raw = raw;
|
||||
|
||||
const members = resourceController.findGeneralByTroop(raw.id);
|
||||
const leaderID: GeneralID = raw.id as GeneralID;
|
||||
this._leader = new WeakRef(must(members.get(leaderID)));
|
||||
members.delete(leaderID);
|
||||
this._members = new Map([...members].map(([k,v])=>[k, new WeakRef(v)]));
|
||||
}
|
||||
|
||||
public get id(){
|
||||
return this._raw.id;
|
||||
}
|
||||
|
||||
public get leader(){
|
||||
return must(this._leader.deref());
|
||||
}
|
||||
|
||||
public get members(): Map<GeneralID, WeakRef<General>> {
|
||||
return this._members;
|
||||
}
|
||||
|
||||
public destructTroop(withLeader = true){
|
||||
this._members.forEach((member)=>{
|
||||
const general = must(member.deref());
|
||||
general.quitTroop();
|
||||
});
|
||||
if(withLeader){
|
||||
this.leader.quitTroop();
|
||||
}
|
||||
|
||||
this.resourceController.reserveDeleteTroop(this._raw.id);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user