[x] Consider a SoundService/SoundController combo that replicates sounds to the client where properties such as their volume can be customised.
[x] Consider a SoundService method/object (e.g. :createSound) which creates a sound instance and overrides various methods/properties (for instance, instead of playing/pausing/modifying pitch etc, fires off info to all relevant clients who then dynamically modify instance and perform the action with their own localised sound properties
[x] override following methods/props:
[x] play
[x] pause
[x] stop
[x] clone
[x] resume
[x] SoundId (make sure to update object.soundId)
[x] create following module methods
[x] SoundService
[x] :createSound(soundId)
[x] :getOrCreateSound(soundId)
[x] getSound(soundId)
[x] setup remotes
[x] SoundController
[x] :createSound(soundId)
[x] :getOrCreateSound(soundId)
[x] getSound(soundId)
[x] :overrideSound(soundInstance) - same as :createSound, but overrides given sound instance instead of creating a new sound instance
[x] setup remotes
[x] Consider a new category of client settings specifically for game sounds
[x] properties will be:
[x] volume (a slider from 0-2, multiplies the incoming sound volume by this value)
[x] pitch/playbackSpeed (a slider from 0-2, multiplies the incoming sound pitch by this value)
[x] types will be:
[x] music
[x] commands
[x] interface
[x] Complete SoundController
[x] Setup a client module/controller which is responsible for retrieving and containing an up-to-date record of PlayerSettings
[x] Move Player Settings into a Shared module
[x] Initially use these values
[x] Setup a remote which updates all client settings
[x] Setup a remote which updates individual client settings
[x] Important: test SettingService.updatePlayerSetting
[x] with optionalUser
[x] without
[x] CRITICAL: Sub tables are being over written for updateRecord. Why?? Something internal? See print statements.
[x] When userloaded, server fires to client with all information
[x] When player setting changed, fire to player with setting information
[x] Store all these within the module (called SettingController)
[x] SettingController.getPlayerSetting()
[x] SettingController.getPlayerSettings()
[x] IMPORTANT: Have updateLocalPlayerSettings transmit the pathway change, as values are not being reflected correctly
[x] Have SoundController.createSound update the returned soundinstance with these settings (based upon SoundType enum)
[x] Listen for property changes of 'Volume' and 'Pitch' (i.e. if modified in workspace), then update client immidately
[x] Make sure to set the relative volume instead of actual volume (e.g. do sound.Volume * setting.Volume instead of setting.Volume) - also add a note by those settings saying 0-2 slider
SettingService.updatePlayerSetting
sound.Volume * setting.Volume
instead of setting.Volume) - also add a note by those settings saying 0-2 slider