refac: bootstrap arg 정리

This commit is contained in:
2024-03-14 16:58:51 +00:00
parent b4b00e1983
commit 39e8eab6cb
3 changed files with 85 additions and 45 deletions
+21 -13
View File
@@ -41,33 +41,42 @@ export class Nation extends LazyEntityUpdater<INationEntity> {
constructor( constructor(
raw: INationEntity, raw: INationEntity,
protected readonly rsc: IResourceController protected readonly rsc: IResourceController,
bootstrapInfo: {
general: GeneralID[];
squad: SquadID[];
city: CityID[];
},
) { ) {
super(); super();
this._raw = raw; this._raw = raw;
this._bootstrapInfo = bootstrapInfo;
} }
private _bootstrapInfo?: ConstructorParameters<typeof Nation>[2];
bootstrap() { bootstrap() {
const rsc = this.rsc; const rsc = this.rsc;
const raw = this._raw;
//raw값만 읽을것 const bootstrapInfo = must(this._bootstrapInfo);
for (const city of rsc.cityList.values()) { delete this._bootstrapInfo;
if (city.raw.nationID !== raw.id) {
continue; const nationID = this._raw.id;
}
const bootstrapCityID = bootstrapInfo.city;
for (const city of bootstrapCityID.map((id) => must(rsc.cityList.get(id)))) {
this.cityList.set(city.id, new WeakRef(city)); this.cityList.set(city.id, new WeakRef(city));
} }
const bootstrapSquadID = bootstrapInfo.squad;
for (const squad of rsc.squadList.values()) { for (const squad of rsc.squadList.values()) {
if (squad.raw.nationID !== raw.id) { if (squad.raw.nationID !== nationID) {
continue; continue;
} }
this.squadList.set(squad.id, new WeakRef(squad)); this.squadList.set(squad.id, new WeakRef(squad));
} }
for (const general of rsc.generalList.values()) {
if (general.raw.nationID !== raw.id) { const bootstrapGeneralID = bootstrapInfo.general;
continue; for (const general of bootstrapGeneralID.map((id) => must(rsc.generalList.get(id)))) {
}
this.generalList.set(general.id, new WeakRef(general)); this.generalList.set(general.id, new WeakRef(general));
if (general.isUser) { if (general.isUser) {
@@ -93,7 +102,6 @@ export class Nation extends LazyEntityUpdater<INationEntity> {
this.staffList.set(staffLevel, new WeakRef(general)); this.staffList.set(staffLevel, new WeakRef(general));
} }
} }
} }
public get id(): NationID { public get id(): NationID {
+12 -3
View File
@@ -15,15 +15,24 @@ export class Squad extends LazyEntityUpdater<ISquadEntity> {
constructor( constructor(
raw: ISquadEntity, raw: ISquadEntity,
protected rsc: IResourceController, protected rsc: IResourceController,
private _rawMembers: GeneralID[] bootstrapInfo: {
general: GeneralID[]
}
) { ) {
super(); super();
this._raw = raw; this._raw = raw;
this._bootstrapInfo = bootstrapInfo;
} }
private _bootstrapInfo?: ConstructorParameters<typeof Squad>[2];
public bootstrap() { public bootstrap() {
this._members = new Map(this._rawMembers.map((id)=>{ const rsc = this.rsc;
return [id, new WeakRef(must(this.rsc.general(id)))];
const bootstrapInfo = must(this._bootstrapInfo);
delete this._bootstrapInfo;
this._members = new Map(bootstrapInfo.general.map((id) => {
return [id, new WeakRef(must(rsc.general(id)))];
})); }));
const leaderID = this._raw.id as GeneralID; const leaderID = this._raw.id as GeneralID;
+28 -5
View File
@@ -185,23 +185,44 @@ export class ResourceController implements IResourceController{
const rawGeneralList = new Map<GeneralID, IGeneralEntity>(); const rawGeneralList = new Map<GeneralID, IGeneralEntity>();
const rawGeneralListBySquad = new Map<SquadID, GeneralID[]>(); const generalIDByNation = new Map<NationID, GeneralID[]>();
const generalIDListBySquad = new Map<SquadID, GeneralID[]>();
for (const rawSquad of rawSquadList.values()) { for (const rawSquad of rawSquadList.values()) {
rawGeneralListBySquad.set(rawSquad.id, []); generalIDListBySquad.set(rawSquad.id, []);
} }
for (const rawGeneral of rawGeneralList.values()) { for (const rawGeneral of rawGeneralList.values()) {
if (!rawGeneral.squadID) { if (!rawGeneral.squadID) {
continue; continue;
} }
const list = must(rawGeneralListBySquad.get(rawGeneral.squadID)); const list = must(generalIDListBySquad.get(rawGeneral.squadID));
list.push(rawGeneral.id); list.push(rawGeneral.id);
} }
const cityIDByNation = new Map<NationID, CityID[]>();
for (const rawCity of rawCityList.values()) {
const list = must(cityIDByNation.get(rawCity.nationID));
list.push(rawCity.id);
}
const squadIDByNation = new Map<NationID, SquadID[]>();
for (const rawSquad of rawSquadList.values()) {
const list = must(squadIDByNation.get(rawSquad.nationID));
list.push(rawSquad.id);
}
this._gameEnv = new GameEnv(rawGameEnv, this); this._gameEnv = new GameEnv(rawGameEnv, this);
this._gameEnv.bootstrap(); this._gameEnv.bootstrap();
for (const rawNation of rawNationList.values()) { for (const rawNation of rawNationList.values()) {
const nation = new Nation(rawNation, this); const nation = new Nation(
rawNation,
this,
{
general: must(generalIDByNation.get(rawNation.id)),
squad: squadIDByNation.get(rawNation.id) ?? [],
city: cityIDByNation.get(rawNation.id) ?? [],
}
);
this.nationList.set(nation.id, nation); this.nationList.set(nation.id, nation);
} }
for (const rawCity of rawCityList.values()) { for (const rawCity of rawCityList.values()) {
@@ -209,7 +230,9 @@ export class ResourceController implements IResourceController{
this.cityList.set(city.id, city); this.cityList.set(city.id, city);
} }
for (const rawSquad of rawSquadList.values()) { for (const rawSquad of rawSquadList.values()) {
const squad = new Squad(rawSquad, this, must(rawGeneralListBySquad.get(rawSquad.id))); const squad = new Squad(rawSquad, this, {
general: generalIDListBySquad.get(rawSquad.id) ?? []
});
this.squadList.set(squad.id, squad); this.squadList.set(squad.id, squad);
} }
for (const rawGeneral of rawGeneralList.values()) { for (const rawGeneral of rawGeneralList.values()) {