| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import { DEFAULT_GAME_AUDIO_CONFIG, type AudioCueKey, type GameAudioConfig } from '../audio/audioConfig'
- import { SoundDirector } from '../audio/soundDirector'
- import { type GameEffect } from '../core/gameResult'
- import { type AnimationLevel } from '../../utils/animationLevel'
- import {
- DEFAULT_GAME_HAPTICS_CONFIG,
- DEFAULT_GAME_UI_EFFECTS_CONFIG,
- type FeedbackCueKey,
- type GameHapticsConfig,
- type GameUiEffectsConfig,
- } from './feedbackConfig'
- import { HapticsDirector } from './hapticsDirector'
- import { UiEffectDirector, type UiEffectHost } from './uiEffectDirector'
- export interface FeedbackHost extends UiEffectHost {
- stopLocationTracking: () => void
- }
- export interface FeedbackConfigBundle {
- audioConfig?: GameAudioConfig
- hapticsConfig?: GameHapticsConfig
- uiEffectsConfig?: GameUiEffectsConfig
- }
- export class FeedbackDirector {
- soundDirector: SoundDirector
- hapticsDirector: HapticsDirector
- uiEffectDirector: UiEffectDirector
- host: FeedbackHost
- constructor(host: FeedbackHost, config?: FeedbackConfigBundle) {
- this.host = host
- this.soundDirector = new SoundDirector(config && config.audioConfig ? config.audioConfig : DEFAULT_GAME_AUDIO_CONFIG)
- this.hapticsDirector = new HapticsDirector(config && config.hapticsConfig ? config.hapticsConfig : DEFAULT_GAME_HAPTICS_CONFIG)
- this.uiEffectDirector = new UiEffectDirector(host, config && config.uiEffectsConfig ? config.uiEffectsConfig : DEFAULT_GAME_UI_EFFECTS_CONFIG)
- }
- configure(config: FeedbackConfigBundle): void {
- this.soundDirector.configure(config.audioConfig || DEFAULT_GAME_AUDIO_CONFIG)
- this.hapticsDirector.configure(config.hapticsConfig || DEFAULT_GAME_HAPTICS_CONFIG)
- this.uiEffectDirector.configure(config.uiEffectsConfig || DEFAULT_GAME_UI_EFFECTS_CONFIG)
- }
- reset(): void {
- this.soundDirector.resetContexts()
- this.uiEffectDirector.clearPunchButtonMotion()
- this.uiEffectDirector.clearHudProgressMotion()
- this.uiEffectDirector.clearHudDistanceMotion()
- }
- destroy(): void {
- this.soundDirector.destroy()
- this.hapticsDirector.destroy()
- this.uiEffectDirector.destroy()
- }
- setAnimationLevel(level: AnimationLevel): void {
- this.uiEffectDirector.setAnimationLevel(level)
- }
- setAppAudioMode(mode: 'foreground' | 'background'): void {
- this.soundDirector.setAppAudioMode(mode)
- }
- playAudioCue(key: AudioCueKey): void {
- this.soundDirector.play(key)
- }
- playHapticCue(key: FeedbackCueKey): void {
- this.hapticsDirector.trigger(key)
- }
- handleEffects(effects: GameEffect[]): void {
- this.soundDirector.handleEffects(effects)
- this.hapticsDirector.handleEffects(effects)
- this.uiEffectDirector.handleEffects(effects)
- if (effects.some((effect) => effect.type === 'session_finished' || effect.type === 'session_timed_out')) {
- this.host.stopLocationTracking()
- }
- }
- }
|