@futdevpro/fsm-dynamo 1.20.97 → 1.20.100

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 (46) hide show
  1. package/build/_modules/game/_collections/build-reservation.util.d.ts +31 -0
  2. package/build/_modules/game/_collections/build-reservation.util.d.ts.map +1 -0
  3. package/build/_modules/game/_collections/build-reservation.util.js +77 -0
  4. package/build/_modules/game/_collections/build-reservation.util.js.map +1 -0
  5. package/build/_modules/game/_collections/game-save.util.d.ts +46 -0
  6. package/build/_modules/game/_collections/game-save.util.d.ts.map +1 -0
  7. package/build/_modules/game/_collections/game-save.util.js +189 -0
  8. package/build/_modules/game/_collections/game-save.util.js.map +1 -0
  9. package/build/_modules/game/_models/build-reservation.interface.d.ts +70 -0
  10. package/build/_modules/game/_models/build-reservation.interface.d.ts.map +1 -0
  11. package/build/_modules/game/_models/build-reservation.interface.js +7 -0
  12. package/build/_modules/game/_models/build-reservation.interface.js.map +1 -0
  13. package/build/_modules/game/_models/game-save.interface.d.ts +76 -0
  14. package/build/_modules/game/_models/game-save.interface.d.ts.map +1 -0
  15. package/build/_modules/game/_models/game-save.interface.js +7 -0
  16. package/build/_modules/game/_models/game-save.interface.js.map +1 -0
  17. package/build/_modules/game/_models/viewport.control-model.d.ts +58 -0
  18. package/build/_modules/game/_models/viewport.control-model.d.ts.map +1 -0
  19. package/build/_modules/game/_models/viewport.control-model.js +167 -0
  20. package/build/_modules/game/_models/viewport.control-model.js.map +1 -0
  21. package/build/_modules/game/_models/viewport.interface.d.ts +35 -0
  22. package/build/_modules/game/_models/viewport.interface.d.ts.map +1 -0
  23. package/build/_modules/game/_models/viewport.interface.js +3 -0
  24. package/build/_modules/game/_models/viewport.interface.js.map +1 -0
  25. package/build/_modules/game/_models/work-order-scheduler.control-model.d.ts +55 -0
  26. package/build/_modules/game/_models/work-order-scheduler.control-model.d.ts.map +1 -0
  27. package/build/_modules/game/_models/work-order-scheduler.control-model.js +201 -0
  28. package/build/_modules/game/_models/work-order-scheduler.control-model.js.map +1 -0
  29. package/build/_modules/game/_models/work-order-scheduler.interface.d.ts +43 -0
  30. package/build/_modules/game/_models/work-order-scheduler.interface.d.ts.map +1 -0
  31. package/build/_modules/game/_models/work-order-scheduler.interface.js +3 -0
  32. package/build/_modules/game/_models/work-order-scheduler.interface.js.map +1 -0
  33. package/build/_modules/game/index.d.ts +8 -0
  34. package/build/_modules/game/index.d.ts.map +1 -1
  35. package/build/_modules/game/index.js +8 -0
  36. package/build/_modules/game/index.js.map +1 -1
  37. package/build-esm/_modules/game/_collections/build-reservation.util.js +72 -0
  38. package/build-esm/_modules/game/_collections/game-save.util.js +184 -0
  39. package/build-esm/_modules/game/_models/build-reservation.interface.js +5 -0
  40. package/build-esm/_modules/game/_models/game-save.interface.js +5 -0
  41. package/build-esm/_modules/game/_models/viewport.control-model.js +162 -0
  42. package/build-esm/_modules/game/_models/viewport.interface.js +1 -0
  43. package/build-esm/_modules/game/_models/work-order-scheduler.control-model.js +196 -0
  44. package/build-esm/_modules/game/_models/work-order-scheduler.interface.js +1 -0
  45. package/build-esm/_modules/game/index.js +8 -0
  46. package/package.json +1 -1
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_Viewport_ControlModel = void 0;
4
+ const error_control_model_1 = require("../../../_models/control-models/error.control-model");
5
+ /**
6
+ * BFR-WARFACTORY-013 — framework-independent zoom / pan viewport. It is deliberately NOT "the camera": the same model
7
+ * drives a world canvas and a DOM panel (e.g. a zoomable tech tree). Input handling (pointer, wheel, keys) belongs to
8
+ * a UI adapter that calls these methods.
9
+ *
10
+ * - `worldToScreen` / `screenToWorld` — the only transform; the screen centre shows `center`.
11
+ * - `zoomAt(screenPoint, factor)` — the world point UNDER the pointer stays under the pointer (wheel / pinch feel).
12
+ * - `panByScreen(dx, dy)` — drag: the content follows the pointer at any zoom.
13
+ * - `move(direction, speed, elapsedSeconds)` — elapsed-time keyboard panning; each step is capped
14
+ * (`maxMoveStepSeconds`), so a hitch never makes the camera jump; speed is in SCREEN px/s (same feel at any zoom).
15
+ * - Zoom is clamped to [minZoom, maxZoom], the centre to `worldBounds`; non-finite input is ignored, never stored.
16
+ */
17
+ class DyFM_Viewport_ControlModel {
18
+ screenWidth;
19
+ screenHeight;
20
+ minZoom;
21
+ maxZoom;
22
+ bounds;
23
+ stepFactor;
24
+ maxMoveStep;
25
+ centerPoint = { x: 0, y: 0 };
26
+ zoomValue = 1;
27
+ /** Creates the viewport; an invalid configuration throws `DYFM-VIEWPORT-CONFIG`. */
28
+ constructor(config) {
29
+ this.minZoom = config.minZoom ?? 0.25;
30
+ this.maxZoom = config.maxZoom ?? 4;
31
+ this.stepFactor = config.zoomStepFactor ?? 1.1;
32
+ this.maxMoveStep = config.maxMoveStepSeconds ?? 0.1;
33
+ this.bounds = config.worldBounds;
34
+ const positive = (value) => Number.isFinite(value) && value > 0;
35
+ if (!positive(config.screenWidth) || !positive(config.screenHeight) || !positive(this.minZoom)
36
+ || !(this.maxZoom >= this.minZoom) || !(this.stepFactor > 1) || !positive(this.maxMoveStep)
37
+ || (this.bounds && !(this.bounds.maxX >= this.bounds.minX && this.bounds.maxY >= this.bounds.minY))) {
38
+ throw new error_control_model_1.DyFM_Error({
39
+ message: 'DyFM_Viewport: needs a positive screen size, 0 < minZoom ≤ maxZoom, zoomStepFactor > 1, '
40
+ + 'maxMoveStepSeconds > 0 and ordered worldBounds',
41
+ errorCode: 'DYFM-VIEWPORT-CONFIG',
42
+ issuerService: 'DyFM_Viewport_ControlModel',
43
+ });
44
+ }
45
+ this.screenWidth = config.screenWidth;
46
+ this.screenHeight = config.screenHeight;
47
+ this.zoomValue = this.clampZoom(1);
48
+ this.centerPoint = this.clampCenter({ x: 0, y: 0 });
49
+ }
50
+ /** The world point shown at the screen centre. */
51
+ get center() {
52
+ return { ...this.centerPoint };
53
+ }
54
+ /** Screen pixels per world unit. */
55
+ get zoom() {
56
+ return this.zoomValue;
57
+ }
58
+ /** World → screen pixels. */
59
+ worldToScreen(world) {
60
+ return {
61
+ x: (world.x - this.centerPoint.x) * this.zoomValue + this.screenWidth / 2,
62
+ y: (world.y - this.centerPoint.y) * this.zoomValue + this.screenHeight / 2,
63
+ };
64
+ }
65
+ /** Screen pixels → world. */
66
+ screenToWorld(screen) {
67
+ return {
68
+ x: (screen.x - this.screenWidth / 2) / this.zoomValue + this.centerPoint.x,
69
+ y: (screen.y - this.screenHeight / 2) / this.zoomValue + this.centerPoint.y,
70
+ };
71
+ }
72
+ /** Sets the zoom (clamped), keeping the centre. */
73
+ setZoom(zoom) {
74
+ if (Number.isFinite(zoom)) {
75
+ this.zoomValue = this.clampZoom(zoom);
76
+ }
77
+ }
78
+ /** Zooms by `factor` keeping the world point under `screenPoint` fixed on screen (then clamps). */
79
+ zoomAt(screenPoint, factor) {
80
+ if (!Number.isFinite(factor) || factor <= 0 || !Number.isFinite(screenPoint?.x) || !Number.isFinite(screenPoint?.y)) {
81
+ return;
82
+ }
83
+ const anchor = this.screenToWorld(screenPoint);
84
+ this.zoomValue = this.clampZoom(this.zoomValue * factor);
85
+ // re-centre so that `anchor` maps back to `screenPoint`
86
+ this.centerPoint = this.clampCenter({
87
+ x: anchor.x - (screenPoint.x - this.screenWidth / 2) / this.zoomValue,
88
+ y: anchor.y - (screenPoint.y - this.screenHeight / 2) / this.zoomValue,
89
+ });
90
+ }
91
+ /** `steps` notches (+ in, − out) at `screenPoint` (default: the screen centre). */
92
+ zoomStep(steps, screenPoint) {
93
+ if (Number.isFinite(steps) && steps !== 0) {
94
+ this.zoomAt(screenPoint ?? { x: this.screenWidth / 2, y: this.screenHeight / 2 }, this.stepFactor ** steps);
95
+ }
96
+ }
97
+ /** Drag by a screen delta: the content moves WITH the pointer. */
98
+ panByScreen(dx, dy) {
99
+ if (Number.isFinite(dx) && Number.isFinite(dy)) {
100
+ this.centerPoint = this.clampCenter({
101
+ x: this.centerPoint.x - dx / this.zoomValue,
102
+ y: this.centerPoint.y - dy / this.zoomValue,
103
+ });
104
+ }
105
+ }
106
+ /**
107
+ * Elapsed-time panning (keyboard): `direction` is normalised, `speedScreenPxPerSecond` is screen speed, the elapsed
108
+ * time is capped at `maxMoveStepSeconds` per call. Returns the world distance actually moved.
109
+ */
110
+ move(direction, speedScreenPxPerSecond, elapsedSeconds) {
111
+ const length = Math.hypot(direction?.x ?? NaN, direction?.y ?? NaN);
112
+ if (!Number.isFinite(length) || length === 0 || !Number.isFinite(speedScreenPxPerSecond)
113
+ || speedScreenPxPerSecond <= 0 || !Number.isFinite(elapsedSeconds) || elapsedSeconds <= 0) {
114
+ return 0;
115
+ }
116
+ const seconds = Math.min(elapsedSeconds, this.maxMoveStep);
117
+ const worldDistance = speedScreenPxPerSecond * seconds / this.zoomValue;
118
+ const before = this.centerPoint;
119
+ this.centerPoint = this.clampCenter({
120
+ x: before.x + direction.x / length * worldDistance,
121
+ y: before.y + direction.y / length * worldDistance,
122
+ });
123
+ return Math.hypot(this.centerPoint.x - before.x, this.centerPoint.y - before.y);
124
+ }
125
+ /** Centres on a world point (clamped). */
126
+ centerOn(world) {
127
+ if (Number.isFinite(world?.x) && Number.isFinite(world?.y)) {
128
+ this.centerPoint = this.clampCenter(world);
129
+ }
130
+ }
131
+ /** The screen changed size (e.g. a window resize); the centre stays. */
132
+ resize(screenWidth, screenHeight) {
133
+ if (Number.isFinite(screenWidth) && screenWidth > 0 && Number.isFinite(screenHeight) && screenHeight > 0) {
134
+ this.screenWidth = screenWidth;
135
+ this.screenHeight = screenHeight;
136
+ }
137
+ }
138
+ /** Save state. */
139
+ exportState() {
140
+ return { schemaVersion: 1, center: this.center, zoom: this.zoomValue };
141
+ }
142
+ /** Restore state (clamped to THIS viewport's limits); `false` and no change when unreadable. */
143
+ importState(state) {
144
+ const candidate = state && typeof state === 'object' ? state : null;
145
+ if (!candidate || candidate.schemaVersion !== 1 || !Number.isFinite(candidate.zoom)
146
+ || !Number.isFinite(candidate.center?.x) || !Number.isFinite(candidate.center?.y)) {
147
+ return false;
148
+ }
149
+ this.zoomValue = this.clampZoom(candidate.zoom);
150
+ this.centerPoint = this.clampCenter(candidate.center);
151
+ return true;
152
+ }
153
+ clampZoom(zoom) {
154
+ return Math.min(this.maxZoom, Math.max(this.minZoom, zoom));
155
+ }
156
+ clampCenter(point) {
157
+ if (!this.bounds) {
158
+ return { x: point.x, y: point.y };
159
+ }
160
+ return {
161
+ x: Math.min(this.bounds.maxX, Math.max(this.bounds.minX, point.x)),
162
+ y: Math.min(this.bounds.maxY, Math.max(this.bounds.minY, point.y)),
163
+ };
164
+ }
165
+ }
166
+ exports.DyFM_Viewport_ControlModel = DyFM_Viewport_ControlModel;
167
+ //# sourceMappingURL=viewport.control-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.control-model.js","sourceRoot":"","sources":["../../../../src/_modules/game/_models/viewport.control-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /** BFR-WARFACTORY-013 — a 2D point (world units or screen pixels, depending on the call). */
2
+ export interface DyFM_Viewport_Point {
3
+ x: number;
4
+ y: number;
5
+ }
6
+ /** BFR-WARFACTORY-013 — `DyFM_Viewport_ControlModel` configuration (one model for a world canvas AND a DOM panel). */
7
+ export interface DyFM_Viewport_Config {
8
+ /** Screen size in pixels (update with `resize`). */
9
+ screenWidth: number;
10
+ screenHeight: number;
11
+ /** Zoom limits (1 = one world unit per pixel). Defaults: `0.25` .. `4`. */
12
+ minZoom?: number;
13
+ maxZoom?: number;
14
+ /** Optional world rectangle the CENTER is kept inside. */
15
+ worldBounds?: {
16
+ minX: number;
17
+ minY: number;
18
+ maxX: number;
19
+ maxY: number;
20
+ };
21
+ /** Multiplicative zoom step for `zoomStep(±n)` (e.g. a wheel notch). Default: `1.1`. */
22
+ zoomStepFactor?: number;
23
+ /**
24
+ * Largest elapsed time one `move` step may use (seconds) — a frame hitch / tab switch must not become a camera
25
+ * JUMP. Default: `0.1`.
26
+ */
27
+ maxMoveStepSeconds?: number;
28
+ }
29
+ /** BFR-WARFACTORY-013 — the save / restore state. */
30
+ export interface DyFM_Viewport_State {
31
+ schemaVersion: 1;
32
+ center: DyFM_Viewport_Point;
33
+ zoom: number;
34
+ }
35
+ //# sourceMappingURL=viewport.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/viewport.interface.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,sHAAsH;AACtH,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=viewport.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.interface.js","sourceRoot":"","sources":["../../../../src/_modules/game/_models/viewport.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { DyFM_WorkOrder_State, DyFM_WorkOrderScheduler_AdvanceResult, DyFM_WorkOrderScheduler_CancelResult, DyFM_WorkOrderScheduler_Config, DyFM_WorkOrderScheduler_HealReport, DyFM_WorkOrderScheduler_State } from './work-order-scheduler.interface';
2
+ /**
3
+ * BFR-WARFACTORY-012 — headless, cancel-safe scheduler of interchangeable workers over parallel work orders.
4
+ *
5
+ * Guarantees (each pinned by a spec):
6
+ * - **Release is structural, not a happy-path step:** an assignment exists only as `worker → order`; cancelling an
7
+ * order, completing it or removing (destroying) a worker deletes the entry in the same call ⇒ no stranded worker.
8
+ * - **Every pending order gets ≥ 1 worker when possible:** idle workers first; if none is idle, one is moved from the
9
+ * order that has the most (only from an order with > 1) — so one plan cannot starve the others ("frozen" plans).
10
+ * - **Stable least-assigned distribution:** extra workers go to the order with the fewest (tie → the earliest order);
11
+ * existing assignments are not reshuffled.
12
+ * - **Self-healing import:** stale ownership (unknown worker / order, duplicates) is dropped and REPORTED; importing
13
+ * the same state twice gives the same result.
14
+ * No clock, no RNG: time comes in through `advance(simulationSeconds)` (e.g. from `DyFM_SimulationClock_ControlModel`).
15
+ */
16
+ export declare class DyFM_WorkOrderScheduler_ControlModel {
17
+ private readonly rate;
18
+ private orders;
19
+ private workerIds;
20
+ /** workerId → orderId (the ONLY ownership record). */
21
+ private assignments;
22
+ /** Creates the scheduler; an invalid rate throws `DYFM-WORK-ORDER-CONFIG`. */
23
+ constructor(config?: DyFM_WorkOrderScheduler_Config);
24
+ /** Adds a work order at the end of the FIFO; a duplicate id or non-positive work throws `DYFM-WORK-ORDER-INVALID`. */
25
+ addOrder(order: {
26
+ orderId: string;
27
+ work: number;
28
+ progress?: number;
29
+ }): void;
30
+ /** Adds an (idle) worker; duplicates are ignored. */
31
+ addWorker(workerId: string): void;
32
+ /** Removes (destroys) a worker; its assignment goes with it. Idempotent. */
33
+ removeWorker(workerId: string): void;
34
+ /** Cancels an order: removes it and releases its workers in the same call. Idempotent (unknown → found: false). */
35
+ cancel(orderId: string): DyFM_WorkOrderScheduler_CancelResult;
36
+ /** Advances every order by its workers × rate × seconds; completed orders leave and free their workers. */
37
+ advance(simulationSeconds: number): DyFM_WorkOrderScheduler_AdvanceResult;
38
+ /** The workers of an order, in assignment order. */
39
+ workersOf(orderId: string): string[];
40
+ /** The order a worker is on (`undefined` = idle). */
41
+ orderOf(workerId: string): string | undefined;
42
+ /** Current orders (copies, FIFO). */
43
+ getOrders(): DyFM_WorkOrder_State[];
44
+ /** The save/load snapshot. */
45
+ exportState(): DyFM_WorkOrderScheduler_State;
46
+ /**
47
+ * Restores a snapshot and HEALS stale ownership (assignments to unknown workers / orders, duplicates): dropped and
48
+ * reported, then the distribution rules re-apply. An unreadable snapshot throws `DYFM-WORK-ORDER-STATE`.
49
+ */
50
+ importState(state: DyFM_WorkOrderScheduler_State): DyFM_WorkOrderScheduler_HealReport;
51
+ /** Applies the distribution rules (stable: existing valid assignments are kept). */
52
+ private rebalance;
53
+ private static error;
54
+ }
55
+ //# sourceMappingURL=work-order-scheduler.control-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-order-scheduler.control-model.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/work-order-scheduler.control-model.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,qCAAqC,EACrC,oCAAoC,EACpC,8BAA8B,EAC9B,kCAAkC,EAClC,6BAA6B,EAC9B,MAAM,kCAAkC,CAAC;AAE1C;;;;;;;;;;;;;GAaG;AACH,qBAAa,oCAAoC;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,SAAS,CAAgB;IACjC,sDAAsD;IACtD,OAAO,CAAC,WAAW,CAAkC;IAErD,8EAA8E;gBAClE,MAAM,GAAE,8BAAmC;IASvD,sHAAsH;IACtH,QAAQ,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAU3E,qDAAqD;IACrD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOjC,4EAA4E;IAC5E,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMpC,mHAAmH;IACnH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,oCAAoC;IAgB7D,2GAA2G;IAC3G,OAAO,CAAC,iBAAiB,EAAE,MAAM,GAAG,qCAAqC;IA0BzE,oDAAoD;IACpD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAKpC,qDAAqD;IACrD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI7C,qCAAqC;IACrC,SAAS,IAAI,oBAAoB,EAAE;IAInC,8BAA8B;IAC9B,WAAW,IAAI,6BAA6B;IAS5C;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,6BAA6B,GAAG,kCAAkC;IAmDrF,oFAAoF;IACpF,OAAO,CAAC,SAAS;IA0CjB,OAAO,CAAC,MAAM,CAAC,KAAK;CAOrB"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_WorkOrderScheduler_ControlModel = void 0;
4
+ const error_control_model_1 = require("../../../_models/control-models/error.control-model");
5
+ /**
6
+ * BFR-WARFACTORY-012 — headless, cancel-safe scheduler of interchangeable workers over parallel work orders.
7
+ *
8
+ * Guarantees (each pinned by a spec):
9
+ * - **Release is structural, not a happy-path step:** an assignment exists only as `worker → order`; cancelling an
10
+ * order, completing it or removing (destroying) a worker deletes the entry in the same call ⇒ no stranded worker.
11
+ * - **Every pending order gets ≥ 1 worker when possible:** idle workers first; if none is idle, one is moved from the
12
+ * order that has the most (only from an order with > 1) — so one plan cannot starve the others ("frozen" plans).
13
+ * - **Stable least-assigned distribution:** extra workers go to the order with the fewest (tie → the earliest order);
14
+ * existing assignments are not reshuffled.
15
+ * - **Self-healing import:** stale ownership (unknown worker / order, duplicates) is dropped and REPORTED; importing
16
+ * the same state twice gives the same result.
17
+ * No clock, no RNG: time comes in through `advance(simulationSeconds)` (e.g. from `DyFM_SimulationClock_ControlModel`).
18
+ */
19
+ class DyFM_WorkOrderScheduler_ControlModel {
20
+ rate;
21
+ orders = [];
22
+ workerIds = [];
23
+ /** workerId → orderId (the ONLY ownership record). */
24
+ assignments = new Map();
25
+ /** Creates the scheduler; an invalid rate throws `DYFM-WORK-ORDER-CONFIG`. */
26
+ constructor(config = {}) {
27
+ const rate = config.workPerWorkerPerSecond ?? 1;
28
+ if (!Number.isFinite(rate) || rate <= 0) {
29
+ throw DyFM_WorkOrderScheduler_ControlModel.error('DYFM-WORK-ORDER-CONFIG', `workPerWorkerPerSecond must be > 0 (${rate})`);
30
+ }
31
+ this.rate = rate;
32
+ }
33
+ /** Adds a work order at the end of the FIFO; a duplicate id or non-positive work throws `DYFM-WORK-ORDER-INVALID`. */
34
+ addOrder(order) {
35
+ if (!order?.orderId || this.orders.some((o) => o.orderId === order.orderId)
36
+ || !Number.isFinite(order.work) || order.work <= 0) {
37
+ throw DyFM_WorkOrderScheduler_ControlModel.error('DYFM-WORK-ORDER-INVALID', `order needs a unique orderId and work > 0 (${order?.orderId})`);
38
+ }
39
+ this.orders.push({ orderId: order.orderId, work: order.work, progress: Math.max(0, order.progress ?? 0) });
40
+ this.rebalance();
41
+ }
42
+ /** Adds an (idle) worker; duplicates are ignored. */
43
+ addWorker(workerId) {
44
+ if (workerId && !this.workerIds.includes(workerId)) {
45
+ this.workerIds.push(workerId);
46
+ this.rebalance();
47
+ }
48
+ }
49
+ /** Removes (destroys) a worker; its assignment goes with it. Idempotent. */
50
+ removeWorker(workerId) {
51
+ this.workerIds = this.workerIds.filter((id) => id !== workerId);
52
+ this.assignments.delete(workerId);
53
+ this.rebalance();
54
+ }
55
+ /** Cancels an order: removes it and releases its workers in the same call. Idempotent (unknown → found: false). */
56
+ cancel(orderId) {
57
+ const order = this.orders.find((o) => o.orderId === orderId);
58
+ if (!order) {
59
+ return { found: false, releasedWorkerIds: [], progressRatio: 0 };
60
+ }
61
+ const released = this.workersOf(orderId);
62
+ this.orders = this.orders.filter((o) => o.orderId !== orderId);
63
+ released.forEach((workerId) => this.assignments.delete(workerId));
64
+ this.rebalance();
65
+ return { found: true, releasedWorkerIds: released, progressRatio: Math.min(1, order.progress / order.work) };
66
+ }
67
+ /** Advances every order by its workers × rate × seconds; completed orders leave and free their workers. */
68
+ advance(simulationSeconds) {
69
+ if (!Number.isFinite(simulationSeconds) || simulationSeconds <= 0) {
70
+ return { completedOrderIds: [] };
71
+ }
72
+ const completed = [];
73
+ for (const order of this.orders) {
74
+ order.progress += this.workersOf(order.orderId).length * this.rate * simulationSeconds;
75
+ if (order.progress >= order.work) {
76
+ completed.push(order.orderId);
77
+ }
78
+ }
79
+ if (completed.length) {
80
+ this.orders = this.orders.filter((o) => !completed.includes(o.orderId));
81
+ for (const [workerId, orderId] of [...this.assignments]) {
82
+ if (completed.includes(orderId)) {
83
+ this.assignments.delete(workerId);
84
+ }
85
+ }
86
+ this.rebalance();
87
+ }
88
+ return { completedOrderIds: completed };
89
+ }
90
+ /** The workers of an order, in assignment order. */
91
+ workersOf(orderId) {
92
+ return [...this.assignments].filter(([, id]) => id === orderId)
93
+ .map(([workerId]) => workerId);
94
+ }
95
+ /** The order a worker is on (`undefined` = idle). */
96
+ orderOf(workerId) {
97
+ return this.assignments.get(workerId);
98
+ }
99
+ /** Current orders (copies, FIFO). */
100
+ getOrders() {
101
+ return this.orders.map((o) => ({ ...o }));
102
+ }
103
+ /** The save/load snapshot. */
104
+ exportState() {
105
+ return {
106
+ schemaVersion: 1,
107
+ orders: this.getOrders(),
108
+ workerIds: [...this.workerIds],
109
+ assignments: Object.fromEntries(this.assignments),
110
+ };
111
+ }
112
+ /**
113
+ * Restores a snapshot and HEALS stale ownership (assignments to unknown workers / orders, duplicates): dropped and
114
+ * reported, then the distribution rules re-apply. An unreadable snapshot throws `DYFM-WORK-ORDER-STATE`.
115
+ */
116
+ importState(state) {
117
+ if (!state || state.schemaVersion !== 1 || !Array.isArray(state.orders) || !Array.isArray(state.workerIds)
118
+ || !state.assignments || typeof state.assignments !== 'object') {
119
+ throw DyFM_WorkOrderScheduler_ControlModel.error('DYFM-WORK-ORDER-STATE', 'unreadable scheduler snapshot');
120
+ }
121
+ const report = { droppedUnknownWorkers: [], droppedUnknownOrders: [], skippedDuplicates: [] };
122
+ const orders = [];
123
+ for (const order of state.orders) {
124
+ if (!order?.orderId || orders.some((o) => o.orderId === order.orderId)
125
+ || !Number.isFinite(order.work) || order.work <= 0) {
126
+ report.skippedDuplicates.push(String(order?.orderId));
127
+ continue;
128
+ }
129
+ if (Number(order.progress) >= order.work) {
130
+ continue; // a completed order is not "active" — its assignments heal below
131
+ }
132
+ orders.push({ orderId: order.orderId, work: order.work, progress: Math.max(0, Number(order.progress) || 0) });
133
+ }
134
+ const workerIds = [];
135
+ for (const workerId of state.workerIds) {
136
+ if (!workerId || workerIds.includes(workerId)) {
137
+ report.skippedDuplicates.push(String(workerId));
138
+ continue;
139
+ }
140
+ workerIds.push(workerId);
141
+ }
142
+ const assignments = new Map();
143
+ for (const [workerId, orderId] of Object.entries(state.assignments)) {
144
+ if (!workerIds.includes(workerId)) {
145
+ report.droppedUnknownWorkers.push(workerId);
146
+ }
147
+ else if (!orders.some((o) => o.orderId === orderId)) {
148
+ report.droppedUnknownOrders.push(`${workerId}→${orderId}`);
149
+ }
150
+ else {
151
+ assignments.set(workerId, orderId);
152
+ }
153
+ }
154
+ this.orders = orders;
155
+ this.workerIds = workerIds;
156
+ this.assignments = assignments;
157
+ this.rebalance();
158
+ return report;
159
+ }
160
+ /** Applies the distribution rules (stable: existing valid assignments are kept). */
161
+ rebalance() {
162
+ const count = (orderId) => this.workersOf(orderId).length;
163
+ const idle = () => this.workerIds.filter((id) => !this.assignments.has(id));
164
+ // 1) every order without a worker gets one: an idle worker, else one moved from the richest order (> 1)
165
+ for (const order of this.orders) {
166
+ if (count(order.orderId) > 0) {
167
+ continue;
168
+ }
169
+ const free = idle()[0];
170
+ if (free) {
171
+ this.assignments.set(free, order.orderId);
172
+ continue;
173
+ }
174
+ const donor = [...this.orders]
175
+ .filter((o) => count(o.orderId) > 1)
176
+ .sort((a, b) => count(b.orderId) - count(a.orderId) || this.orders.indexOf(b) - this.orders.indexOf(a))[0];
177
+ if (donor) {
178
+ const moved = this.workersOf(donor.orderId).slice(-1)[0];
179
+ this.assignments.set(moved, order.orderId);
180
+ }
181
+ }
182
+ // 2) the remaining idle workers go to the least-assigned order (tie → the earliest)
183
+ for (const workerId of idle()) {
184
+ const target = [...this.orders]
185
+ .sort((a, b) => count(a.orderId) - count(b.orderId) || this.orders.indexOf(a) - this.orders.indexOf(b))[0];
186
+ if (!target) {
187
+ return;
188
+ }
189
+ this.assignments.set(workerId, target.orderId);
190
+ }
191
+ }
192
+ static error(code, message) {
193
+ return new error_control_model_1.DyFM_Error({
194
+ message: `DyFM_WorkOrderScheduler: ${message}`,
195
+ errorCode: code,
196
+ issuerService: 'DyFM_WorkOrderScheduler_ControlModel',
197
+ });
198
+ }
199
+ }
200
+ exports.DyFM_WorkOrderScheduler_ControlModel = DyFM_WorkOrderScheduler_ControlModel;
201
+ //# sourceMappingURL=work-order-scheduler.control-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-order-scheduler.control-model.js","sourceRoot":"","sources":["../../../../src/_modules/game/_models/work-order-scheduler.control-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /** BFR-WARFACTORY-012 — `DyFM_WorkOrderScheduler_ControlModel` configuration. */
2
+ export interface DyFM_WorkOrderScheduler_Config {
3
+ /** Work units one worker does per simulation second. Default: `1`. */
4
+ workPerWorkerPerSecond?: number;
5
+ }
6
+ /** One work order (FIFO priority = insertion order). */
7
+ export interface DyFM_WorkOrder_State {
8
+ orderId: string;
9
+ /** Total work units needed. */
10
+ work: number;
11
+ /** Work units done so far. */
12
+ progress: number;
13
+ }
14
+ /** The save/load snapshot (versioned). */
15
+ export interface DyFM_WorkOrderScheduler_State {
16
+ schemaVersion: 1;
17
+ orders: DyFM_WorkOrder_State[];
18
+ workerIds: string[];
19
+ /** workerId → orderId. On import, stale entries are healed (dropped), never trusted. */
20
+ assignments: Record<string, string>;
21
+ }
22
+ /** What `importState` repaired — stale ownership is reported, not silently dropped. */
23
+ export interface DyFM_WorkOrderScheduler_HealReport {
24
+ /** Assignments whose worker no longer exists. */
25
+ droppedUnknownWorkers: string[];
26
+ /** Assignments pointing at an order that no longer exists (or is complete). */
27
+ droppedUnknownOrders: string[];
28
+ /** Duplicate / invalid order or worker entries skipped. */
29
+ skippedDuplicates: string[];
30
+ }
31
+ /** What an `advance` completed. */
32
+ export interface DyFM_WorkOrderScheduler_AdvanceResult {
33
+ /** Orders that reached their work this step (in FIFO order). Their workers were released. */
34
+ completedOrderIds: string[];
35
+ }
36
+ /** What a `cancel` released — atomically, with the progress so the game can refund proportionally. */
37
+ export interface DyFM_WorkOrderScheduler_CancelResult {
38
+ found: boolean;
39
+ releasedWorkerIds: string[];
40
+ /** Progress ratio at cancel time (0..1) — e.g. the base of a refund percentage. */
41
+ progressRatio: number;
42
+ }
43
+ //# sourceMappingURL=work-order-scheduler.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-order-scheduler.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/work-order-scheduler.interface.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,WAAW,8BAA8B;IAC7C,sEAAsE;IACtE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wDAAwD;AACxD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,0CAA0C;AAC1C,MAAM,WAAW,6BAA6B;IAC5C,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,uFAAuF;AACvF,MAAM,WAAW,kCAAkC;IACjD,iDAAiD;IACjD,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,+EAA+E;IAC/E,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,mCAAmC;AACnC,MAAM,WAAW,qCAAqC;IACpD,6FAA6F;IAC7F,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,sGAAsG;AACtG,MAAM,WAAW,oCAAoC;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=work-order-scheduler.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-order-scheduler.interface.js","sourceRoot":"","sources":["../../../../src/_modules/game/_models/work-order-scheduler.interface.ts"],"names":[],"mappings":""}
@@ -12,6 +12,14 @@ export * from './_models/flying-effect.interface';
12
12
  export * from './_models/flying-effect.control-model';
13
13
  export * from './_models/simulation-clock.interface';
14
14
  export * from './_models/simulation-clock.control-model';
15
+ export * from './_models/game-save.interface';
16
+ export * from './_models/work-order-scheduler.interface';
17
+ export * from './_models/work-order-scheduler.control-model';
18
+ export * from './_models/build-reservation.interface';
19
+ export * from './_models/viewport.interface';
20
+ export * from './_models/viewport.control-model';
15
21
  export * from './_collections/audio-mixer.util';
16
22
  export * from './_collections/audio-scale.util';
23
+ export * from './_collections/game-save.util';
24
+ export * from './_collections/build-reservation.util';
17
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/game/index.ts"],"names":[],"mappings":"AACA,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AAGzD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/game/index.ts"],"names":[],"mappings":"AACA,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC"}
@@ -17,7 +17,15 @@ tslib_1.__exportStar(require("./_models/flying-effect.interface"), exports);
17
17
  tslib_1.__exportStar(require("./_models/flying-effect.control-model"), exports);
18
18
  tslib_1.__exportStar(require("./_models/simulation-clock.interface"), exports);
19
19
  tslib_1.__exportStar(require("./_models/simulation-clock.control-model"), exports);
20
+ tslib_1.__exportStar(require("./_models/game-save.interface"), exports);
21
+ tslib_1.__exportStar(require("./_models/work-order-scheduler.interface"), exports);
22
+ tslib_1.__exportStar(require("./_models/work-order-scheduler.control-model"), exports);
23
+ tslib_1.__exportStar(require("./_models/build-reservation.interface"), exports);
24
+ tslib_1.__exportStar(require("./_models/viewport.interface"), exports);
25
+ tslib_1.__exportStar(require("./_models/viewport.control-model"), exports);
20
26
  // COLLECTIONS
21
27
  tslib_1.__exportStar(require("./_collections/audio-mixer.util"), exports);
22
28
  tslib_1.__exportStar(require("./_collections/audio-scale.util"), exports);
29
+ tslib_1.__exportStar(require("./_collections/game-save.util"), exports);
30
+ tslib_1.__exportStar(require("./_collections/build-reservation.util"), exports);
23
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/game/index.ts"],"names":[],"mappings":";;;AAAA,QAAQ;AACR,sEAA4C;AAE5C,SAAS;AACT,iFAAuD;AACvD,mFAAyD;AACzD,gFAAsD;AACtD,8EAAoD;AACpD,0EAAgD;AAChD,kFAAwD;AACxD,gFAAsD;AACtD,qFAA2D;AAC3D,yFAA+D;AAC/D,4EAAkD;AAClD,gFAAsD;AACtD,+EAAqD;AACrD,mFAAyD;AAEzD,cAAc;AACd,0EAAgD;AAChD,0EAAgD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/game/index.ts"],"names":[],"mappings":";;;AAAA,QAAQ;AACR,sEAA4C;AAE5C,SAAS;AACT,iFAAuD;AACvD,mFAAyD;AACzD,gFAAsD;AACtD,8EAAoD;AACpD,0EAAgD;AAChD,kFAAwD;AACxD,gFAAsD;AACtD,qFAA2D;AAC3D,yFAA+D;AAC/D,4EAAkD;AAClD,gFAAsD;AACtD,+EAAqD;AACrD,mFAAyD;AACzD,wEAA8C;AAC9C,mFAAyD;AACzD,uFAA6D;AAC7D,gFAAsD;AACtD,uEAA6C;AAC7C,2EAAiD;AAEjD,cAAc;AACd,0EAAgD;AAChD,0EAAgD;AAChD,wEAA8C;AAC9C,gFAAsD"}