refac: bootstrap arg 정리
This commit is contained in:
@@ -41,33 +41,42 @@ export class Nation extends LazyEntityUpdater<INationEntity> {
|
||||
|
||||
constructor(
|
||||
raw: INationEntity,
|
||||
protected readonly rsc: IResourceController
|
||||
protected readonly rsc: IResourceController,
|
||||
bootstrapInfo: {
|
||||
general: GeneralID[];
|
||||
squad: SquadID[];
|
||||
city: CityID[];
|
||||
},
|
||||
) {
|
||||
super();
|
||||
this._raw = raw;
|
||||
this._bootstrapInfo = bootstrapInfo;
|
||||
}
|
||||
|
||||
private _bootstrapInfo?: ConstructorParameters<typeof Nation>[2];
|
||||
bootstrap() {
|
||||
const rsc = this.rsc;
|
||||
const raw = this._raw;
|
||||
|
||||
//raw값만 읽을것
|
||||
for (const city of rsc.cityList.values()) {
|
||||
if (city.raw.nationID !== raw.id) {
|
||||
continue;
|
||||
}
|
||||
const bootstrapInfo = must(this._bootstrapInfo);
|
||||
delete this._bootstrapInfo;
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
const bootstrapSquadID = bootstrapInfo.squad;
|
||||
for (const squad of rsc.squadList.values()) {
|
||||
if (squad.raw.nationID !== raw.id) {
|
||||
if (squad.raw.nationID !== nationID) {
|
||||
continue;
|
||||
}
|
||||
this.squadList.set(squad.id, new WeakRef(squad));
|
||||
}
|
||||
for (const general of rsc.generalList.values()) {
|
||||
if (general.raw.nationID !== raw.id) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const bootstrapGeneralID = bootstrapInfo.general;
|
||||
for (const general of bootstrapGeneralID.map((id) => must(rsc.generalList.get(id)))) {
|
||||
this.generalList.set(general.id, new WeakRef(general));
|
||||
|
||||
if (general.isUser) {
|
||||
@@ -93,7 +102,6 @@ export class Nation extends LazyEntityUpdater<INationEntity> {
|
||||
this.staffList.set(staffLevel, new WeakRef(general));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public get id(): NationID {
|
||||
|
||||
@@ -15,15 +15,24 @@ export class Squad extends LazyEntityUpdater<ISquadEntity> {
|
||||
constructor(
|
||||
raw: ISquadEntity,
|
||||
protected rsc: IResourceController,
|
||||
private _rawMembers: GeneralID[]
|
||||
bootstrapInfo: {
|
||||
general: GeneralID[]
|
||||
}
|
||||
) {
|
||||
super();
|
||||
this._raw = raw;
|
||||
this._bootstrapInfo = bootstrapInfo;
|
||||
}
|
||||
|
||||
private _bootstrapInfo?: ConstructorParameters<typeof Squad>[2];
|
||||
public bootstrap() {
|
||||
this._members = new Map(this._rawMembers.map((id)=>{
|
||||
return [id, new WeakRef(must(this.rsc.general(id)))];
|
||||
const rsc = this.rsc;
|
||||
|
||||
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;
|
||||
|
||||
@@ -185,23 +185,44 @@ export class ResourceController implements IResourceController{
|
||||
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()) {
|
||||
rawGeneralListBySquad.set(rawSquad.id, []);
|
||||
generalIDListBySquad.set(rawSquad.id, []);
|
||||
}
|
||||
for (const rawGeneral of rawGeneralList.values()) {
|
||||
if (!rawGeneral.squadID) {
|
||||
continue;
|
||||
}
|
||||
const list = must(rawGeneralListBySquad.get(rawGeneral.squadID));
|
||||
const list = must(generalIDListBySquad.get(rawGeneral.squadID));
|
||||
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.bootstrap();
|
||||
|
||||
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);
|
||||
}
|
||||
for (const rawCity of rawCityList.values()) {
|
||||
@@ -209,7 +230,9 @@ export class ResourceController implements IResourceController{
|
||||
this.cityList.set(city.id, city);
|
||||
}
|
||||
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);
|
||||
}
|
||||
for (const rawGeneral of rawGeneralList.values()) {
|
||||
|
||||
Reference in New Issue
Block a user