@civ-clone/library-city 0.1.1 → 0.1.3

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.
@@ -34,6 +34,21 @@ export declare const assignWorker: (
34
34
  cityGrowthRegistry?: CityGrowthRegistry,
35
35
  workedTileRegistry?: WorkedTileRegistry
36
36
  ) => void;
37
+ export type WorkedTileChange = 'removed' | 'added' | 'reassigned' | 'none';
38
+ /**
39
+ * Changes whether `tile` is worked by `city`, as a player clicking it on the city map would.
40
+ *
41
+ * A tile the city works stops being worked. Any other tile is worked by a free worker, if the city has one and is
42
+ * allowed to work it. With every worker already placed, the city's workers are reassigned instead. The city centre is
43
+ * always worked.
44
+ */
45
+ export declare const changeWorkedTile: (
46
+ city: City,
47
+ tile: Tile,
48
+ playerWorldRegistry?: PlayerWorldRegistry,
49
+ cityGrowthRegistry?: CityGrowthRegistry,
50
+ workedTileRegistry?: WorkedTileRegistry
51
+ ) => WorkedTileChange;
37
52
  export declare const reduceWorkers: (
38
53
  city: City,
39
54
  cityGrowth: CityGrowth
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.reduceWorkers = exports.assignWorker = exports.assignWorkers = exports.reassignWorkers = exports.getHighestValueAvailableCityTiles = exports.sortTiles = exports.getHighestValueCityTiles = void 0;
3
+ exports.reduceWorkers = exports.changeWorkedTile = exports.assignWorker = exports.assignWorkers = exports.reassignWorkers = exports.getHighestValueAvailableCityTiles = exports.sortTiles = exports.getHighestValueCityTiles = void 0;
4
4
  const CityGrowthRegistry_1 = require("@civ-clone/core-city-growth/CityGrowthRegistry");
5
5
  const Yields_1 = require("../Yields");
6
6
  const PlayerWorldRegistry_1 = require("@civ-clone/core-player-world/PlayerWorldRegistry");
@@ -51,9 +51,41 @@ const assignWorkers = (city, playerWorldRegistry = PlayerWorldRegistry_1.instanc
51
51
  exports.assignWorkers = assignWorkers;
52
52
  const assignWorker = (city, playerWorldRegistry = PlayerWorldRegistry_1.instance, cityGrowthRegistry = CityGrowthRegistry_1.instance, workedTileRegistry = WorkedTileRegistry_1.instance) => {
53
53
  const [newTile] = (0, exports.getHighestValueAvailableCityTiles)(city, playerWorldRegistry, workedTileRegistry);
54
+ if (!newTile) {
55
+ return;
56
+ }
54
57
  workedTileRegistry.register(new WorkedTile_1.default(newTile, city));
55
58
  };
56
59
  exports.assignWorker = assignWorker;
60
+ /**
61
+ * Changes whether `tile` is worked by `city`, as a player clicking it on the city map would.
62
+ *
63
+ * A tile the city works stops being worked. Any other tile is worked by a free worker, if the city has one and is
64
+ * allowed to work it. With every worker already placed, the city's workers are reassigned instead. The city centre is
65
+ * always worked.
66
+ */
67
+ const changeWorkedTile = (city, tile, playerWorldRegistry = PlayerWorldRegistry_1.instance, cityGrowthRegistry = CityGrowthRegistry_1.instance, workedTileRegistry = WorkedTileRegistry_1.instance) => {
68
+ var _a;
69
+ if (tile === city.tile() || !city.tiles().includes(tile)) {
70
+ return 'none';
71
+ }
72
+ if (((_a = workedTileRegistry.getByTile(tile)) === null || _a === void 0 ? void 0 : _a.city()) === city) {
73
+ workedTileRegistry.unregisterByTile(tile);
74
+ return 'removed';
75
+ }
76
+ if (workedTileRegistry.getByCity(city).length >=
77
+ cityGrowthRegistry.getByCity(city).size() + 1) {
78
+ (0, exports.reassignWorkers)(city, playerWorldRegistry, cityGrowthRegistry, workedTileRegistry);
79
+ return 'reassigned';
80
+ }
81
+ if (!workedTileRegistry.tileCanBeWorkedBy(tile, city) ||
82
+ !playerWorldRegistry.getByPlayer(city.player()).includes(tile)) {
83
+ return 'none';
84
+ }
85
+ workedTileRegistry.register(new WorkedTile_1.default(tile, city));
86
+ return 'added';
87
+ };
88
+ exports.changeWorkedTile = changeWorkedTile;
57
89
  const reduceWorkers = (city, cityGrowth) => (0, exports.sortTiles)(city
58
90
  .tilesWorked()
59
91
  .entries()
@@ -1 +1 @@
1
- {"version":3,"file":"assignWorkers.js","sourceRoot":"","sources":["assignWorkers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assignWorkers.js","sourceRoot":"","sources":["assignWorkers.ts"],"names":[],"mappings":"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"}
@@ -125,9 +125,71 @@ export const assignWorker: (
125
125
  workedTileRegistry
126
126
  );
127
127
 
128
+ if (!newTile) {
129
+ return;
130
+ }
131
+
128
132
  workedTileRegistry.register(new WorkedTile(newTile, city));
129
133
  };
130
134
 
135
+ export type WorkedTileChange = 'removed' | 'added' | 'reassigned' | 'none';
136
+
137
+ /**
138
+ * Changes whether `tile` is worked by `city`, as a player clicking it on the city map would.
139
+ *
140
+ * A tile the city works stops being worked. Any other tile is worked by a free worker, if the city has one and is
141
+ * allowed to work it. With every worker already placed, the city's workers are reassigned instead. The city centre is
142
+ * always worked.
143
+ */
144
+ export const changeWorkedTile: (
145
+ city: City,
146
+ tile: Tile,
147
+ playerWorldRegistry?: PlayerWorldRegistry,
148
+ cityGrowthRegistry?: CityGrowthRegistry,
149
+ workedTileRegistry?: WorkedTileRegistry
150
+ ) => WorkedTileChange = (
151
+ city: City,
152
+ tile: Tile,
153
+ playerWorldRegistry: PlayerWorldRegistry = playerWorldRegistryInstance,
154
+ cityGrowthRegistry: CityGrowthRegistry = cityGrowthRegistryInstance,
155
+ workedTileRegistry: WorkedTileRegistry = workedTileRegistryInstance
156
+ ): WorkedTileChange => {
157
+ if (tile === city.tile() || !city.tiles().includes(tile)) {
158
+ return 'none';
159
+ }
160
+
161
+ if (workedTileRegistry.getByTile(tile)?.city() === city) {
162
+ workedTileRegistry.unregisterByTile(tile);
163
+
164
+ return 'removed';
165
+ }
166
+
167
+ if (
168
+ workedTileRegistry.getByCity(city).length >=
169
+ cityGrowthRegistry.getByCity(city).size() + 1
170
+ ) {
171
+ reassignWorkers(
172
+ city,
173
+ playerWorldRegistry,
174
+ cityGrowthRegistry,
175
+ workedTileRegistry
176
+ );
177
+
178
+ return 'reassigned';
179
+ }
180
+
181
+ if (
182
+ !workedTileRegistry.tileCanBeWorkedBy(tile, city) ||
183
+ !playerWorldRegistry.getByPlayer(city.player()).includes(tile)
184
+ ) {
185
+ return 'none';
186
+ }
187
+
188
+ workedTileRegistry.register(new WorkedTile(tile, city));
189
+
190
+ return 'added';
191
+ };
192
+
131
193
  export const reduceWorkers = (city: City, cityGrowth: CityGrowth): Tile[] =>
132
194
  sortTiles(
133
195
  city
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civ-clone/library-city",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "repository": "git@github.com:civ-clone/library-city.git",
5
5
  "keywords": [
6
6
  "typescript",