sound-manager
Version:
A full-service sound library.
76 lines (66 loc) • 1.71 kB
text/typescript
import {
BaseNode,
} from '../Node/BaseNode';
import {
CollectionSubmanager,
} from './CollectionSubmanager';
import {
ICollectionSubmanager,
} from './ICollectionSubmanager';
import {
IPanelRegisterableNode,
} from '../Node/IPanelRegisterableNode';
import {
IManager,
} from './IManager';
import {
IManagerOptions,
} from './IManagerOptions';
import {
IPlayerSubmanager,
} from './IPlayerSubmanager';
import {
NodeTypes,
} from '../enums/NodeTypes';
import {
PlayerSubmanager,
} from './PlayerSubmanager';
import {
assertValid,
} from 'ts-assertions';
export class Manager
extends BaseNode
implements IManager
{
get type(): NodeTypes.Manager {
return NodeTypes.Manager;
}
public readonly collection: ICollectionSubmanager;
public readonly player: IPlayerSubmanager;
constructor(options?: IManagerOptions) {
super({ ...options });
const { groups } = options || {};
this.collection = new CollectionSubmanager(
{
groups,
getManagerVolume: () => this.getVolume(),
},
);
this.player = new PlayerSubmanager(
{ getCollection: () => this.collection },
);
}
public readonly setVolume = (value: number) => {
super.setVolume(value);
this.collection.updateAllAudioElementsVolume();
return this;
};
public readonly volumePanelRegister = (node: IPanelRegisterableNode) => {
assertValid<IPanelRegisterableNode>(node).panelRegister();
return this;
};
public readonly volumePanelUnregister = (node: IPanelRegisterableNode) => {
assertValid<IPanelRegisterableNode>(node).panelUnregister();
return this;
};
}