@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.
- package/lib/assignWorkers.d.ts +15 -0
- package/lib/assignWorkers.js +33 -1
- package/lib/assignWorkers.js.map +1 -1
- package/lib/assignWorkers.ts +62 -0
- package/package.json +1 -1
package/lib/assignWorkers.d.ts
CHANGED
|
@@ -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
|
package/lib/assignWorkers.js
CHANGED
|
@@ -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()
|
package/lib/assignWorkers.js.map
CHANGED
|
@@ -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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"}
|
package/lib/assignWorkers.ts
CHANGED
|
@@ -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
|