2019-03-27 09:31:47 +01:00
|
|
|
/**
|
|
|
|
* Map of all Locations in the game
|
|
|
|
* Key = Location name, value = Location object
|
|
|
|
*/
|
2019-03-29 08:12:41 +01:00
|
|
|
import { City } from "./City";
|
|
|
|
import { Cities } from "./Cities";
|
2019-03-27 09:31:47 +01:00
|
|
|
import { Location,
|
2019-03-29 08:12:41 +01:00
|
|
|
IConstructorParams } from "./Location";
|
|
|
|
import { CityName } from "./data/CityNames";
|
|
|
|
import { LocationsMetadata } from "./data/LocationsMetadata";
|
|
|
|
|
2019-03-27 09:31:47 +01:00
|
|
|
|
|
|
|
import { IMap } from "../types";
|
|
|
|
|
|
|
|
export const Locations: IMap<Location> = {};
|
|
|
|
|
2019-03-29 08:12:41 +01:00
|
|
|
/**
|
|
|
|
* Here, we'll initialize both Locations and Cities data. These can both
|
|
|
|
* be initialized from the `LocationsMetadata`
|
|
|
|
*/
|
|
|
|
function constructLocation(p: IConstructorParams): Location {
|
2019-03-27 09:31:47 +01:00
|
|
|
if (!p.name) {
|
|
|
|
throw new Error(`Invalid constructor parameters for Location. No 'name' property`);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Locations[p.name] instanceof Location) {
|
|
|
|
console.warn(`Property with name ${p.name} already exists and is being overwritten`);
|
|
|
|
}
|
|
|
|
|
|
|
|
Locations[p.name] = new Location(p);
|
2019-03-29 08:12:41 +01:00
|
|
|
|
|
|
|
return Locations[p.name];
|
2019-03-27 09:31:47 +01:00
|
|
|
}
|
|
|
|
|
2019-03-29 08:12:41 +01:00
|
|
|
// First construct all cities
|
|
|
|
Cities[CityName.Aevum] = new City(CityName.Aevum);
|
|
|
|
Cities[CityName.Chongqing] = new City(CityName.Chongqing);
|
|
|
|
Cities[CityName.Ishima] = new City(CityName.Ishima);
|
|
|
|
Cities[CityName.NewTokyo] = new City(CityName.NewTokyo);
|
|
|
|
Cities[CityName.Sector12] = new City(CityName.Sector12);
|
|
|
|
Cities[CityName.Volhaven] = new City(CityName.Volhaven);
|
|
|
|
|
|
|
|
// Then construct all locations, and add them to the cities as we go.
|
|
|
|
for (const metadata of LocationsMetadata) {
|
|
|
|
const loc = constructLocation(metadata);
|
|
|
|
|
|
|
|
const cityName = loc.city;
|
|
|
|
if (cityName === null) {
|
|
|
|
// Generic location, add to all cities
|
|
|
|
for (const city in Cities) {
|
|
|
|
Cities[city].addLocation(loc.name);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Cities[cityName].addLocation(loc.name);
|
|
|
|
}
|
2019-03-27 09:31:47 +01:00
|
|
|
}
|