add gs
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
-- local CoreGui = Game:GetService("CoreGui")
|
||||
|
||||
-- local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
||||
|
||||
local GuiService = game:GetService('GuiService')
|
||||
local runService = game:GetService("RunService")
|
||||
|
||||
local CoreGui = game:GetService("CoreGui")
|
||||
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
||||
local Modules = GuiRoot:FindFirstChild("Modules")
|
||||
local ShellModules = Modules:FindFirstChild("Shell")
|
||||
|
||||
local Utility = require(ShellModules:FindFirstChild('Utility'))
|
||||
|
||||
local BASE_SOUND_URL = 'rbxasset://sounds/ui/Shell/'
|
||||
|
||||
local SOUNDS =
|
||||
{
|
||||
--[[ BGM ]]--
|
||||
['BackgroundLoop'] = 'RobloxMusic.ogg';
|
||||
|
||||
|
||||
--[[ UI Sounds ]]--
|
||||
['Error'] = 'Error.mp3';
|
||||
['ButtonPress'] = 'ButtonPress.mp3';
|
||||
['MoveSelection'] = 'MoveSelection.mp3';
|
||||
['OverlayOpen'] = 'OverlayOpen.mp3';
|
||||
['PopUp'] = 'PopUp.mp3';
|
||||
['PurchaseSuccess'] = 'PurchaseSuccess.mp3';
|
||||
['ScreenChange'] = 'ScreenChange.mp3';
|
||||
['SideMenuSlideIn'] = 'SideMenuSlideIn.mp3';
|
||||
}
|
||||
|
||||
local SoundQueue = {}
|
||||
|
||||
local function EaseOutCirc(currentTime, startValue, deltaValue, duration)
|
||||
currentTime = currentTime / duration;
|
||||
currentTime = currentTime - 1;
|
||||
return deltaValue * math.sqrt(1 - currentTime*currentTime) + startValue;
|
||||
end
|
||||
|
||||
local function IsGameRunning()
|
||||
if not UserSettings().GameSettings:InStudioMode() or game:GetService('UserInputService'):GetPlatform() == Enum.Platform.Windows then
|
||||
return true
|
||||
end
|
||||
return runService:IsRunning()
|
||||
end
|
||||
|
||||
GetSoundManager = function()
|
||||
local this = {}
|
||||
|
||||
local rawVolumes = {}
|
||||
|
||||
local function FindSoundObjectForName(soundName)
|
||||
if SoundQueue[soundName] then
|
||||
local soundObj = table.remove(SoundQueue[soundName], 1)
|
||||
if soundObj then
|
||||
table.insert(SoundQueue[soundName], #SoundQueue[soundName], soundObj)
|
||||
return soundObj
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this:CreateSound(soundName)
|
||||
local fileName = SOUNDS[soundName]
|
||||
local soundsUrl = BASE_SOUND_URL .. fileName
|
||||
|
||||
local soundObj = Instance.new('Sound')
|
||||
soundObj.Name = soundName
|
||||
soundObj.SoundId = soundsUrl
|
||||
|
||||
return soundObj
|
||||
end
|
||||
|
||||
function this:Play(soundName, vol, isLoop, pitch, ...)
|
||||
local result = nil
|
||||
|
||||
if SOUNDS[soundName] then
|
||||
local soundObj = FindSoundObjectForName(soundName)
|
||||
if soundObj then
|
||||
soundObj.Volume = vol or 1
|
||||
|
||||
soundObj.Looped = isLoop or false
|
||||
soundObj.Pitch = pitch or 1
|
||||
|
||||
soundObj:Play(...)
|
||||
|
||||
rawVolumes[soundObj] = soundObj.Volume
|
||||
if not IsGameRunning() then
|
||||
soundObj.Volume = 0
|
||||
end
|
||||
|
||||
result = soundObj
|
||||
else
|
||||
Utility.DebugLog("No sound:" , soundName , "in the queue.")
|
||||
end
|
||||
else
|
||||
spawn(function()
|
||||
error("Unable to find sound: " .. tostring(soundName))
|
||||
end)
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
function this:IsPlaying(soundName)
|
||||
local sound = this.SoundHolder:FindFirstChild(soundName)
|
||||
if sound then
|
||||
return sound.IsPlaying
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function this:Stop(soundName, ...)
|
||||
if this.SoundHolder and SOUNDS[soundName] then
|
||||
local soundObj = this.SoundHolder:FindFirstChild(soundName)
|
||||
if soundObj then
|
||||
soundObj:Stop()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this:TweenSound(soundObj, newVolume, duration)
|
||||
rawVolumes[soundObj] = nil
|
||||
Utility.PropertyTweener(soundObj, 'Volume', soundObj.Volume, newVolume, duration,
|
||||
function(...)
|
||||
return IsGameRunning() and Utility.EaseInOutQuad(...) or 0
|
||||
end,
|
||||
true,
|
||||
function()
|
||||
rawVolumes[soundObj] = newVolume
|
||||
end)
|
||||
end
|
||||
|
||||
-- function this:PlayOnEvent(event, soundName)
|
||||
-- event:connect(function()
|
||||
|
||||
-- end)
|
||||
-- end
|
||||
|
||||
local function Initialize()
|
||||
local appshellSounds = Instance.new('Folder')
|
||||
appshellSounds.Name = 'AppShellSounds'
|
||||
appshellSounds.Parent = CoreGui
|
||||
|
||||
this.SoundHolder = appshellSounds
|
||||
|
||||
for name, fileName in pairs(SOUNDS) do
|
||||
local soundsForFile = Instance.new('Folder')
|
||||
soundsForFile.Name = name
|
||||
soundsForFile.Parent = this.SoundHolder
|
||||
|
||||
SoundQueue[name] = {}
|
||||
for i = 1, 3 do
|
||||
local soundObj = this:CreateSound(name)
|
||||
soundObj.Parent = soundsForFile
|
||||
table.insert(SoundQueue[name], soundObj)
|
||||
end
|
||||
end
|
||||
|
||||
local lastSelection = nil
|
||||
GuiService:GetPropertyChangedSignal('SelectedCoreObject'):connect(function()
|
||||
local currentSelection = GuiService.SelectedCoreObject
|
||||
if currentSelection and lastSelection then
|
||||
local moveSelectionSound = currentSelection:FindFirstChild('MoveSelection')
|
||||
if moveSelectionSound and moveSelectionSound:IsA('Sound') then
|
||||
moveSelectionSound.Volume = 0.35
|
||||
moveSelectionSound:Play()
|
||||
end
|
||||
end
|
||||
lastSelection = currentSelection
|
||||
end)
|
||||
|
||||
if not IsGameRunning() then
|
||||
spawn(function()
|
||||
while not IsGameRunning() do
|
||||
wait(0.1)
|
||||
end
|
||||
for soundObj, rawVolume in pairs(rawVolumes) do
|
||||
soundObj.Volume = rawVolume
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
Initialize()
|
||||
|
||||
return this
|
||||
end
|
||||
|
||||
return GetSoundManager()
|
||||
Reference in New Issue
Block a user