@futdevpro/fsm-dynamo 1.16.29 → 1.16.31

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 (33) hide show
  1. package/build/_modules/game/_collections/audio-mixer.util.d.ts +55 -0
  2. package/build/_modules/game/_collections/audio-mixer.util.d.ts.map +1 -0
  3. package/build/_modules/game/_collections/audio-mixer.util.js +114 -0
  4. package/build/_modules/game/_collections/audio-mixer.util.js.map +1 -0
  5. package/build/_modules/game/_enums/audio-channel.enum.d.ts +17 -0
  6. package/build/_modules/game/_enums/audio-channel.enum.d.ts.map +1 -0
  7. package/build/_modules/game/_enums/audio-channel.enum.js +21 -0
  8. package/build/_modules/game/_enums/audio-channel.enum.js.map +1 -0
  9. package/build/_modules/game/_models/audio-mixer-settings.interface.d.ts +23 -0
  10. package/build/_modules/game/_models/audio-mixer-settings.interface.d.ts.map +1 -0
  11. package/build/_modules/game/_models/audio-mixer-settings.interface.js +3 -0
  12. package/build/_modules/game/_models/audio-mixer-settings.interface.js.map +1 -0
  13. package/build/_modules/game/_models/seeded-random-state.interface.d.ts +17 -0
  14. package/build/_modules/game/_models/seeded-random-state.interface.d.ts.map +1 -0
  15. package/build/_modules/game/_models/seeded-random-state.interface.js +3 -0
  16. package/build/_modules/game/_models/seeded-random-state.interface.js.map +1 -0
  17. package/build/_modules/game/_models/seeded-random.control-model.d.ts +125 -0
  18. package/build/_modules/game/_models/seeded-random.control-model.d.ts.map +1 -0
  19. package/build/_modules/game/_models/seeded-random.control-model.js +263 -0
  20. package/build/_modules/game/_models/seeded-random.control-model.js.map +1 -0
  21. package/build/_modules/game/index.d.ts +6 -0
  22. package/build/_modules/game/index.d.ts.map +1 -0
  23. package/build/_modules/game/index.js +12 -0
  24. package/build/_modules/game/index.js.map +1 -0
  25. package/package.json +12 -3
  26. package/src/_modules/game/_collections/audio-mixer.util.spec.ts +198 -0
  27. package/src/_modules/game/_collections/audio-mixer.util.ts +143 -0
  28. package/src/_modules/game/_enums/audio-channel.enum.ts +18 -0
  29. package/src/_modules/game/_models/audio-mixer-settings.interface.ts +28 -0
  30. package/src/_modules/game/_models/seeded-random-state.interface.ts +21 -0
  31. package/src/_modules/game/_models/seeded-random.control-model.spec.ts +290 -0
  32. package/src/_modules/game/_models/seeded-random.control-model.ts +311 -0
  33. package/src/_modules/game/index.ts +10 -0
@@ -0,0 +1,55 @@
1
+ import { DyFM_AudioChannel } from '../_enums/audio-channel.enum';
2
+ import { DyFM_AudioMixer_Settings } from '../_models/audio-mixer-settings.interface';
3
+ /**
4
+ * Statikus util a jatek-audio mixer beallitasaihoz.
5
+ *
6
+ * Rendereles-agnosztikus es platform-fuggetlen: NINCS benne DOM, Web Audio, Angular vagy Node
7
+ * fuggoseg — a tenyleges lejatszast az `@futdevpro/ngx-dynamo` game-modulja (vagy a projekt sajat
8
+ * motorja) vegzi, ez csak a **modell + szamitas**.
9
+ *
10
+ * **Hasznalat:**
11
+ * ```typescript
12
+ * const settings: DyFM_AudioMixer_Settings = DyFM_AudioMixer_Util.merge(loadedFromSave);
13
+ * const volume: number = DyFM_AudioMixer_Util.getEffectiveVolume(settings, DyFM_AudioChannel.music);
14
+ * audioElement.volume = volume;
15
+ * ```
16
+ */
17
+ export declare class DyFM_AudioMixer_Util {
18
+ /** Alapertelmezett hangero minden csatornara (0..1). */
19
+ private static readonly defaultVolume;
20
+ /**
21
+ * Az alapertelmezett mixer-beallitas. Minden hivas UJ objektumot ad vissza, hogy a
22
+ * hivo szabadon mutalhassa (nincs megosztott referencia).
23
+ */
24
+ static getDefaults(): DyFM_AudioMixer_Settings;
25
+ /**
26
+ * Egy hangero-erteket a 0..1 tartomanyba szorit. A nem-szamokat (NaN, undefined, null,
27
+ * nem-szam tipus) a `fallback`-re cseréli — igy egy serult save-payload sem tud NaN-t
28
+ * juttatni a lejatszoba (a `HTMLAudioElement.volume = NaN` dobna).
29
+ */
30
+ static clamp(value: number, fallback?: number): number;
31
+ /**
32
+ * Reszleges (vagy hianyzo) beallitas-objektumbol teljes, ervenyes settingset allit elo:
33
+ * a hianyzo mezoket a defaultbol veszi, a meglevoket 0..1-re szoritja.
34
+ *
35
+ * **Ez a migracios biztositek:** egy regi save-payload, ami meg nem ismerte az `ambience`
36
+ * csatornat, igy is betoltheto marad.
37
+ */
38
+ static merge(partial?: Partial<DyFM_AudioMixer_Settings> | null): DyFM_AudioMixer_Settings;
39
+ /**
40
+ * Egy csatorna EFFEKTIV hangereje: a csatorna sajat erteke szorozva a master-rel.
41
+ * Nemitas (`muted`) eseten mindig 0. A `master` csatornara a sajat erteket adja vissza
42
+ * (nem negyzetre emelve).
43
+ */
44
+ static getEffectiveVolume(settings: DyFM_AudioMixer_Settings, channel: DyFM_AudioChannel): number;
45
+ /**
46
+ * Egy csatorna hangerejenek beallitasa — UJ settings-objektumot ad vissza (immutable update),
47
+ * hogy signal-/state-alapu tarolokban is biztonsagos legyen.
48
+ */
49
+ static withChannelVolume(settings: DyFM_AudioMixer_Settings, channel: DyFM_AudioChannel, volume: number): DyFM_AudioMixer_Settings;
50
+ /** Nemitas beallitasa — UJ settings-objektumot ad vissza (immutable update). */
51
+ static withMuted(settings: DyFM_AudioMixer_Settings, muted: boolean): DyFM_AudioMixer_Settings;
52
+ /** Ket beallitas ertek szerinti egyezese (mentes-szukseg / change-detection dontesehez). */
53
+ static isEqual(a: DyFM_AudioMixer_Settings, b: DyFM_AudioMixer_Settings): boolean;
54
+ }
55
+ //# sourceMappingURL=audio-mixer.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_collections/audio-mixer.util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAGrF;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAoB;IAE/B,wDAAwD;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAe;IAEpD;;;OAGG;IACH,MAAM,CAAC,WAAW,IAAI,wBAAwB;IAU9C;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA2C,GAAG,MAAM;IAgB1F;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,IAAI,GAAG,wBAAwB;IAgB1F;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,CACvB,QAAQ,EAAE,wBAAwB,EAClC,OAAO,EAAE,iBAAiB,GACzB,MAAM;IAcT;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CACtB,QAAQ,EAAE,wBAAwB,EAClC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,GACb,wBAAwB;IAO3B,gFAAgF;IAChF,MAAM,CAAC,SAAS,CACd,QAAQ,EAAE,wBAAwB,EAClC,KAAK,EAAE,OAAO,GACb,wBAAwB;IAO3B,4FAA4F;IAC5F,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,wBAAwB,EAAE,CAAC,EAAE,wBAAwB,GAAG,OAAO;CAUlF"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_AudioMixer_Util = void 0;
4
+ const audio_channel_enum_1 = require("../_enums/audio-channel.enum");
5
+ /**
6
+ * Statikus util a jatek-audio mixer beallitasaihoz.
7
+ *
8
+ * Rendereles-agnosztikus es platform-fuggetlen: NINCS benne DOM, Web Audio, Angular vagy Node
9
+ * fuggoseg — a tenyleges lejatszast az `@futdevpro/ngx-dynamo` game-modulja (vagy a projekt sajat
10
+ * motorja) vegzi, ez csak a **modell + szamitas**.
11
+ *
12
+ * **Hasznalat:**
13
+ * ```typescript
14
+ * const settings: DyFM_AudioMixer_Settings = DyFM_AudioMixer_Util.merge(loadedFromSave);
15
+ * const volume: number = DyFM_AudioMixer_Util.getEffectiveVolume(settings, DyFM_AudioChannel.music);
16
+ * audioElement.volume = volume;
17
+ * ```
18
+ */
19
+ class DyFM_AudioMixer_Util {
20
+ /** Alapertelmezett hangero minden csatornara (0..1). */
21
+ static defaultVolume = 0.8;
22
+ /**
23
+ * Az alapertelmezett mixer-beallitas. Minden hivas UJ objektumot ad vissza, hogy a
24
+ * hivo szabadon mutalhassa (nincs megosztott referencia).
25
+ */
26
+ static getDefaults() {
27
+ return {
28
+ master: this.defaultVolume,
29
+ music: this.defaultVolume,
30
+ ambience: this.defaultVolume,
31
+ effects: this.defaultVolume,
32
+ muted: false,
33
+ };
34
+ }
35
+ /**
36
+ * Egy hangero-erteket a 0..1 tartomanyba szorit. A nem-szamokat (NaN, undefined, null,
37
+ * nem-szam tipus) a `fallback`-re cseréli — igy egy serult save-payload sem tud NaN-t
38
+ * juttatni a lejatszoba (a `HTMLAudioElement.volume = NaN` dobna).
39
+ */
40
+ static clamp(value, fallback = DyFM_AudioMixer_Util.defaultVolume) {
41
+ if (typeof value !== 'number' || Number.isNaN(value)) {
42
+ return fallback;
43
+ }
44
+ if (value < 0) {
45
+ return 0;
46
+ }
47
+ if (1 < value) {
48
+ return 1;
49
+ }
50
+ return value;
51
+ }
52
+ /**
53
+ * Reszleges (vagy hianyzo) beallitas-objektumbol teljes, ervenyes settingset allit elo:
54
+ * a hianyzo mezoket a defaultbol veszi, a meglevoket 0..1-re szoritja.
55
+ *
56
+ * **Ez a migracios biztositek:** egy regi save-payload, ami meg nem ismerte az `ambience`
57
+ * csatornat, igy is betoltheto marad.
58
+ */
59
+ static merge(partial) {
60
+ const defaults = this.getDefaults();
61
+ if (!partial) {
62
+ return defaults;
63
+ }
64
+ return {
65
+ master: this.clamp(partial.master ?? defaults.master, defaults.master),
66
+ music: this.clamp(partial.music ?? defaults.music, defaults.music),
67
+ ambience: this.clamp(partial.ambience ?? defaults.ambience, defaults.ambience),
68
+ effects: this.clamp(partial.effects ?? defaults.effects, defaults.effects),
69
+ muted: partial.muted === true,
70
+ };
71
+ }
72
+ /**
73
+ * Egy csatorna EFFEKTIV hangereje: a csatorna sajat erteke szorozva a master-rel.
74
+ * Nemitas (`muted`) eseten mindig 0. A `master` csatornara a sajat erteket adja vissza
75
+ * (nem negyzetre emelve).
76
+ */
77
+ static getEffectiveVolume(settings, channel) {
78
+ const safe = this.merge(settings);
79
+ if (safe.muted) {
80
+ return 0;
81
+ }
82
+ if (channel === audio_channel_enum_1.DyFM_AudioChannel.master) {
83
+ return safe.master;
84
+ }
85
+ return this.clamp(safe[channel] * safe.master);
86
+ }
87
+ /**
88
+ * Egy csatorna hangerejenek beallitasa — UJ settings-objektumot ad vissza (immutable update),
89
+ * hogy signal-/state-alapu tarolokban is biztonsagos legyen.
90
+ */
91
+ static withChannelVolume(settings, channel, volume) {
92
+ const next = this.merge(settings);
93
+ next[channel] = this.clamp(volume);
94
+ return next;
95
+ }
96
+ /** Nemitas beallitasa — UJ settings-objektumot ad vissza (immutable update). */
97
+ static withMuted(settings, muted) {
98
+ const next = this.merge(settings);
99
+ next.muted = muted === true;
100
+ return next;
101
+ }
102
+ /** Ket beallitas ertek szerinti egyezese (mentes-szukseg / change-detection dontesehez). */
103
+ static isEqual(a, b) {
104
+ const left = this.merge(a);
105
+ const right = this.merge(b);
106
+ return left.master === right.master
107
+ && left.music === right.music
108
+ && left.ambience === right.ambience
109
+ && left.effects === right.effects
110
+ && left.muted === right.muted;
111
+ }
112
+ }
113
+ exports.DyFM_AudioMixer_Util = DyFM_AudioMixer_Util;
114
+ //# sourceMappingURL=audio-mixer.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer.util.js","sourceRoot":"","sources":["../../../../src/_modules/game/_collections/audio-mixer.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * A jatek-audio mixer csatornai.
3
+ *
4
+ * A flotta NEGY jateka egymastol fuggetlenul ugyanezt a negy csatornat vezette be
5
+ * (Prototyper: Room Cats / Cell Stage / Portalhold, plusz a Hero Coordinator) — ez az
6
+ * enum a kanonikus nevezektan, amire mindegyik ratert.
7
+ *
8
+ * A `master` NEM onallo hangsav: minden csatorna effektiv hangereje a sajat erteke
9
+ * SZOROZVA a master-rel (lasd `DyFM_AudioMixer_Util.getEffectiveVolume`).
10
+ */
11
+ export declare enum DyFM_AudioChannel {
12
+ master = "master",
13
+ music = "music",
14
+ ambience = "ambience",
15
+ effects = "effects"
16
+ }
17
+ //# sourceMappingURL=audio-channel.enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-channel.enum.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_enums/audio-channel.enum.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_AudioChannel = void 0;
4
+ /**
5
+ * A jatek-audio mixer csatornai.
6
+ *
7
+ * A flotta NEGY jateka egymastol fuggetlenul ugyanezt a negy csatornat vezette be
8
+ * (Prototyper: Room Cats / Cell Stage / Portalhold, plusz a Hero Coordinator) — ez az
9
+ * enum a kanonikus nevezektan, amire mindegyik ratert.
10
+ *
11
+ * A `master` NEM onallo hangsav: minden csatorna effektiv hangereje a sajat erteke
12
+ * SZOROZVA a master-rel (lasd `DyFM_AudioMixer_Util.getEffectiveVolume`).
13
+ */
14
+ var DyFM_AudioChannel;
15
+ (function (DyFM_AudioChannel) {
16
+ DyFM_AudioChannel["master"] = "master";
17
+ DyFM_AudioChannel["music"] = "music";
18
+ DyFM_AudioChannel["ambience"] = "ambience";
19
+ DyFM_AudioChannel["effects"] = "effects";
20
+ })(DyFM_AudioChannel || (exports.DyFM_AudioChannel = DyFM_AudioChannel = {}));
21
+ //# sourceMappingURL=audio-channel.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-channel.enum.js","sourceRoot":"","sources":["../../../../src/_modules/game/_enums/audio-channel.enum.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;GASG;AACH,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,sCAAiB,CAAA;IACjB,oCAAe,CAAA;IACf,0CAAqB,CAAA;IACrB,wCAAmB,CAAA;AACrB,CAAC,EALW,iBAAiB,iCAAjB,iBAAiB,QAK5B"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * A jatek-audio mixer beallitasai — csatornankent 0..1 hangero + globalis nemitas.
3
+ *
4
+ * **Miert bedrock:** ez az interfesz a flottaban NEGY helyen elt egymastol fuggetlenul,
5
+ * karakterre azonos alakban (`pcr-audio-settings.interface.ts`, `pcs-audio-settings.interface.ts`,
6
+ * `pg-audio-settings.interface.ts` + a Hero Coordinator sajat audio-service-e). Ez a kanonikus alak.
7
+ *
8
+ * **Mentheto:** tisztan JSON-serializalhato, tehat a jatek save-payload resze lehet.
9
+ * Reszleges/legacy payload-bol a `DyFM_AudioMixer_Util.merge()` allit elo teljes settingset.
10
+ */
11
+ export interface DyFM_AudioMixer_Settings {
12
+ /** Fo-hangero (0..1) — minden csatornara szorzodik. */
13
+ master: number;
14
+ /** Zene-csatorna hangereje (0..1). */
15
+ music: number;
16
+ /** Kornyezeti hangok (ambience) csatorna hangereje (0..1). */
17
+ ambience: number;
18
+ /** Effekt-hangok csatorna hangereje (0..1). */
19
+ effects: number;
20
+ /** Globalis nemitas — ha true, minden effektiv hangero 0. */
21
+ muted: boolean;
22
+ }
23
+ //# sourceMappingURL=audio-mixer-settings.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer-settings.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/audio-mixer-settings.interface.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,WAAW,wBAAwB;IACvC,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IAEf,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IAEd,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IAEjB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAEhB,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;CAChB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=audio-mixer-settings.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer-settings.interface.js","sourceRoot":"","sources":["../../../../src/_modules/game/_models/audio-mixer-settings.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * A `DyFM_SeededRandom` teljes belso allapota — 4 db 32-bites egesz (sfc32).
3
+ *
4
+ * Tisztan JSON-serializalhato, tehat **a jatek save-payload resze lehet**: a mentes utan
5
+ * visszatoltve a veletlen-sorozat PONTOSAN ott folytatodik, ahol abbamaradt.
6
+ */
7
+ export interface DyFM_SeededRandom_State {
8
+ /** sfc32 allapot-szo #1. */
9
+ a: number;
10
+ /** sfc32 allapot-szo #2. */
11
+ b: number;
12
+ /** sfc32 allapot-szo #3. */
13
+ c: number;
14
+ /** sfc32 counter-szo. */
15
+ d: number;
16
+ }
17
+ //# sourceMappingURL=seeded-random-state.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeded-random-state.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/seeded-random-state.interface.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IAEV,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IAEV,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IAEV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;CACX"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=seeded-random-state.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeded-random-state.interface.js","sourceRoot":"","sources":["../../../../src/_modules/game/_models/seeded-random-state.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ import { DyFM_RandomWeight } from '../../../_models/interfaces/random-weight.interface';
2
+ import { DyFM_SeededRandom_State } from './seeded-random-state.interface';
3
+ /**
4
+ * Determinisztikus, **seed-elt** veletlenszam-generator mentheto allapottal.
5
+ *
6
+ * **Miert letezik:** a `DyFM_Random` `Math.random()`-ra epul — gyors es kenyelmes, de
7
+ * NEM reprodukalhato es nincs allapota. A flotta harom jateka ezert epitett maganak sajat
8
+ * PRNG-t (`sm-random.service.ts`, `random-seed.service.ts`, Portalhold `worldSeed`).
9
+ * Ez az osztaly az egysegesitett valtozat.
10
+ *
11
+ * **Algoritmus:** sfc32 (Small Fast Counting) — 128 bites allapot (4x32 bit), kivalo
12
+ * statisztikai minoseg, gyors, es az allapota trivialisan serializalhato. A string-seedet
13
+ * cyrb128 hash-eli 4x32 bitre, tehat `'my-world-seed'` es `42` egyarant ervenyes seed.
14
+ *
15
+ * **Mire jo (a jatekon tul):**
16
+ * - reprodukalhato vilag-generalas es mentheto RNG-allapot,
17
+ * - **determinisztikus e2e/QA** — ugyanaz a seed ugyanazt a jatekmenetet adja,
18
+ * - perf-osszemeres azonos bemeneten,
19
+ * - mock-adat es teszt-fixture stabil generalasa.
20
+ *
21
+ * **Hasznalat:**
22
+ * ```typescript
23
+ * const rng = DyFM_SeededRandom.fromSeed('world-42');
24
+ * const damage: number = rng.nextInt(5, 15);
25
+ * const loot = rng.getRandomWeighted([
26
+ * { chance: 0.7, result: 'common' },
27
+ * { chance: 0.3, result: 'rare' },
28
+ * ]);
29
+ *
30
+ * // mentes
31
+ * save.rngState = rng.getState();
32
+ *
33
+ * // betoltes — a sorozat ott folytatodik, ahol abbamaradt
34
+ * const restored = DyFM_SeededRandom.fromState(save.rngState);
35
+ * ```
36
+ *
37
+ * **Fontos:** ket kulon instance NEM befolyasolja egymast; ha determinisztikus alrendszereket
38
+ * akarsz (pl. vilag-generalas kulon a harci dobasoktol), adj mindegyiknek sajat instance-ot.
39
+ */
40
+ export declare class DyFM_SeededRandom {
41
+ /** 2^32 — a 32 bites egeszek normalizalasahoz. */
42
+ private static readonly uint32Range;
43
+ /** sfc32 allapot-szo #1. */
44
+ private a;
45
+ /** sfc32 allapot-szo #2. */
46
+ private b;
47
+ /** sfc32 allapot-szo #3. */
48
+ private c;
49
+ /** sfc32 counter-szo. */
50
+ private d;
51
+ /**
52
+ * Kozvetlen allapotbol epit. A tipikus belepesi pont a `fromSeed()` / `fromState()`
53
+ * statikus factory.
54
+ */
55
+ constructor(state: DyFM_SeededRandom_State);
56
+ /**
57
+ * Generator letrehozasa seed-bol. A seed lehet string (pl. mentett `worldSeed`) vagy szam.
58
+ * Ugyanaz a seed MINDIG ugyanazt a sorozatot adja.
59
+ */
60
+ static fromSeed(seed: string | number): DyFM_SeededRandom;
61
+ /** Generator letrehozasa korabban elmentett allapotbol (save-betoltes). */
62
+ static fromState(state: DyFM_SeededRandom_State): DyFM_SeededRandom;
63
+ /**
64
+ * String seed -> 4x32 bites allapot (cyrb128). Determinisztikus es jol szoro:
65
+ * a `'a'` es `'b'` seed teljesen kulonbozo sorozatot ad.
66
+ */
67
+ private static hashSeed;
68
+ /** A generator teljes allapotanak masolata — ezt kell a save-payloadba tenni. */
69
+ getState(): DyFM_SeededRandom_State;
70
+ /** Allapot visszatoltese — a sorozat innentol az elmentett ponton folytatodik. */
71
+ setState(state: DyFM_SeededRandom_State): void;
72
+ /**
73
+ * Fuggetlen masolat az AKTUALIS allapotrol — a klon ugyanazt a sorozatot folytatja,
74
+ * de a ket instance tovabbiakban nem befolyasolja egymast.
75
+ *
76
+ * Tipikus hasznalat: „mi lenne, ha" elore-szimulacio a fo-jatekmenet elrontasa nelkul.
77
+ */
78
+ clone(): DyFM_SeededRandom;
79
+ /**
80
+ * A kovetkezo veletlen lebegopontos szam a `[0, 1)` tartomanybol (sfc32 mag).
81
+ * Minden mas metodus erre epul.
82
+ */
83
+ nextFloat(): number;
84
+ /**
85
+ * Veletlen egesz a `[min, max]` tartomanybol (mindket veg ZART) — a `DyFM_Random.getRandomInt`
86
+ * seedelt parja. Ha `max < min`, a ket erteket felcsereli.
87
+ */
88
+ nextInt(min: number, max: number): number;
89
+ /** A `DyFM_Random.getRandomInt` API-paritas alias — l. `nextInt`. */
90
+ getRandomInt(min: number, max: number): number;
91
+ /** Veletlen lebegopontos szam a `[min, max)` tartomanybol. */
92
+ nextRange(min: number, max: number): number;
93
+ /**
94
+ * Veletlen logikai ertek. A `chance` a `true` valoszinusege (0..1; default 0.5).
95
+ */
96
+ nextBool(chance?: number): boolean;
97
+ /**
98
+ * Veletlen elem a listabol (`null`, ha a lista ures) — a `DyFM_Random.getRandomListElement`
99
+ * seedelt parja.
100
+ */
101
+ getRandomListElement<T>(list: T[]): T | null;
102
+ /**
103
+ * Sulyozott veletlen elem (`null`, ha a lista ures) — a `DyFM_Random.getRandomWeighted`
104
+ * seedelt parja.
105
+ *
106
+ * **Elteres a `DyFM_Random`-tol:** ez a valtozat NEM mutalja a bemeneti tombot
107
+ * (a statikus verzio helyben rendez es atirja a `chance` ertekeket).
108
+ */
109
+ getRandomWeighted<T>(weights: DyFM_RandomWeight<T>[]): T | null;
110
+ /**
111
+ * Sulyozott veletlen egesz — a `DyFM_Random.getRandomWeightedInt` seedelt parja.
112
+ * Ha a sulyozas nem ad talalatot, `nextInt(min, max)`-ra esik vissza.
113
+ */
114
+ getRandomWeightedInt(min: number, max: number, weights: DyFM_RandomWeight<number>[]): number;
115
+ /**
116
+ * Fisher-Yates keveres — UJ tombot ad vissza, a bemenetet nem mutalja.
117
+ */
118
+ shuffle<T>(list: T[]): T[];
119
+ /**
120
+ * `count` darab KULONBOZO elem kivalasztasa a listabol (sorrendje veletlen).
121
+ * Ha `count` nagyobb a lista hosszanal, a teljes (megkevert) listat adja vissza.
122
+ */
123
+ pick<T>(list: T[], count: number): T[];
124
+ }
125
+ //# sourceMappingURL=seeded-random.control-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeded-random.control-model.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/seeded-random.control-model.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AAExF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAG1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,iBAAiB;IAE5B,kDAAkD;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAEzD,4BAA4B;IAC5B,OAAO,CAAC,CAAC,CAAS;IAElB,4BAA4B;IAC5B,OAAO,CAAC,CAAC,CAAS;IAElB,4BAA4B;IAC5B,OAAO,CAAC,CAAC,CAAS;IAElB,yBAAyB;IACzB,OAAO,CAAC,CAAC,CAAS;IAElB;;;OAGG;gBACS,KAAK,EAAE,uBAAuB;IAgB1C;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB;IAYzD,2EAA2E;IAC3E,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,uBAAuB,GAAG,iBAAiB;IAInE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IA4BvB,iFAAiF;IACjF,QAAQ,IAAI,uBAAuB;IAInC,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAgB9C;;;;;OAKG;IACH,KAAK,IAAI,iBAAiB;IAI1B;;;OAGG;IACH,SAAS,IAAI,MAAM;IAiBnB;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAOzC,qEAAqE;IACrE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9C,8DAA8D;IAC9D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAO3C;;OAEG;IACH,QAAQ,CAAC,MAAM,GAAE,MAAY,GAAG,OAAO;IAIvC;;;OAGG;IACH,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI;IAQ5C;;;;;;OAMG;IACH,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI;IA2B/D;;;OAGG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM;IAU5F;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAiB1B;;;OAGG;IACH,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;CAOvC"}