@futdevpro/fsm-dynamo 1.16.31 → 1.16.33

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 (38) hide show
  1. package/build/_modules/game/_collections/audio-scale.util.d.ts +57 -0
  2. package/build/_modules/game/_collections/audio-scale.util.d.ts.map +1 -0
  3. package/build/_modules/game/_collections/audio-scale.util.js +105 -0
  4. package/build/_modules/game/_collections/audio-scale.util.js.map +1 -0
  5. package/build/_modules/game/_enums/audio-channel.enum.d.ts +8 -4
  6. package/build/_modules/game/_enums/audio-channel.enum.d.ts.map +1 -1
  7. package/build/_modules/game/_enums/audio-channel.enum.js +8 -4
  8. package/build/_modules/game/_enums/audio-channel.enum.js.map +1 -1
  9. package/build/_modules/game/_models/audio-mixer-config.interface.d.ts +37 -0
  10. package/build/_modules/game/_models/audio-mixer-config.interface.d.ts.map +1 -0
  11. package/build/_modules/game/_models/audio-mixer-config.interface.js +3 -0
  12. package/build/_modules/game/_models/audio-mixer-config.interface.js.map +1 -0
  13. package/build/_modules/game/_models/audio-mixer-state.interface.d.ts +19 -0
  14. package/build/_modules/game/_models/audio-mixer-state.interface.d.ts.map +1 -0
  15. package/build/_modules/game/_models/audio-mixer-state.interface.js +3 -0
  16. package/build/_modules/game/_models/audio-mixer-state.interface.js.map +1 -0
  17. package/build/_modules/game/_models/audio-mixer.control-model.d.ts +123 -0
  18. package/build/_modules/game/_models/audio-mixer.control-model.d.ts.map +1 -0
  19. package/build/_modules/game/_models/audio-mixer.control-model.js +312 -0
  20. package/build/_modules/game/_models/audio-mixer.control-model.js.map +1 -0
  21. package/build/_modules/game/_models/audio-scale.interface.d.ts +18 -0
  22. package/build/_modules/game/_models/audio-scale.interface.d.ts.map +1 -0
  23. package/build/_modules/game/_models/audio-scale.interface.js +3 -0
  24. package/build/_modules/game/_models/audio-scale.interface.js.map +1 -0
  25. package/build/_modules/game/index.d.ts +5 -0
  26. package/build/_modules/game/index.d.ts.map +1 -1
  27. package/build/_modules/game/index.js +5 -0
  28. package/build/_modules/game/index.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/_modules/game/_collections/audio-scale.util.spec.ts +140 -0
  31. package/src/_modules/game/_collections/audio-scale.util.ts +129 -0
  32. package/src/_modules/game/_enums/audio-channel.enum.ts +8 -4
  33. package/src/_modules/game/_models/audio-mixer-config.interface.ts +45 -0
  34. package/src/_modules/game/_models/audio-mixer-state.interface.ts +23 -0
  35. package/src/_modules/game/_models/audio-mixer.control-model.spec.ts +306 -0
  36. package/src/_modules/game/_models/audio-mixer.control-model.ts +378 -0
  37. package/src/_modules/game/_models/audio-scale.interface.ts +21 -0
  38. package/src/_modules/game/index.ts +5 -0
@@ -0,0 +1,57 @@
1
+ import { DyFM_AudioScale } from '../_models/audio-scale.interface';
2
+ /**
3
+ * Skala-konverziok az audio-mixerhez: a projekt sajat szamabrazolasa (pl. `0-100` egesz)
4
+ * es a lejatszo API-k altal vart `0..1` kozott.
5
+ *
6
+ * **Miert statikus util:** nincs allapota — tiszta fuggvenyek, a `DyFM_Math` mintajara.
7
+ *
8
+ * **Hasznalat:**
9
+ * ```typescript
10
+ * const percent = DyFM_AudioScale_Util.getPercentScale();
11
+ * DyFM_AudioScale_Util.toUnit(72, percent); // 0.72 -> ezt varja a HTMLAudio / GainNode
12
+ * DyFM_AudioScale_Util.fromUnit(0.725, percent); // 73 -> ezt tarolja / mutatja a projekt
13
+ * ```
14
+ */
15
+ export declare class DyFM_AudioScale_Util {
16
+ /** Alapertelmezett hangero-arany (a skala maximumanak hanyada), ha nincs jobb ertek. */
17
+ static readonly defaultRatio: number;
18
+ /**
19
+ * A `0..1` lebegopontos skala — a Prototyper prototipusai (es a round-1
20
+ * `DyFM_AudioMixer_Settings`) ezt hasznaljak. Minden hivas UJ objektumot ad vissza, hogy a
21
+ * hivo szabadon mutalhassa.
22
+ */
23
+ static getUnitScale(): DyFM_AudioScale;
24
+ /**
25
+ * A `0-100` egesz skala — a Hero Coordinator ezt tarolja a localStorage-ban
26
+ * (`clampVolume` = `Math.round`). Minden hivas UJ objektumot ad vissza.
27
+ */
28
+ static getPercentScale(): DyFM_AudioScale;
29
+ /**
30
+ * Sajat skalan levo erteket `0..1`-re normalizal, es a tartomanyba szorit.
31
+ * Ervenytelen bemenet (NaN, nem-szam, null/undefined) eseten a `fallbackUnit`-ot adja —
32
+ * igy egy serult save-payload sem tud NaN-t juttatni a lejatszoba
33
+ * (`HTMLAudioElement.volume = NaN` dobna, a `GainNode.gain.value = NaN` elnemitana).
34
+ */
35
+ static toUnit(value: number, scale: DyFM_AudioScale, fallbackUnit?: number): number;
36
+ /**
37
+ * `0..1` erteket a sajat skalara alakit vissza. Egesz skalanal (`integer: true`) kerekit,
38
+ * igy a `0-100`-as UI-nak nem kell tortszamokkal dolgoznia.
39
+ */
40
+ static fromUnit(unit: number, scale: DyFM_AudioScale): number;
41
+ /**
42
+ * Egy erteket a sajat skala `0..max` tartomanyaba szorit (egesz skalanal kerekit is).
43
+ *
44
+ * Ervenytelen bemenetre (NaN, nem-szam) a `fallbackScaleValue`-t adja — **a sajat skalan**.
45
+ * Alapertelmezesben `0`; a mixer viszont a csatorna DEFAULT-jat adja at, mert egy serult
46
+ * mentesbol jobb a hallhato alapertek, mint a nema 0 (a felhasznalo eszre sem venne).
47
+ */
48
+ static clampToScale(value: number, scale: DyFM_AudioScale, fallbackScaleValue?: number): number;
49
+ /** Egy `0..1` erteket a tartomanyba szorit. */
50
+ static clampUnit(value: number): number;
51
+ /**
52
+ * A skala maximuma vedve: a hianyzo / nem-pozitiv / NaN maximumot `1`-re cseréli, hogy a
53
+ * nullaval valo osztas es a NaN-terjedes kizart legyen.
54
+ */
55
+ private static getSafeMax;
56
+ }
57
+ //# sourceMappingURL=audio-scale.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-scale.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_collections/audio-scale.util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE;;;;;;;;;;;;GAYG;AACH,qBAAa,oBAAoB;IAE/B,wFAAwF;IACxF,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAO;IAE3C;;;;OAIG;IACH,MAAM,CAAC,YAAY,IAAI,eAAe;IAOtC;;;OAGG;IACH,MAAM,CAAC,eAAe,IAAI,eAAe;IAOzC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,YAAY,GAAE,MAA0C,GACvD,MAAM;IAUT;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM;IAU7D;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,kBAAkB,GAAE,MAAU,GAC7B,MAAM;IAaT,+CAA+C;IAC/C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAYvC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;CAO1B"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_AudioScale_Util = void 0;
4
+ /**
5
+ * Skala-konverziok az audio-mixerhez: a projekt sajat szamabrazolasa (pl. `0-100` egesz)
6
+ * es a lejatszo API-k altal vart `0..1` kozott.
7
+ *
8
+ * **Miert statikus util:** nincs allapota — tiszta fuggvenyek, a `DyFM_Math` mintajara.
9
+ *
10
+ * **Hasznalat:**
11
+ * ```typescript
12
+ * const percent = DyFM_AudioScale_Util.getPercentScale();
13
+ * DyFM_AudioScale_Util.toUnit(72, percent); // 0.72 -> ezt varja a HTMLAudio / GainNode
14
+ * DyFM_AudioScale_Util.fromUnit(0.725, percent); // 73 -> ezt tarolja / mutatja a projekt
15
+ * ```
16
+ */
17
+ class DyFM_AudioScale_Util {
18
+ /** Alapertelmezett hangero-arany (a skala maximumanak hanyada), ha nincs jobb ertek. */
19
+ static defaultRatio = 0.8;
20
+ /**
21
+ * A `0..1` lebegopontos skala — a Prototyper prototipusai (es a round-1
22
+ * `DyFM_AudioMixer_Settings`) ezt hasznaljak. Minden hivas UJ objektumot ad vissza, hogy a
23
+ * hivo szabadon mutalhassa.
24
+ */
25
+ static getUnitScale() {
26
+ return {
27
+ max: 1,
28
+ integer: false,
29
+ };
30
+ }
31
+ /**
32
+ * A `0-100` egesz skala — a Hero Coordinator ezt tarolja a localStorage-ban
33
+ * (`clampVolume` = `Math.round`). Minden hivas UJ objektumot ad vissza.
34
+ */
35
+ static getPercentScale() {
36
+ return {
37
+ max: 100,
38
+ integer: true,
39
+ };
40
+ }
41
+ /**
42
+ * Sajat skalan levo erteket `0..1`-re normalizal, es a tartomanyba szorit.
43
+ * Ervenytelen bemenet (NaN, nem-szam, null/undefined) eseten a `fallbackUnit`-ot adja —
44
+ * igy egy serult save-payload sem tud NaN-t juttatni a lejatszoba
45
+ * (`HTMLAudioElement.volume = NaN` dobna, a `GainNode.gain.value = NaN` elnemitana).
46
+ */
47
+ static toUnit(value, scale, fallbackUnit = DyFM_AudioScale_Util.defaultRatio) {
48
+ const max = this.getSafeMax(scale);
49
+ if (typeof value !== 'number' || Number.isNaN(value)) {
50
+ return this.clampUnit(fallbackUnit);
51
+ }
52
+ return this.clampUnit(value / max);
53
+ }
54
+ /**
55
+ * `0..1` erteket a sajat skalara alakit vissza. Egesz skalanal (`integer: true`) kerekit,
56
+ * igy a `0-100`-as UI-nak nem kell tortszamokkal dolgoznia.
57
+ */
58
+ static fromUnit(unit, scale) {
59
+ const max = this.getSafeMax(scale);
60
+ const safeUnit = typeof unit !== 'number' || Number.isNaN(unit)
61
+ ? 0
62
+ : this.clampUnit(unit);
63
+ const scaled = safeUnit * max;
64
+ return scale && scale.integer === true ? Math.round(scaled) : scaled;
65
+ }
66
+ /**
67
+ * Egy erteket a sajat skala `0..max` tartomanyaba szorit (egesz skalanal kerekit is).
68
+ *
69
+ * Ervenytelen bemenetre (NaN, nem-szam) a `fallbackScaleValue`-t adja — **a sajat skalan**.
70
+ * Alapertelmezesben `0`; a mixer viszont a csatorna DEFAULT-jat adja at, mert egy serult
71
+ * mentesbol jobb a hallhato alapertek, mint a nema 0 (a felhasznalo eszre sem venne).
72
+ */
73
+ static clampToScale(value, scale, fallbackScaleValue = 0) {
74
+ if (typeof value !== 'number' || Number.isNaN(value)) {
75
+ const safeFallback = typeof fallbackScaleValue === 'number'
76
+ && !Number.isNaN(fallbackScaleValue)
77
+ ? fallbackScaleValue
78
+ : 0;
79
+ return this.fromUnit(this.toUnit(safeFallback, scale, 0), scale);
80
+ }
81
+ return this.fromUnit(this.toUnit(value, scale, 0), scale);
82
+ }
83
+ /** Egy `0..1` erteket a tartomanyba szorit. */
84
+ static clampUnit(value) {
85
+ if (typeof value !== 'number' || Number.isNaN(value)) {
86
+ return 0;
87
+ }
88
+ if (value < 0) {
89
+ return 0;
90
+ }
91
+ return 1 < value ? 1 : value;
92
+ }
93
+ /**
94
+ * A skala maximuma vedve: a hianyzo / nem-pozitiv / NaN maximumot `1`-re cseréli, hogy a
95
+ * nullaval valo osztas es a NaN-terjedes kizart legyen.
96
+ */
97
+ static getSafeMax(scale) {
98
+ if (!scale || typeof scale.max !== 'number' || Number.isNaN(scale.max) || scale.max <= 0) {
99
+ return 1;
100
+ }
101
+ return scale.max;
102
+ }
103
+ }
104
+ exports.DyFM_AudioScale_Util = DyFM_AudioScale_Util;
105
+ //# sourceMappingURL=audio-scale.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-scale.util.js","sourceRoot":"","sources":["../../../../src/_modules/game/_collections/audio-scale.util.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,13 @@
1
1
  /**
2
- * A jatek-audio mixer csatornai.
2
+ * A jatek-audio mixer **klasszikus** csatorna-keszlete.
3
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.
4
+ * A Prototyper HAROM prototipusa (Room Cats / Cell Stage / Portalhold) egymastol fuggetlenul
5
+ * ugyanezt a negy csatornat vezette be ez az enum az o kanonikus nevezektanuk.
6
+ *
7
+ * **FIGYELEM (2026-08-06 helyesbites):** ez NEM flotta-univerzalis. A **Hero Coordinator**
8
+ * csatornai `master` / `music` / **`dialog`** / **`interface`**, es `0-100` egeszet tarol.
9
+ * Ha a projekted csatorna-keszlete elter, NE ezt az enumot hasznald, hanem a
10
+ * `DyFM_AudioMixer_ControlModel`-t sajat config-gal (csatorna- es skala-agnosztikus).
7
11
  *
8
12
  * A `master` NEM onallo hangsav: minden csatorna effektiv hangereje a sajat erteke
9
13
  * SZOROZVA a master-rel (lasd `DyFM_AudioMixer_Util.getEffectiveVolume`).
@@ -1 +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"}
1
+ {"version":3,"file":"audio-channel.enum.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_enums/audio-channel.enum.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB"}
@@ -2,11 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DyFM_AudioChannel = void 0;
4
4
  /**
5
- * A jatek-audio mixer csatornai.
5
+ * A jatek-audio mixer **klasszikus** csatorna-keszlete.
6
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.
7
+ * A Prototyper HAROM prototipusa (Room Cats / Cell Stage / Portalhold) egymastol fuggetlenul
8
+ * ugyanezt a negy csatornat vezette be ez az enum az o kanonikus nevezektanuk.
9
+ *
10
+ * **FIGYELEM (2026-08-06 helyesbites):** ez NEM flotta-univerzalis. A **Hero Coordinator**
11
+ * csatornai `master` / `music` / **`dialog`** / **`interface`**, es `0-100` egeszet tarol.
12
+ * Ha a projekted csatorna-keszlete elter, NE ezt az enumot hasznald, hanem a
13
+ * `DyFM_AudioMixer_ControlModel`-t sajat config-gal (csatorna- es skala-agnosztikus).
10
14
  *
11
15
  * A `master` NEM onallo hangsav: minden csatorna effektiv hangereje a sajat erteke
12
16
  * SZOROZVA a master-rel (lasd `DyFM_AudioMixer_Util.getEffectiveVolume`).
@@ -1 +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"}
1
+ {"version":3,"file":"audio-channel.enum.js","sourceRoot":"","sources":["../../../../src/_modules/game/_enums/audio-channel.enum.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;GAaG;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,37 @@
1
+ import { DyFM_AudioScale } from './audio-scale.interface';
2
+ /**
3
+ * Egy jatek audio-mixerenek **deklaracioja**: milyen csatornai vannak, milyen skalan, es mik
4
+ * az alapertelmezesek.
5
+ *
6
+ * **Miert nem fix csatorna-keszlet:** a `DyFM_AudioMixer_Settings` (round-1) negy fix mezot ad
7
+ * (`music` / `ambience` / `effects`), ami a Prototyper harom prototipusara igaz — de a Hero
8
+ * Coordinator csatornai `music` / `dialog` / `interface`. Egy fix alak ott csatorna-vesztessel
9
+ * jarna. A config-alapu modell mindkettot kiszolgalja, es a projekt sajat csatorna-enumja
10
+ * marad a nevek forrasa.
11
+ *
12
+ * **A `master` nem szerepel a `channels` listaban** — kulon kezelt, mert minden csatornara
13
+ * szorzodik.
14
+ *
15
+ * **Hasznalat:**
16
+ * ```typescript
17
+ * const mixer = new DyFM_AudioMixer_ControlModel({
18
+ * channels: ['music', 'dialog', 'interface'],
19
+ * scale: DyFM_AudioScale_Util.getPercentScale(),
20
+ * defaults: { music: 36, dialog: 84, interface: 68 },
21
+ * defaultMaster: 72,
22
+ * });
23
+ * ```
24
+ */
25
+ export interface DyFM_AudioMixer_Config {
26
+ /** A projekt sajat csatorna-nevei. A `master` NEM tartozik ide (kulon kezelt). */
27
+ channels: string[];
28
+ /** A csatorna-ertekek skalaja (`unit` = 0..1, `percent` = 0-100 egesz). */
29
+ scale: DyFM_AudioScale;
30
+ /** Alapertelmezett csatorna-ertekek a **sajat skalan**. A fel nem soroltak a `defaultChannelVolume`-ot kapjak. */
31
+ defaults?: Record<string, number>;
32
+ /** Alapertelmezett master-ertek a **sajat skalan**. Default: a skala maximumanak 80%-a. */
33
+ defaultMaster?: number;
34
+ /** Alapertelmezes a `defaults`-ban fel nem sorolt csatornakra (**sajat skala**). Default: a maximum 80%-a. */
35
+ defaultChannelVolume?: number;
36
+ }
37
+ //# sourceMappingURL=audio-mixer-config.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer-config.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/audio-mixer-config.interface.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,sBAAsB;IAErC,kFAAkF;IAClF,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,2EAA2E;IAC3E,KAAK,EAAE,eAAe,CAAC;IAEvB,kHAAkH;IAClH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,8GAA8G;IAC9G,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=audio-mixer-config.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer-config.interface.js","sourceRoot":"","sources":["../../../../src/_modules/game/_models/audio-mixer-config.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Egy audio-mixer **allapota** — a projekt sajat skalajan tarolva, JSON-serializalhatoan.
3
+ *
4
+ * A `channels` nyitott rekord: a kulcsok a `DyFM_AudioMixer_Config.channels` nevei. Igy egy
5
+ * jatek annyi es olyan nevu csatornat hasznalhat, amennyit akar, a bedrock-modell valtoztatasa
6
+ * nelkul.
7
+ *
8
+ * **Mentheto:** ez az alak kerulhet kozvetlenul a save-payloadba vagy a localStorage-ba.
9
+ * Hianyos/regi payloadbol a `DyFM_AudioMixer_ControlModel.merge()` allit elo teljes allapotot.
10
+ */
11
+ export interface DyFM_AudioMixer_State {
12
+ /** Fo-hangero a **sajat skalan** — minden csatornara szorzodik. */
13
+ master: number;
14
+ /** Csatorna-nev -> hangero a **sajat skalan**. */
15
+ channels: Record<string, number>;
16
+ /** Globalis nemitas — ha `true`, minden effektiv hangero 0. */
17
+ muted: boolean;
18
+ }
19
+ //# sourceMappingURL=audio-mixer-state.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer-state.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/audio-mixer-state.interface.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IAEpC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,+DAA+D;IAC/D,KAAK,EAAE,OAAO,CAAC;CAChB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=audio-mixer-state.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer-state.interface.js","sourceRoot":"","sources":["../../../../src/_modules/game/_models/audio-mixer-state.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
1
+ import { DyFM_AudioMixer_Config } from './audio-mixer-config.interface';
2
+ import { DyFM_AudioMixer_Settings } from './audio-mixer-settings.interface';
3
+ import { DyFM_AudioMixer_State } from './audio-mixer-state.interface';
4
+ /**
5
+ * **Csatorna- es skala-agnosztikus** jatek-audio mixer: a projekt deklaralja a sajat
6
+ * csatornait es szamabrazolasat, a modell pedig kezeli az allapotot es kiszamolja az
7
+ * effektiv hangerot.
8
+ *
9
+ * **Miert letezik a `DyFM_AudioMixer_Util` (round-1) mellett:** az a util negy FIX csatornara
10
+ * (`music` / `ambience` / `effects`) es `0..1` skalara epul. Ez a Prototyper harom prototipusara
11
+ * igaz, de a **Hero Coordinator** csatornai `music` / `dialog` / `interface`, az ertekei pedig
12
+ * `0-100` egeszek. A fix alak ott csatorna-vesztessel es kotelezo adat-migracioval jarna.
13
+ * Ez a modell mindkettot kiszolgalja; a round-1 alak `createClassic()` presetkent tovabb el.
14
+ *
15
+ * **Rendereles-agnosztikus:** NINCS DOM, Web Audio, Angular vagy Node fuggese. A tenyleges
16
+ * lejatszas (HTMLAudioElement, Web Audio `GainNode`, vagy barmi mas) a fogyasztoe — ez a
17
+ * **modell + szamitas**.
18
+ *
19
+ * **Hasznalat (Hero Coordinator-stilus, 0-100 egesz):**
20
+ * ```typescript
21
+ * const mixer = DyFM_AudioMixer_ControlModel.createPercent(['music', 'dialog', 'interface'], {
22
+ * music: 36, dialog: 84, interface: 68,
23
+ * }, 72);
24
+ *
25
+ * let state = mixer.merge(JSON.parse(localStorage.getItem('audio') ?? 'null'));
26
+ * gainNode.gain.value = mixer.getEffectiveVolume(state, 'interface'); // MINDIG 0..1
27
+ *
28
+ * state = mixer.withChannelVolume(state, 'music', 40); // a sajat skalajan adjuk meg
29
+ * localStorage.setItem('audio', JSON.stringify(state));
30
+ * ```
31
+ *
32
+ * **Hasznalat (Prototyper-stilus, 0..1):**
33
+ * ```typescript
34
+ * const mixer = DyFM_AudioMixer_ControlModel.createClassic();
35
+ * const state = DyFM_AudioMixer_ControlModel.fromClassicSettings(legacySettings);
36
+ * ```
37
+ */
38
+ export declare class DyFM_AudioMixer_ControlModel {
39
+ /** A `master` fenntartott nev — nem lehet sima csatorna, mert minden csatornara szorzodik. */
40
+ static readonly masterChannel: string;
41
+ /** A validalt, sajat peldany-config (a hivo altal atadott objektumtol fuggetlen masolat). */
42
+ private readonly config;
43
+ /**
44
+ * A config validalasa **konstruktor-idoben** tortenik: egy elgepelt csatorna-nev vagy hianyzo
45
+ * skala igy a jatek inditasakor derul ki, nem hangleajatszas kozben.
46
+ */
47
+ constructor(config: DyFM_AudioMixer_Config);
48
+ /**
49
+ * A round-1 `DyFM_AudioMixer_Settings` alakjaval egyenerteku mixer (`music` / `ambience` /
50
+ * `effects`, `0..1` skala, 0.8 default). A Prototyper-stilusu fogyasztoknak.
51
+ */
52
+ static createClassic(): DyFM_AudioMixer_ControlModel;
53
+ /**
54
+ * `0-100` egesz skalaju mixer tetszoleges csatorna-keszlettel — a Hero Coordinator-stilusu
55
+ * fogyasztoknak, akik igy **adat-migracio nelkul** vehetik hasznalatba a bedrock modellt.
56
+ */
57
+ static createPercent(channels: string[], defaults?: Record<string, number>, defaultMaster?: number): DyFM_AudioMixer_ControlModel;
58
+ /** A round-1 fix alakot atalakitja a nyitott allapot-alakra (migracios hid). */
59
+ static fromClassicSettings(settings: DyFM_AudioMixer_Settings): DyFM_AudioMixer_State;
60
+ /**
61
+ * A nyitott allapot-alakot visszaalakitja a round-1 fix alakra (migracios hid visszafele).
62
+ *
63
+ * **Peldany-metodus**, mert a helyes konverziohoz ismerni kell a peldany skalajat: egy
64
+ * `0-100`-as allapotot igy is `0..1`-re normalizal, ahogy a round-1 alak varja. (Statikus
65
+ * valtozatban ez nemaan rossz erteket adna.)
66
+ *
67
+ * A klasszikus keszleten kivuli csatornak (pl. `dialog`) **elvesznek** — ez a round-1 alak
68
+ * korlatja, nem a konverzioe.
69
+ */
70
+ toClassicSettings(state: DyFM_AudioMixer_State): DyFM_AudioMixer_Settings;
71
+ /** A peldany configja (masolat — a mutalasa nem hat vissza a modellre). */
72
+ getConfig(): DyFM_AudioMixer_Config;
73
+ /** A deklaralt csatorna-nevek (a `master` nelkul). */
74
+ getChannels(): string[];
75
+ /** Igaz, ha a nev a deklaralt csatornak kozott van (a `master` NEM az). */
76
+ hasChannel(channel: string): boolean;
77
+ /**
78
+ * Alapertelmezett allapot a **sajat skalan**. Minden hivas UJ objektumot ad vissza, hogy a
79
+ * hivo szabadon mutalhassa.
80
+ */
81
+ getDefaults(): DyFM_AudioMixer_State;
82
+ /**
83
+ * Reszleges / hianyzo / serult allapotbol teljes, ervenyes allapotot allit elo: a hianyzo
84
+ * csatornak a defaultot kapjak, az ertekek a sajat skalara szorulnak.
85
+ *
86
+ * **Ez a migracios biztositek:** egy regi payload, ami meg nem ismert egy kesobb bevezetett
87
+ * csatornat, igy is betoltheto marad. A **nem deklaralt** csatornak kiesnek — igy egy
88
+ * eltavolitott csatorna nem szivarog vissza a mentesbol. Serult (NaN / nem-szam) ertek eseten
89
+ * a csatorna DEFAULT-jat kapja, nem 0-t — egy hibas mentes ne nemitson el csendben.
90
+ *
91
+ * **Figyelem:** ez a nyitott (`channels` rekord) alakot varja. A round-1 LAPOS alakot
92
+ * (`{ master, music, ambience, effects, muted }`) eloszor a `fromClassicSettings()`-szel
93
+ * kell atalakitani — kulonben a csatornak a defaultot kapjak.
94
+ */
95
+ merge(partial?: Partial<DyFM_AudioMixer_State> | null): DyFM_AudioMixer_State;
96
+ /**
97
+ * Egy csatorna **effektiv** hangereje `0..1`-ben — ezt varja a `HTMLAudioElement.volume` es a
98
+ * Web Audio `GainNode.gain.value`, fuggetlenul attol, milyen skalan tarol a projekt.
99
+ *
100
+ * A csatorna sajat erteke szorozva a master-rel; nemitas eseten mindig 0. A `'master'` nevre
101
+ * a master sajat (normalizalt) erteket adja vissza, nem negyzetre emelve.
102
+ *
103
+ * **Dob**, ha a csatorna nincs deklaralva — egy elgepelt csatorna-nev igy nem nemul el
104
+ * csendben, hanem azonnal kiderul (`core-rich-error-handling`).
105
+ */
106
+ getEffectiveVolume(state: DyFM_AudioMixer_State, channel: string): number;
107
+ /**
108
+ * Egy csatorna hangerejenek beallitasa a **sajat skalan** — UJ allapot-objektumot ad vissza
109
+ * (immutable update), hogy signal-/state-alapu tarolokban is biztonsagos legyen.
110
+ */
111
+ withChannelVolume(state: DyFM_AudioMixer_State, channel: string, volume: number): DyFM_AudioMixer_State;
112
+ /** A master beallitasa a **sajat skalan** — UJ allapot-objektumot ad vissza. */
113
+ withMasterVolume(state: DyFM_AudioMixer_State, volume: number): DyFM_AudioMixer_State;
114
+ /** Nemitas beallitasa — UJ allapot-objektumot ad vissza. */
115
+ withMuted(state: DyFM_AudioMixer_State, muted: boolean): DyFM_AudioMixer_State;
116
+ /** Ket allapot ertek szerinti egyezese (mentes-szukseg / change-detection dontesehez). */
117
+ isEqual(a: DyFM_AudioMixer_State, b: DyFM_AudioMixer_State): boolean;
118
+ /** A master alapertelmezese a sajat skalan (config, kulonben a maximum 80%-a). */
119
+ private getDefaultMaster;
120
+ /** Egy csatorna alapertelmezese a sajat skalan (per-csatorna, kulonben kozos, kulonben 80%). */
121
+ private getDefaultChannelVolume;
122
+ }
123
+ //# sourceMappingURL=audio-mixer.control-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-mixer.control-model.d.ts","sourceRoot":"","sources":["../../../../src/_modules/game/_models/audio-mixer.control-model.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAItE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,4BAA4B;IAEvC,8FAA8F;IAC9F,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAY;IAEjD,6FAA6F;IAC7F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD;;;OAGG;gBACS,MAAM,EAAE,sBAAsB;IAoD1C;;;OAGG;IACH,MAAM,CAAC,aAAa,IAAI,4BAA4B;IASpD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,aAAa,CAAC,EAAE,MAAM,GACrB,4BAA4B;IAS/B,gFAAgF;IAChF,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,qBAAqB;IAerF;;;;;;;;;OASG;IACH,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,wBAAwB;IAazE,2EAA2E;IAC3E,SAAS,IAAI,sBAAsB;IAUnC,sDAAsD;IACtD,WAAW,IAAI,MAAM,EAAE;IAIvB,2EAA2E;IAC3E,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpC;;;OAGG;IACH,WAAW,IAAI,qBAAqB;IAcpC;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,GAAG,qBAAqB;IA6B7E;;;;;;;;;OASG;IACH,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IA0BzE;;;OAGG;IACH,iBAAiB,CACf,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,qBAAqB;IAexB,gFAAgF;IAChF,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,qBAAqB;IAOrF,4DAA4D;IAC5D,SAAS,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,GAAG,qBAAqB;IAO9E,0FAA0F;IAC1F,OAAO,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,qBAAqB,GAAG,OAAO;IAiBpE,kFAAkF;IAClF,OAAO,CAAC,gBAAgB;IAQxB,gGAAgG;IAChG,OAAO,CAAC,uBAAuB;CAchC"}