@civ-clone/library-city 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.deepsource.toml +21 -0
- package/.gitattributes +2 -0
- package/.github/workflows/build-on-push.yml +14 -0
- package/.nvmrc +1 -0
- package/.prettierrc +4 -0
- package/CityImprovements/Aqueduct.d.ts +3 -0
- package/CityImprovements/Aqueduct.js +8 -0
- package/CityImprovements/Aqueduct.js.map +1 -0
- package/CityImprovements/Aqueduct.ts +5 -0
- package/CityImprovements/Bank.d.ts +3 -0
- package/CityImprovements/Bank.js +8 -0
- package/CityImprovements/Bank.js.map +1 -0
- package/CityImprovements/Bank.ts +5 -0
- package/CityImprovements/Barracks.d.ts +3 -0
- package/CityImprovements/Barracks.js +8 -0
- package/CityImprovements/Barracks.js.map +1 -0
- package/CityImprovements/Barracks.ts +5 -0
- package/CityImprovements/Cathedral.d.ts +3 -0
- package/CityImprovements/Cathedral.js +8 -0
- package/CityImprovements/Cathedral.js.map +1 -0
- package/CityImprovements/Cathedral.ts +5 -0
- package/CityImprovements/CityWalls.d.ts +3 -0
- package/CityImprovements/CityWalls.js +8 -0
- package/CityImprovements/CityWalls.js.map +1 -0
- package/CityImprovements/CityWalls.ts +5 -0
- package/CityImprovements/Colosseum.d.ts +3 -0
- package/CityImprovements/Colosseum.js +8 -0
- package/CityImprovements/Colosseum.js.map +1 -0
- package/CityImprovements/Colosseum.ts +5 -0
- package/CityImprovements/Courthouse.d.ts +3 -0
- package/CityImprovements/Courthouse.js +8 -0
- package/CityImprovements/Courthouse.js.map +1 -0
- package/CityImprovements/Courthouse.ts +5 -0
- package/CityImprovements/Factory.d.ts +3 -0
- package/CityImprovements/Factory.js +8 -0
- package/CityImprovements/Factory.js.map +1 -0
- package/CityImprovements/Factory.ts +5 -0
- package/CityImprovements/Granary.d.ts +3 -0
- package/CityImprovements/Granary.js +8 -0
- package/CityImprovements/Granary.js.map +1 -0
- package/CityImprovements/Granary.ts +5 -0
- package/CityImprovements/HydroPlant.d.ts +3 -0
- package/CityImprovements/HydroPlant.js +8 -0
- package/CityImprovements/HydroPlant.js.map +1 -0
- package/CityImprovements/HydroPlant.ts +5 -0
- package/CityImprovements/Library.d.ts +3 -0
- package/CityImprovements/Library.js +8 -0
- package/CityImprovements/Library.js.map +1 -0
- package/CityImprovements/Library.ts +5 -0
- package/CityImprovements/ManufacturingPlant.d.ts +3 -0
- package/CityImprovements/ManufacturingPlant.js +8 -0
- package/CityImprovements/ManufacturingPlant.js.map +1 -0
- package/CityImprovements/ManufacturingPlant.ts +5 -0
- package/CityImprovements/Marketplace.d.ts +3 -0
- package/CityImprovements/Marketplace.js +8 -0
- package/CityImprovements/Marketplace.js.map +1 -0
- package/CityImprovements/Marketplace.ts +5 -0
- package/CityImprovements/MassTransit.d.ts +3 -0
- package/CityImprovements/MassTransit.js +8 -0
- package/CityImprovements/MassTransit.js.map +1 -0
- package/CityImprovements/MassTransit.ts +5 -0
- package/CityImprovements/NuclearPlant.d.ts +3 -0
- package/CityImprovements/NuclearPlant.js +8 -0
- package/CityImprovements/NuclearPlant.js.map +1 -0
- package/CityImprovements/NuclearPlant.ts +5 -0
- package/CityImprovements/Palace.d.ts +3 -0
- package/CityImprovements/Palace.js +8 -0
- package/CityImprovements/Palace.js.map +1 -0
- package/CityImprovements/Palace.ts +5 -0
- package/CityImprovements/PowerPlant.d.ts +3 -0
- package/CityImprovements/PowerPlant.js +8 -0
- package/CityImprovements/PowerPlant.js.map +1 -0
- package/CityImprovements/PowerPlant.ts +5 -0
- package/CityImprovements/RecyclingCenter.d.ts +3 -0
- package/CityImprovements/RecyclingCenter.js +8 -0
- package/CityImprovements/RecyclingCenter.js.map +1 -0
- package/CityImprovements/RecyclingCenter.ts +5 -0
- package/CityImprovements/SdiDefence.d.ts +3 -0
- package/CityImprovements/SdiDefence.js +8 -0
- package/CityImprovements/SdiDefence.js.map +1 -0
- package/CityImprovements/SdiDefence.ts +5 -0
- package/CityImprovements/Temple.d.ts +3 -0
- package/CityImprovements/Temple.js +8 -0
- package/CityImprovements/Temple.js.map +1 -0
- package/CityImprovements/Temple.ts +5 -0
- package/CityImprovements/University.d.ts +3 -0
- package/CityImprovements/University.js +8 -0
- package/CityImprovements/University.js.map +1 -0
- package/CityImprovements/University.ts +5 -0
- package/CityImprovements.d.ts +21 -0
- package/CityImprovements.js +46 -0
- package/CityImprovements.js.map +1 -0
- package/CityImprovements.ts +21 -0
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/Yields/CityImprovementContent.d.ts +3 -0
- package/Yields/CityImprovementContent.js +8 -0
- package/Yields/CityImprovementContent.js.map +1 -0
- package/Yields/CityImprovementContent.ts +5 -0
- package/Yields/Corruption.d.ts +3 -0
- package/Yields/Corruption.js +8 -0
- package/Yields/Corruption.js.map +1 -0
- package/Yields/Corruption.ts +5 -0
- package/Yields/Food.d.ts +3 -0
- package/Yields/Food.js +8 -0
- package/Yields/Food.js.map +1 -0
- package/Yields/Food.ts +5 -0
- package/Yields/FoodStorage.d.ts +3 -0
- package/Yields/FoodStorage.js +8 -0
- package/Yields/FoodStorage.js.map +1 -0
- package/Yields/FoodStorage.ts +5 -0
- package/Yields/Gold.d.ts +3 -0
- package/Yields/Gold.js +8 -0
- package/Yields/Gold.js.map +1 -0
- package/Yields/Gold.ts +5 -0
- package/Yields/Happiness.d.ts +3 -0
- package/Yields/Happiness.js +8 -0
- package/Yields/Happiness.js.map +1 -0
- package/Yields/Happiness.ts +5 -0
- package/Yields/Luxuries.d.ts +3 -0
- package/Yields/Luxuries.js +8 -0
- package/Yields/Luxuries.js.map +1 -0
- package/Yields/Luxuries.ts +5 -0
- package/Yields/LuxuryHappiness.d.ts +3 -0
- package/Yields/LuxuryHappiness.js +8 -0
- package/Yields/LuxuryHappiness.js.map +1 -0
- package/Yields/LuxuryHappiness.ts +5 -0
- package/Yields/MartialLaw.d.ts +3 -0
- package/Yields/MartialLaw.js +8 -0
- package/Yields/MartialLaw.js.map +1 -0
- package/Yields/MartialLaw.ts +5 -0
- package/Yields/MilitaryUnhappiness.d.ts +3 -0
- package/Yields/MilitaryUnhappiness.js +8 -0
- package/Yields/MilitaryUnhappiness.js.map +1 -0
- package/Yields/MilitaryUnhappiness.ts +5 -0
- package/Yields/PopulationSupportFood.d.ts +3 -0
- package/Yields/PopulationSupportFood.js +8 -0
- package/Yields/PopulationSupportFood.js.map +1 -0
- package/Yields/PopulationSupportFood.ts +5 -0
- package/Yields/PopulationUnhappiness.d.ts +3 -0
- package/Yields/PopulationUnhappiness.js +8 -0
- package/Yields/PopulationUnhappiness.js.map +1 -0
- package/Yields/PopulationUnhappiness.ts +5 -0
- package/Yields/Production.d.ts +3 -0
- package/Yields/Production.js +8 -0
- package/Yields/Production.js.map +1 -0
- package/Yields/Production.ts +5 -0
- package/Yields/Research.d.ts +3 -0
- package/Yields/Research.js +8 -0
- package/Yields/Research.js.map +1 -0
- package/Yields/Research.ts +5 -0
- package/Yields/Trade.d.ts +3 -0
- package/Yields/Trade.js +8 -0
- package/Yields/Trade.js.map +1 -0
- package/Yields/Trade.ts +5 -0
- package/Yields/Unhappiness.d.ts +3 -0
- package/Yields/Unhappiness.js +8 -0
- package/Yields/Unhappiness.js.map +1 -0
- package/Yields/Unhappiness.ts +5 -0
- package/Yields/UnitSupportFood.d.ts +3 -0
- package/Yields/UnitSupportFood.js +8 -0
- package/Yields/UnitSupportFood.js.map +1 -0
- package/Yields/UnitSupportFood.ts +5 -0
- package/Yields/UnitSupportProduction.d.ts +3 -0
- package/Yields/UnitSupportProduction.js +8 -0
- package/Yields/UnitSupportProduction.js.map +1 -0
- package/Yields/UnitSupportProduction.ts +5 -0
- package/Yields.d.ts +18 -0
- package/Yields.js +40 -0
- package/Yields.js.map +1 -0
- package/Yields.ts +18 -0
- package/lib/assignWorkers.d.ts +41 -0
- package/lib/assignWorkers.js +63 -0
- package/lib/assignWorkers.js.map +1 -0
- package/lib/assignWorkers.ts +140 -0
- package/package.json +65 -0
- package/tsconfig.json +16 -0
package/Yields.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { CityImprovementContent } from './Yields/CityImprovementContent';
|
|
2
|
+
export { Corruption } from './Yields/Corruption';
|
|
3
|
+
export { Food } from './Yields/Food';
|
|
4
|
+
export { FoodStorage } from './Yields/FoodStorage';
|
|
5
|
+
export { Gold } from './Yields/Gold';
|
|
6
|
+
export { Happiness } from './Yields/Happiness';
|
|
7
|
+
export { Luxuries } from './Yields/Luxuries';
|
|
8
|
+
export { LuxuryHappiness } from './Yields/LuxuryHappiness';
|
|
9
|
+
export { MartialLaw } from './Yields/MartialLaw';
|
|
10
|
+
export { MilitaryUnhappiness } from './Yields/MilitaryUnhappiness';
|
|
11
|
+
export { PopulationSupportFood } from './Yields/PopulationSupportFood';
|
|
12
|
+
export { PopulationUnhappiness } from './Yields/PopulationUnhappiness';
|
|
13
|
+
export { Production } from './Yields/Production';
|
|
14
|
+
export { Research } from './Yields/Research';
|
|
15
|
+
export { Trade } from './Yields/Trade';
|
|
16
|
+
export { Unhappiness } from './Yields/Unhappiness';
|
|
17
|
+
export { UnitSupportFood } from './Yields/UnitSupportFood';
|
|
18
|
+
export { UnitSupportProduction } from './Yields/UnitSupportProduction';
|
package/Yields.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnitSupportProduction = exports.UnitSupportFood = exports.Unhappiness = exports.Trade = exports.Research = exports.Production = exports.PopulationUnhappiness = exports.PopulationSupportFood = exports.MilitaryUnhappiness = exports.MartialLaw = exports.LuxuryHappiness = exports.Luxuries = exports.Happiness = exports.Gold = exports.FoodStorage = exports.Food = exports.Corruption = exports.CityImprovementContent = void 0;
|
|
4
|
+
var CityImprovementContent_1 = require("./Yields/CityImprovementContent");
|
|
5
|
+
Object.defineProperty(exports, "CityImprovementContent", { enumerable: true, get: function () { return CityImprovementContent_1.CityImprovementContent; } });
|
|
6
|
+
var Corruption_1 = require("./Yields/Corruption");
|
|
7
|
+
Object.defineProperty(exports, "Corruption", { enumerable: true, get: function () { return Corruption_1.Corruption; } });
|
|
8
|
+
var Food_1 = require("./Yields/Food");
|
|
9
|
+
Object.defineProperty(exports, "Food", { enumerable: true, get: function () { return Food_1.Food; } });
|
|
10
|
+
var FoodStorage_1 = require("./Yields/FoodStorage");
|
|
11
|
+
Object.defineProperty(exports, "FoodStorage", { enumerable: true, get: function () { return FoodStorage_1.FoodStorage; } });
|
|
12
|
+
var Gold_1 = require("./Yields/Gold");
|
|
13
|
+
Object.defineProperty(exports, "Gold", { enumerable: true, get: function () { return Gold_1.Gold; } });
|
|
14
|
+
var Happiness_1 = require("./Yields/Happiness");
|
|
15
|
+
Object.defineProperty(exports, "Happiness", { enumerable: true, get: function () { return Happiness_1.Happiness; } });
|
|
16
|
+
var Luxuries_1 = require("./Yields/Luxuries");
|
|
17
|
+
Object.defineProperty(exports, "Luxuries", { enumerable: true, get: function () { return Luxuries_1.Luxuries; } });
|
|
18
|
+
var LuxuryHappiness_1 = require("./Yields/LuxuryHappiness");
|
|
19
|
+
Object.defineProperty(exports, "LuxuryHappiness", { enumerable: true, get: function () { return LuxuryHappiness_1.LuxuryHappiness; } });
|
|
20
|
+
var MartialLaw_1 = require("./Yields/MartialLaw");
|
|
21
|
+
Object.defineProperty(exports, "MartialLaw", { enumerable: true, get: function () { return MartialLaw_1.MartialLaw; } });
|
|
22
|
+
var MilitaryUnhappiness_1 = require("./Yields/MilitaryUnhappiness");
|
|
23
|
+
Object.defineProperty(exports, "MilitaryUnhappiness", { enumerable: true, get: function () { return MilitaryUnhappiness_1.MilitaryUnhappiness; } });
|
|
24
|
+
var PopulationSupportFood_1 = require("./Yields/PopulationSupportFood");
|
|
25
|
+
Object.defineProperty(exports, "PopulationSupportFood", { enumerable: true, get: function () { return PopulationSupportFood_1.PopulationSupportFood; } });
|
|
26
|
+
var PopulationUnhappiness_1 = require("./Yields/PopulationUnhappiness");
|
|
27
|
+
Object.defineProperty(exports, "PopulationUnhappiness", { enumerable: true, get: function () { return PopulationUnhappiness_1.PopulationUnhappiness; } });
|
|
28
|
+
var Production_1 = require("./Yields/Production");
|
|
29
|
+
Object.defineProperty(exports, "Production", { enumerable: true, get: function () { return Production_1.Production; } });
|
|
30
|
+
var Research_1 = require("./Yields/Research");
|
|
31
|
+
Object.defineProperty(exports, "Research", { enumerable: true, get: function () { return Research_1.Research; } });
|
|
32
|
+
var Trade_1 = require("./Yields/Trade");
|
|
33
|
+
Object.defineProperty(exports, "Trade", { enumerable: true, get: function () { return Trade_1.Trade; } });
|
|
34
|
+
var Unhappiness_1 = require("./Yields/Unhappiness");
|
|
35
|
+
Object.defineProperty(exports, "Unhappiness", { enumerable: true, get: function () { return Unhappiness_1.Unhappiness; } });
|
|
36
|
+
var UnitSupportFood_1 = require("./Yields/UnitSupportFood");
|
|
37
|
+
Object.defineProperty(exports, "UnitSupportFood", { enumerable: true, get: function () { return UnitSupportFood_1.UnitSupportFood; } });
|
|
38
|
+
var UnitSupportProduction_1 = require("./Yields/UnitSupportProduction");
|
|
39
|
+
Object.defineProperty(exports, "UnitSupportProduction", { enumerable: true, get: function () { return UnitSupportProduction_1.UnitSupportProduction; } });
|
|
40
|
+
//# sourceMappingURL=Yields.js.map
|
package/Yields.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Yields.js","sourceRoot":"","sources":["Yields.ts"],"names":[],"mappings":";;;AAAA,0EAAyE;AAAhE,gIAAA,sBAAsB,OAAA;AAC/B,kDAAiD;AAAxC,wGAAA,UAAU,OAAA;AACnB,sCAAqC;AAA5B,4FAAA,IAAI,OAAA;AACb,oDAAmD;AAA1C,0GAAA,WAAW,OAAA;AACpB,sCAAqC;AAA5B,4FAAA,IAAI,OAAA;AACb,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAClB,8CAA6C;AAApC,oGAAA,QAAQ,OAAA;AACjB,4DAA2D;AAAlD,kHAAA,eAAe,OAAA;AACxB,kDAAiD;AAAxC,wGAAA,UAAU,OAAA;AACnB,oEAAmE;AAA1D,0HAAA,mBAAmB,OAAA;AAC5B,wEAAuE;AAA9D,8HAAA,qBAAqB,OAAA;AAC9B,wEAAuE;AAA9D,8HAAA,qBAAqB,OAAA;AAC9B,kDAAiD;AAAxC,wGAAA,UAAU,OAAA;AACnB,8CAA6C;AAApC,oGAAA,QAAQ,OAAA;AACjB,wCAAuC;AAA9B,8FAAA,KAAK,OAAA;AACd,oDAAmD;AAA1C,0GAAA,WAAW,OAAA;AACpB,4DAA2D;AAAlD,kHAAA,eAAe,OAAA;AACxB,wEAAuE;AAA9D,8HAAA,qBAAqB,OAAA"}
|
package/Yields.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { CityImprovementContent } from './Yields/CityImprovementContent';
|
|
2
|
+
export { Corruption } from './Yields/Corruption';
|
|
3
|
+
export { Food } from './Yields/Food';
|
|
4
|
+
export { FoodStorage } from './Yields/FoodStorage';
|
|
5
|
+
export { Gold } from './Yields/Gold';
|
|
6
|
+
export { Happiness } from './Yields/Happiness';
|
|
7
|
+
export { Luxuries } from './Yields/Luxuries';
|
|
8
|
+
export { LuxuryHappiness } from './Yields/LuxuryHappiness';
|
|
9
|
+
export { MartialLaw } from './Yields/MartialLaw';
|
|
10
|
+
export { MilitaryUnhappiness } from './Yields/MilitaryUnhappiness';
|
|
11
|
+
export { PopulationSupportFood } from './Yields/PopulationSupportFood';
|
|
12
|
+
export { PopulationUnhappiness } from './Yields/PopulationUnhappiness';
|
|
13
|
+
export { Production } from './Yields/Production';
|
|
14
|
+
export { Research } from './Yields/Research';
|
|
15
|
+
export { Trade } from './Yields/Trade';
|
|
16
|
+
export { Unhappiness } from './Yields/Unhappiness';
|
|
17
|
+
export { UnitSupportFood } from './Yields/UnitSupportFood';
|
|
18
|
+
export { UnitSupportProduction } from './Yields/UnitSupportProduction';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CityGrowthRegistry } from '@civ-clone/core-city-growth/CityGrowthRegistry';
|
|
2
|
+
import { PlayerWorldRegistry } from '@civ-clone/core-player-world/PlayerWorldRegistry';
|
|
3
|
+
import { WorkedTileRegistry } from '@civ-clone/core-city/WorkedTileRegistry';
|
|
4
|
+
import City from '@civ-clone/core-city/City';
|
|
5
|
+
import Tile from '@civ-clone/core-world/Tile';
|
|
6
|
+
import Yield from '@civ-clone/core-yield/Yield';
|
|
7
|
+
import CityGrowth from '@civ-clone/core-city-growth/CityGrowth';
|
|
8
|
+
export declare const getHighestValueCityTiles: (city: City) => Tile[];
|
|
9
|
+
export declare const sortTiles: (
|
|
10
|
+
tiles: Tile[],
|
|
11
|
+
city: City,
|
|
12
|
+
weights?: [typeof Yield, number][]
|
|
13
|
+
) => Tile[];
|
|
14
|
+
export declare const getHighestValueAvailableCityTiles: (
|
|
15
|
+
city: City,
|
|
16
|
+
playerWorldRegistry?: PlayerWorldRegistry,
|
|
17
|
+
workedTileRegistry?: WorkedTileRegistry
|
|
18
|
+
) => Tile[];
|
|
19
|
+
export declare const reassignWorkers: (
|
|
20
|
+
city: City,
|
|
21
|
+
playerWorldRegistry?: PlayerWorldRegistry,
|
|
22
|
+
cityGrowthRegistry?: CityGrowthRegistry,
|
|
23
|
+
workedTileRegistry?: WorkedTileRegistry
|
|
24
|
+
) => void;
|
|
25
|
+
export declare const assignWorkers: (
|
|
26
|
+
city: City,
|
|
27
|
+
playerWorldRegistry?: PlayerWorldRegistry,
|
|
28
|
+
cityGrowthRegistry?: CityGrowthRegistry,
|
|
29
|
+
workedTileRegistry?: WorkedTileRegistry
|
|
30
|
+
) => void;
|
|
31
|
+
export declare const assignWorker: (
|
|
32
|
+
city: City,
|
|
33
|
+
playerWorldRegistry?: PlayerWorldRegistry,
|
|
34
|
+
cityGrowthRegistry?: CityGrowthRegistry,
|
|
35
|
+
workedTileRegistry?: WorkedTileRegistry
|
|
36
|
+
) => void;
|
|
37
|
+
export declare const reduceWorkers: (
|
|
38
|
+
city: City,
|
|
39
|
+
cityGrowth: CityGrowth
|
|
40
|
+
) => Tile[];
|
|
41
|
+
export default assignWorkers;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reduceWorkers = exports.assignWorker = exports.assignWorkers = exports.reassignWorkers = exports.getHighestValueAvailableCityTiles = exports.sortTiles = exports.getHighestValueCityTiles = void 0;
|
|
4
|
+
const CityGrowthRegistry_1 = require("@civ-clone/core-city-growth/CityGrowthRegistry");
|
|
5
|
+
const Yields_1 = require("../Yields");
|
|
6
|
+
const PlayerWorldRegistry_1 = require("@civ-clone/core-player-world/PlayerWorldRegistry");
|
|
7
|
+
const WorkedTileRegistry_1 = require("@civ-clone/core-city/WorkedTileRegistry");
|
|
8
|
+
const reduceYields_1 = require("@civ-clone/core-yield/lib/reduceYields");
|
|
9
|
+
const WorkedTile_1 = require("@civ-clone/core-city/WorkedTile");
|
|
10
|
+
const getHighestValueCityTiles = (city) => (0, exports.sortTiles)(city.tiles().entries(), city);
|
|
11
|
+
exports.getHighestValueCityTiles = getHighestValueCityTiles;
|
|
12
|
+
const sortTiles = (tiles, city, weights = [
|
|
13
|
+
[Yields_1.Food, 8],
|
|
14
|
+
[
|
|
15
|
+
Yields_1.Production,
|
|
16
|
+
3 *
|
|
17
|
+
((0, reduceYields_1.reduceYield)(city.tilesWorked().yields(city.player()), Yields_1.Production) === 0
|
|
18
|
+
? 3
|
|
19
|
+
: 1),
|
|
20
|
+
],
|
|
21
|
+
[
|
|
22
|
+
Yields_1.Trade,
|
|
23
|
+
1 *
|
|
24
|
+
((0, reduceYields_1.reduceYield)(city.tilesWorked().yields(city.player()), Yields_1.Trade) === 0
|
|
25
|
+
? 2
|
|
26
|
+
: 1),
|
|
27
|
+
],
|
|
28
|
+
]) => tiles.sort((a, b) => b.score(city.player(), weights) - a.score(city.player(), weights));
|
|
29
|
+
exports.sortTiles = sortTiles;
|
|
30
|
+
const getHighestValueAvailableCityTiles = (city, playerWorldRegistry = PlayerWorldRegistry_1.instance, workedTileRegistry = WorkedTileRegistry_1.instance) => (0, exports.getHighestValueCityTiles)(city).filter((tile) => workedTileRegistry.tileCanBeWorkedBy(tile, city) &&
|
|
31
|
+
playerWorldRegistry.getByPlayer(city.player()).includes(tile));
|
|
32
|
+
exports.getHighestValueAvailableCityTiles = getHighestValueAvailableCityTiles;
|
|
33
|
+
const reassignWorkers = (city, playerWorldRegistry = PlayerWorldRegistry_1.instance, cityGrowthRegistry = CityGrowthRegistry_1.instance, workedTileRegistry = WorkedTileRegistry_1.instance) => {
|
|
34
|
+
workedTileRegistry
|
|
35
|
+
.getBy('city', city)
|
|
36
|
+
.forEach((workedTile) => workedTileRegistry.unregister(workedTile));
|
|
37
|
+
workedTileRegistry.register(new WorkedTile_1.default(city.tile(), city));
|
|
38
|
+
(0, exports.assignWorkers)(city, playerWorldRegistry, cityGrowthRegistry, workedTileRegistry);
|
|
39
|
+
};
|
|
40
|
+
exports.reassignWorkers = reassignWorkers;
|
|
41
|
+
const assignWorkers = (city, playerWorldRegistry = PlayerWorldRegistry_1.instance, cityGrowthRegistry = CityGrowthRegistry_1.instance, workedTileRegistry = WorkedTileRegistry_1.instance) => {
|
|
42
|
+
const cityGrowth = cityGrowthRegistry.getByCity(city);
|
|
43
|
+
(0, exports.getHighestValueAvailableCityTiles)(city, playerWorldRegistry, workedTileRegistry).some((tile) => {
|
|
44
|
+
if (city.tilesWorked().length >= cityGrowth.size() + 1) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
workedTileRegistry.register(new WorkedTile_1.default(tile, city));
|
|
48
|
+
return false;
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
exports.assignWorkers = assignWorkers;
|
|
52
|
+
const assignWorker = (city, playerWorldRegistry = PlayerWorldRegistry_1.instance, cityGrowthRegistry = CityGrowthRegistry_1.instance, workedTileRegistry = WorkedTileRegistry_1.instance) => {
|
|
53
|
+
const [newTile] = (0, exports.getHighestValueAvailableCityTiles)(city, playerWorldRegistry, workedTileRegistry);
|
|
54
|
+
workedTileRegistry.register(new WorkedTile_1.default(newTile, city));
|
|
55
|
+
};
|
|
56
|
+
exports.assignWorker = assignWorker;
|
|
57
|
+
const reduceWorkers = (city, cityGrowth) => (0, exports.sortTiles)(city
|
|
58
|
+
.tilesWorked()
|
|
59
|
+
.entries()
|
|
60
|
+
.filter((tile) => tile !== city.tile()), city).slice(cityGrowth.size());
|
|
61
|
+
exports.reduceWorkers = reduceWorkers;
|
|
62
|
+
exports.default = exports.assignWorkers;
|
|
63
|
+
//# sourceMappingURL=assignWorkers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignWorkers.js","sourceRoot":"","sources":["assignWorkers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CityGrowthRegistry,
|
|
3
|
+
instance as cityGrowthRegistryInstance,
|
|
4
|
+
} from '@civ-clone/core-city-growth/CityGrowthRegistry';
|
|
5
|
+
import { Food, Production, Trade } from '../Yields';
|
|
6
|
+
import {
|
|
7
|
+
PlayerWorldRegistry,
|
|
8
|
+
instance as playerWorldRegistryInstance,
|
|
9
|
+
} from '@civ-clone/core-player-world/PlayerWorldRegistry';
|
|
10
|
+
import {
|
|
11
|
+
WorkedTileRegistry,
|
|
12
|
+
instance as workedTileRegistryInstance,
|
|
13
|
+
} from '@civ-clone/core-city/WorkedTileRegistry';
|
|
14
|
+
import City from '@civ-clone/core-city/City';
|
|
15
|
+
import Tile from '@civ-clone/core-world/Tile';
|
|
16
|
+
import Yield from '@civ-clone/core-yield/Yield';
|
|
17
|
+
import { reduceYield } from '@civ-clone/core-yield/lib/reduceYields';
|
|
18
|
+
import WorkedTile from '@civ-clone/core-city/WorkedTile';
|
|
19
|
+
import CityGrowth from '@civ-clone/core-city-growth/CityGrowth';
|
|
20
|
+
|
|
21
|
+
export const getHighestValueCityTiles = (city: City) =>
|
|
22
|
+
sortTiles(city.tiles().entries(), city);
|
|
23
|
+
|
|
24
|
+
export const sortTiles = (
|
|
25
|
+
tiles: Tile[],
|
|
26
|
+
city: City,
|
|
27
|
+
weights: [typeof Yield, number][] = [
|
|
28
|
+
[Food, 8],
|
|
29
|
+
[
|
|
30
|
+
Production,
|
|
31
|
+
3 *
|
|
32
|
+
(reduceYield(city.tilesWorked().yields(city.player()), Production) === 0
|
|
33
|
+
? 3
|
|
34
|
+
: 1),
|
|
35
|
+
],
|
|
36
|
+
[
|
|
37
|
+
Trade,
|
|
38
|
+
1 *
|
|
39
|
+
(reduceYield(city.tilesWorked().yields(city.player()), Trade) === 0
|
|
40
|
+
? 2
|
|
41
|
+
: 1),
|
|
42
|
+
],
|
|
43
|
+
]
|
|
44
|
+
): Tile[] =>
|
|
45
|
+
tiles.sort(
|
|
46
|
+
(a: Tile, b: Tile) =>
|
|
47
|
+
b.score(city.player(), weights) - a.score(city.player(), weights)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
export const getHighestValueAvailableCityTiles = (
|
|
51
|
+
city: City,
|
|
52
|
+
playerWorldRegistry: PlayerWorldRegistry = playerWorldRegistryInstance,
|
|
53
|
+
workedTileRegistry: WorkedTileRegistry = workedTileRegistryInstance
|
|
54
|
+
) =>
|
|
55
|
+
getHighestValueCityTiles(city).filter(
|
|
56
|
+
(tile) =>
|
|
57
|
+
workedTileRegistry.tileCanBeWorkedBy(tile, city) &&
|
|
58
|
+
playerWorldRegistry.getByPlayer(city.player()).includes(tile)
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
export const reassignWorkers = (
|
|
62
|
+
city: City,
|
|
63
|
+
playerWorldRegistry: PlayerWorldRegistry = playerWorldRegistryInstance,
|
|
64
|
+
cityGrowthRegistry: CityGrowthRegistry = cityGrowthRegistryInstance,
|
|
65
|
+
workedTileRegistry: WorkedTileRegistry = workedTileRegistryInstance
|
|
66
|
+
) => {
|
|
67
|
+
workedTileRegistry
|
|
68
|
+
.getBy('city', city)
|
|
69
|
+
.forEach((workedTile: WorkedTile) =>
|
|
70
|
+
workedTileRegistry.unregister(workedTile)
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
workedTileRegistry.register(new WorkedTile(city.tile(), city));
|
|
74
|
+
|
|
75
|
+
assignWorkers(
|
|
76
|
+
city,
|
|
77
|
+
playerWorldRegistry,
|
|
78
|
+
cityGrowthRegistry,
|
|
79
|
+
workedTileRegistry
|
|
80
|
+
);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const assignWorkers: (
|
|
84
|
+
city: City,
|
|
85
|
+
playerWorldRegistry?: PlayerWorldRegistry,
|
|
86
|
+
cityGrowthRegistry?: CityGrowthRegistry,
|
|
87
|
+
workedTileRegistry?: WorkedTileRegistry
|
|
88
|
+
) => void = (
|
|
89
|
+
city: City,
|
|
90
|
+
playerWorldRegistry: PlayerWorldRegistry = playerWorldRegistryInstance,
|
|
91
|
+
cityGrowthRegistry: CityGrowthRegistry = cityGrowthRegistryInstance,
|
|
92
|
+
workedTileRegistry: WorkedTileRegistry = workedTileRegistryInstance
|
|
93
|
+
): void => {
|
|
94
|
+
const cityGrowth = cityGrowthRegistry.getByCity(city);
|
|
95
|
+
|
|
96
|
+
getHighestValueAvailableCityTiles(
|
|
97
|
+
city,
|
|
98
|
+
playerWorldRegistry,
|
|
99
|
+
workedTileRegistry
|
|
100
|
+
).some((tile) => {
|
|
101
|
+
if (city.tilesWorked().length >= cityGrowth.size() + 1) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
workedTileRegistry.register(new WorkedTile(tile, city));
|
|
106
|
+
|
|
107
|
+
return false;
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export const assignWorker: (
|
|
112
|
+
city: City,
|
|
113
|
+
playerWorldRegistry?: PlayerWorldRegistry,
|
|
114
|
+
cityGrowthRegistry?: CityGrowthRegistry,
|
|
115
|
+
workedTileRegistry?: WorkedTileRegistry
|
|
116
|
+
) => void = (
|
|
117
|
+
city: City,
|
|
118
|
+
playerWorldRegistry: PlayerWorldRegistry = playerWorldRegistryInstance,
|
|
119
|
+
cityGrowthRegistry: CityGrowthRegistry = cityGrowthRegistryInstance,
|
|
120
|
+
workedTileRegistry: WorkedTileRegistry = workedTileRegistryInstance
|
|
121
|
+
): void => {
|
|
122
|
+
const [newTile] = getHighestValueAvailableCityTiles(
|
|
123
|
+
city,
|
|
124
|
+
playerWorldRegistry,
|
|
125
|
+
workedTileRegistry
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
workedTileRegistry.register(new WorkedTile(newTile, city));
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export const reduceWorkers = (city: City, cityGrowth: CityGrowth): Tile[] =>
|
|
132
|
+
sortTiles(
|
|
133
|
+
city
|
|
134
|
+
.tilesWorked()
|
|
135
|
+
.entries()
|
|
136
|
+
.filter((tile: Tile) => tile !== city.tile()),
|
|
137
|
+
city
|
|
138
|
+
).slice(cityGrowth.size());
|
|
139
|
+
|
|
140
|
+
export default assignWorkers;
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@civ-clone/library-city",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"repository": "git@github.com:civ-clone/library-city.git",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"typescript",
|
|
7
|
+
"civilization"
|
|
8
|
+
],
|
|
9
|
+
"author": "dom111 <dom111@users.noreply.github.com>",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "npm run ts:compile && npm run prettier:format",
|
|
13
|
+
"prettier:check": "prettier --config .prettierrc '**/*.ts'",
|
|
14
|
+
"prettier:format": "prettier --config .prettierrc '**/*.ts' --write",
|
|
15
|
+
"ts:compile": "tsc --build tsconfig.json"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@types/node": "^14.0.0",
|
|
19
|
+
"prettier": "^2.0.0",
|
|
20
|
+
"typescript": "^4.0.0"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@civ-clone/base-city-improvement-aqueduct": "^0.1.0",
|
|
24
|
+
"@civ-clone/base-city-improvement-bank": "^0.1.0",
|
|
25
|
+
"@civ-clone/base-city-improvement-barracks": "^0.1.0",
|
|
26
|
+
"@civ-clone/base-city-improvement-cathedral": "^0.1.0",
|
|
27
|
+
"@civ-clone/base-city-improvement-citywalls": "^0.1.0",
|
|
28
|
+
"@civ-clone/base-city-improvement-colosseum": "^0.1.0",
|
|
29
|
+
"@civ-clone/base-city-improvement-courthouse": "^0.1.0",
|
|
30
|
+
"@civ-clone/base-city-improvement-factory": "^0.1.0",
|
|
31
|
+
"@civ-clone/base-city-improvement-granary": "^0.1.0",
|
|
32
|
+
"@civ-clone/base-city-improvement-hydroplant": "^0.1.0",
|
|
33
|
+
"@civ-clone/base-city-improvement-library": "^0.1.0",
|
|
34
|
+
"@civ-clone/base-city-improvement-manufacturingplant": "^0.1.0",
|
|
35
|
+
"@civ-clone/base-city-improvement-marketplace": "^0.1.0",
|
|
36
|
+
"@civ-clone/base-city-improvement-masstransit": "^0.1.0",
|
|
37
|
+
"@civ-clone/base-city-improvement-nuclearplant": "^0.1.0",
|
|
38
|
+
"@civ-clone/base-city-improvement-palace": "^0.1.0",
|
|
39
|
+
"@civ-clone/base-city-improvement-powerplant": "^0.1.0",
|
|
40
|
+
"@civ-clone/base-city-improvement-recyclingcenter": "^0.1.0",
|
|
41
|
+
"@civ-clone/base-city-improvement-sdidefence": "^0.1.0",
|
|
42
|
+
"@civ-clone/base-city-improvement-temple": "^0.1.0",
|
|
43
|
+
"@civ-clone/base-city-improvement-university": "^0.1.0",
|
|
44
|
+
"@civ-clone/base-city-yield-city-improvement-content": "^0.1.1",
|
|
45
|
+
"@civ-clone/base-city-yield-city-improvement-maintenance-gold": "^0.1.0",
|
|
46
|
+
"@civ-clone/base-city-yield-corruption": "^0.1.0",
|
|
47
|
+
"@civ-clone/base-city-yield-gold": "^0.1.0",
|
|
48
|
+
"@civ-clone/base-city-yield-happiness": "^0.1.0",
|
|
49
|
+
"@civ-clone/base-city-yield-luxuries": "^0.1.0",
|
|
50
|
+
"@civ-clone/base-city-yield-luxury-happiness": "^0.1.0",
|
|
51
|
+
"@civ-clone/base-city-yield-martial-law-content": "^0.1.1",
|
|
52
|
+
"@civ-clone/base-city-yield-military-unhappiness": "^0.1.1",
|
|
53
|
+
"@civ-clone/base-city-yield-population-support-food": "^0.1.0",
|
|
54
|
+
"@civ-clone/base-city-yield-population-unhappiness": "^0.1.0",
|
|
55
|
+
"@civ-clone/base-city-yield-research": "^0.1.0",
|
|
56
|
+
"@civ-clone/base-city-yield-unhappiness": "^0.1.0",
|
|
57
|
+
"@civ-clone/base-city-yield-unit-support-food": "^0.1.0",
|
|
58
|
+
"@civ-clone/base-city-yield-unit-support-production": "^0.1.0",
|
|
59
|
+
"@civ-clone/base-terrain-yield-food": "^0.1.0",
|
|
60
|
+
"@civ-clone/base-terrain-yield-production": "^0.1.0",
|
|
61
|
+
"@civ-clone/base-terrain-yield-trade": "^0.1.0",
|
|
62
|
+
"@civ-clone/core-city-growth": "^0.1.0",
|
|
63
|
+
"@civ-clone/core-player-world": "^0.1.9"
|
|
64
|
+
}
|
|
65
|
+
}
|
package/tsconfig.json
ADDED