@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.
Files changed (177) hide show
  1. package/.deepsource.toml +21 -0
  2. package/.gitattributes +2 -0
  3. package/.github/workflows/build-on-push.yml +14 -0
  4. package/.nvmrc +1 -0
  5. package/.prettierrc +4 -0
  6. package/CityImprovements/Aqueduct.d.ts +3 -0
  7. package/CityImprovements/Aqueduct.js +8 -0
  8. package/CityImprovements/Aqueduct.js.map +1 -0
  9. package/CityImprovements/Aqueduct.ts +5 -0
  10. package/CityImprovements/Bank.d.ts +3 -0
  11. package/CityImprovements/Bank.js +8 -0
  12. package/CityImprovements/Bank.js.map +1 -0
  13. package/CityImprovements/Bank.ts +5 -0
  14. package/CityImprovements/Barracks.d.ts +3 -0
  15. package/CityImprovements/Barracks.js +8 -0
  16. package/CityImprovements/Barracks.js.map +1 -0
  17. package/CityImprovements/Barracks.ts +5 -0
  18. package/CityImprovements/Cathedral.d.ts +3 -0
  19. package/CityImprovements/Cathedral.js +8 -0
  20. package/CityImprovements/Cathedral.js.map +1 -0
  21. package/CityImprovements/Cathedral.ts +5 -0
  22. package/CityImprovements/CityWalls.d.ts +3 -0
  23. package/CityImprovements/CityWalls.js +8 -0
  24. package/CityImprovements/CityWalls.js.map +1 -0
  25. package/CityImprovements/CityWalls.ts +5 -0
  26. package/CityImprovements/Colosseum.d.ts +3 -0
  27. package/CityImprovements/Colosseum.js +8 -0
  28. package/CityImprovements/Colosseum.js.map +1 -0
  29. package/CityImprovements/Colosseum.ts +5 -0
  30. package/CityImprovements/Courthouse.d.ts +3 -0
  31. package/CityImprovements/Courthouse.js +8 -0
  32. package/CityImprovements/Courthouse.js.map +1 -0
  33. package/CityImprovements/Courthouse.ts +5 -0
  34. package/CityImprovements/Factory.d.ts +3 -0
  35. package/CityImprovements/Factory.js +8 -0
  36. package/CityImprovements/Factory.js.map +1 -0
  37. package/CityImprovements/Factory.ts +5 -0
  38. package/CityImprovements/Granary.d.ts +3 -0
  39. package/CityImprovements/Granary.js +8 -0
  40. package/CityImprovements/Granary.js.map +1 -0
  41. package/CityImprovements/Granary.ts +5 -0
  42. package/CityImprovements/HydroPlant.d.ts +3 -0
  43. package/CityImprovements/HydroPlant.js +8 -0
  44. package/CityImprovements/HydroPlant.js.map +1 -0
  45. package/CityImprovements/HydroPlant.ts +5 -0
  46. package/CityImprovements/Library.d.ts +3 -0
  47. package/CityImprovements/Library.js +8 -0
  48. package/CityImprovements/Library.js.map +1 -0
  49. package/CityImprovements/Library.ts +5 -0
  50. package/CityImprovements/ManufacturingPlant.d.ts +3 -0
  51. package/CityImprovements/ManufacturingPlant.js +8 -0
  52. package/CityImprovements/ManufacturingPlant.js.map +1 -0
  53. package/CityImprovements/ManufacturingPlant.ts +5 -0
  54. package/CityImprovements/Marketplace.d.ts +3 -0
  55. package/CityImprovements/Marketplace.js +8 -0
  56. package/CityImprovements/Marketplace.js.map +1 -0
  57. package/CityImprovements/Marketplace.ts +5 -0
  58. package/CityImprovements/MassTransit.d.ts +3 -0
  59. package/CityImprovements/MassTransit.js +8 -0
  60. package/CityImprovements/MassTransit.js.map +1 -0
  61. package/CityImprovements/MassTransit.ts +5 -0
  62. package/CityImprovements/NuclearPlant.d.ts +3 -0
  63. package/CityImprovements/NuclearPlant.js +8 -0
  64. package/CityImprovements/NuclearPlant.js.map +1 -0
  65. package/CityImprovements/NuclearPlant.ts +5 -0
  66. package/CityImprovements/Palace.d.ts +3 -0
  67. package/CityImprovements/Palace.js +8 -0
  68. package/CityImprovements/Palace.js.map +1 -0
  69. package/CityImprovements/Palace.ts +5 -0
  70. package/CityImprovements/PowerPlant.d.ts +3 -0
  71. package/CityImprovements/PowerPlant.js +8 -0
  72. package/CityImprovements/PowerPlant.js.map +1 -0
  73. package/CityImprovements/PowerPlant.ts +5 -0
  74. package/CityImprovements/RecyclingCenter.d.ts +3 -0
  75. package/CityImprovements/RecyclingCenter.js +8 -0
  76. package/CityImprovements/RecyclingCenter.js.map +1 -0
  77. package/CityImprovements/RecyclingCenter.ts +5 -0
  78. package/CityImprovements/SdiDefence.d.ts +3 -0
  79. package/CityImprovements/SdiDefence.js +8 -0
  80. package/CityImprovements/SdiDefence.js.map +1 -0
  81. package/CityImprovements/SdiDefence.ts +5 -0
  82. package/CityImprovements/Temple.d.ts +3 -0
  83. package/CityImprovements/Temple.js +8 -0
  84. package/CityImprovements/Temple.js.map +1 -0
  85. package/CityImprovements/Temple.ts +5 -0
  86. package/CityImprovements/University.d.ts +3 -0
  87. package/CityImprovements/University.js +8 -0
  88. package/CityImprovements/University.js.map +1 -0
  89. package/CityImprovements/University.ts +5 -0
  90. package/CityImprovements.d.ts +21 -0
  91. package/CityImprovements.js +46 -0
  92. package/CityImprovements.js.map +1 -0
  93. package/CityImprovements.ts +21 -0
  94. package/LICENSE +21 -0
  95. package/README.md +3 -0
  96. package/Yields/CityImprovementContent.d.ts +3 -0
  97. package/Yields/CityImprovementContent.js +8 -0
  98. package/Yields/CityImprovementContent.js.map +1 -0
  99. package/Yields/CityImprovementContent.ts +5 -0
  100. package/Yields/Corruption.d.ts +3 -0
  101. package/Yields/Corruption.js +8 -0
  102. package/Yields/Corruption.js.map +1 -0
  103. package/Yields/Corruption.ts +5 -0
  104. package/Yields/Food.d.ts +3 -0
  105. package/Yields/Food.js +8 -0
  106. package/Yields/Food.js.map +1 -0
  107. package/Yields/Food.ts +5 -0
  108. package/Yields/FoodStorage.d.ts +3 -0
  109. package/Yields/FoodStorage.js +8 -0
  110. package/Yields/FoodStorage.js.map +1 -0
  111. package/Yields/FoodStorage.ts +5 -0
  112. package/Yields/Gold.d.ts +3 -0
  113. package/Yields/Gold.js +8 -0
  114. package/Yields/Gold.js.map +1 -0
  115. package/Yields/Gold.ts +5 -0
  116. package/Yields/Happiness.d.ts +3 -0
  117. package/Yields/Happiness.js +8 -0
  118. package/Yields/Happiness.js.map +1 -0
  119. package/Yields/Happiness.ts +5 -0
  120. package/Yields/Luxuries.d.ts +3 -0
  121. package/Yields/Luxuries.js +8 -0
  122. package/Yields/Luxuries.js.map +1 -0
  123. package/Yields/Luxuries.ts +5 -0
  124. package/Yields/LuxuryHappiness.d.ts +3 -0
  125. package/Yields/LuxuryHappiness.js +8 -0
  126. package/Yields/LuxuryHappiness.js.map +1 -0
  127. package/Yields/LuxuryHappiness.ts +5 -0
  128. package/Yields/MartialLaw.d.ts +3 -0
  129. package/Yields/MartialLaw.js +8 -0
  130. package/Yields/MartialLaw.js.map +1 -0
  131. package/Yields/MartialLaw.ts +5 -0
  132. package/Yields/MilitaryUnhappiness.d.ts +3 -0
  133. package/Yields/MilitaryUnhappiness.js +8 -0
  134. package/Yields/MilitaryUnhappiness.js.map +1 -0
  135. package/Yields/MilitaryUnhappiness.ts +5 -0
  136. package/Yields/PopulationSupportFood.d.ts +3 -0
  137. package/Yields/PopulationSupportFood.js +8 -0
  138. package/Yields/PopulationSupportFood.js.map +1 -0
  139. package/Yields/PopulationSupportFood.ts +5 -0
  140. package/Yields/PopulationUnhappiness.d.ts +3 -0
  141. package/Yields/PopulationUnhappiness.js +8 -0
  142. package/Yields/PopulationUnhappiness.js.map +1 -0
  143. package/Yields/PopulationUnhappiness.ts +5 -0
  144. package/Yields/Production.d.ts +3 -0
  145. package/Yields/Production.js +8 -0
  146. package/Yields/Production.js.map +1 -0
  147. package/Yields/Production.ts +5 -0
  148. package/Yields/Research.d.ts +3 -0
  149. package/Yields/Research.js +8 -0
  150. package/Yields/Research.js.map +1 -0
  151. package/Yields/Research.ts +5 -0
  152. package/Yields/Trade.d.ts +3 -0
  153. package/Yields/Trade.js +8 -0
  154. package/Yields/Trade.js.map +1 -0
  155. package/Yields/Trade.ts +5 -0
  156. package/Yields/Unhappiness.d.ts +3 -0
  157. package/Yields/Unhappiness.js +8 -0
  158. package/Yields/Unhappiness.js.map +1 -0
  159. package/Yields/Unhappiness.ts +5 -0
  160. package/Yields/UnitSupportFood.d.ts +3 -0
  161. package/Yields/UnitSupportFood.js +8 -0
  162. package/Yields/UnitSupportFood.js.map +1 -0
  163. package/Yields/UnitSupportFood.ts +5 -0
  164. package/Yields/UnitSupportProduction.d.ts +3 -0
  165. package/Yields/UnitSupportProduction.js +8 -0
  166. package/Yields/UnitSupportProduction.js.map +1 -0
  167. package/Yields/UnitSupportProduction.ts +5 -0
  168. package/Yields.d.ts +18 -0
  169. package/Yields.js +40 -0
  170. package/Yields.js.map +1 -0
  171. package/Yields.ts +18 -0
  172. package/lib/assignWorkers.d.ts +41 -0
  173. package/lib/assignWorkers.js +63 -0
  174. package/lib/assignWorkers.js.map +1 -0
  175. package/lib/assignWorkers.ts +140 -0
  176. package/package.json +65 -0
  177. 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
@@ -0,0 +1,16 @@
1
+ {
2
+ "compilerOptions": {
3
+ "declaration": true,
4
+ "lib": [
5
+ "es2019"
6
+ ],
7
+ "module": "commonjs",
8
+ "sourceMap": true,
9
+ "strict": true,
10
+ "target": "ES2018"
11
+ },
12
+ "exclude": [
13
+ "node_modules",
14
+ "tests/*.test.ts"
15
+ ]
16
+ }