You've already forked Nitro_Render_V3
mirror of
https://github.com/duckietm/Nitro_Render_V3.git
synced 2026-06-19 23:16:20 +00:00
feat(sound): snapshot getter + volume-update event on SoundManager
Extends the snapshot pattern to the three audio volume levels (system /
furni / trax) so volume-slider widgets on the React client can subscribe
to a single source of truth via useSyncExternalStore.
API additions on ISoundManager:
- systemVolume / furniVolume getters (parity with the existing
traxVolume getter)
- getVolumesSnapshot(): Readonly<ISoundVolumesSnapshot> with the same
lazy-frozen + invalidation-on-change semantics as the user/session
snapshots
- new ISoundVolumesSnapshot { system, furni, trax } interface
New event: NitroEventType.SOUND_VOLUMES_UPDATED. Dispatched only when
the incoming NitroSettingsEvent.SETTINGS_UPDATED actually changes one
of the three volumes (a no-op refresh stays quiet).
While in there, fixed a real bug: the previous implementation cached
`volumeFurniUpdated` / `volumeTraxUpdated` BEFORE writing the new
values, but read `castedEvent.volumeFurni` / `castedEvent.volumeTrax`
in their pre-division form — comparing percent (e.g. 75) against the
already-divided stored value (e.g. 0.75) — so the change check almost
always reported "updated" for a real settings push and never reported
"updated" if the percent matched the stored fraction by coincidence
(only 0/100 are stable). Updated check is now consistent (compare
fraction vs fraction) and also tracks systemVolume changes for the
new snapshot invalidation.
This commit is contained in:
@@ -1,8 +1,22 @@
|
||||
import { IMusicController } from './IMusicController';
|
||||
import { ISoundVolumesSnapshot } from './ISoundVolumesSnapshot';
|
||||
|
||||
export interface ISoundManager
|
||||
{
|
||||
init(): Promise<void>;
|
||||
musicController: IMusicController;
|
||||
traxVolume: number;
|
||||
systemVolume: number;
|
||||
furniVolume: number;
|
||||
|
||||
/**
|
||||
* Returns a referentially-stable snapshot of the three volume
|
||||
* levels (system / furni / trax). The same reference is returned
|
||||
* across reads until a volume changes; mutations dispatch
|
||||
* `NitroEventType.SOUND_VOLUMES_UPDATED` to signal invalidation.
|
||||
*
|
||||
* Pairs with `useSyncExternalStore` on the React client for
|
||||
* volume-slider widgets.
|
||||
*/
|
||||
getVolumesSnapshot(): Readonly<ISoundVolumesSnapshot>;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
export interface ISoundVolumesSnapshot
|
||||
{
|
||||
system: number;
|
||||
furni: number;
|
||||
trax: number;
|
||||
}
|
||||
@@ -2,3 +2,4 @@ export * from './IMusicController';
|
||||
export * from './IPlaylistController';
|
||||
export * from './ISongInfo';
|
||||
export * from './ISoundManager';
|
||||
export * from './ISoundVolumesSnapshot';
|
||||
|
||||
Reference in New Issue
Block a user