diff --git a/plugin/src/App/Notifications.lua b/plugin/src/App/Notifications.lua index 7da591ccd..97be8b45c 100644 --- a/plugin/src/App/Notifications.lua +++ b/plugin/src/App/Notifications.lua @@ -11,7 +11,6 @@ local bindingUtil = require(script.Parent.bindingUtil) local Theme = require(Plugin.App.Theme) local Assets = require(Plugin.Assets) -local playSound = require(Plugin.playSound) local BorderedContainer = require(Plugin.App.Components.BorderedContainer) @@ -53,7 +52,7 @@ function Notification:didMount() }) ) - playSound(Assets.Sounds.Notification) + self.props.soundPlayer:play(Assets.Sounds.Notification) self.timeout = task.spawn(function() local clock = os.clock() @@ -182,6 +181,7 @@ function Notifications:render() for index, notif in ipairs(self.props.notifications) do notifs[notif] = e(Notification, { + soundPlayer = self.props.soundPlayer, text = notif.text, timestamp = notif.timestamp, timeout = notif.timeout, diff --git a/plugin/src/App/PluginSettings.lua b/plugin/src/App/PluginSettings.lua index 72a5e6c14..366eb87a0 100644 --- a/plugin/src/App/PluginSettings.lua +++ b/plugin/src/App/PluginSettings.lua @@ -10,6 +10,7 @@ local defaultSettings = { openScriptsExternally = false, twoWaySync = false, showNotifications = true, + playSounds = true, } local Settings = {} diff --git a/plugin/src/App/StatusPages/Settings.lua b/plugin/src/App/StatusPages/Settings.lua index 54b1e252c..77074b677 100644 --- a/plugin/src/App/StatusPages/Settings.lua +++ b/plugin/src/App/StatusPages/Settings.lua @@ -210,12 +210,20 @@ function SettingsPage:render() layoutOrder = 2, }), + PlaySounds = e(Setting, { + id = "playSounds", + name = "Play Sounds", + description = "Toggle sound effects", + transparency = self.props.transparency, + layoutOrder = 3, + }), + TwoWaySync = e(Setting, { id = "twoWaySync", name = "Two-Way Sync", description = "EXPERIMENTAL! Editing files in Studio will sync them into the filesystem", transparency = self.props.transparency, - layoutOrder = 3, + layoutOrder = 4, }), Layout = e("UIListLayout", { diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index 1058954a4..9b4b60fb1 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -12,6 +12,7 @@ local Dictionary = require(Plugin.Dictionary) local ServeSession = require(Plugin.ServeSession) local ApiContext = require(Plugin.ApiContext) local preloadAssets = require(Plugin.preloadAssets) +local soundPlayer = require(Plugin.soundPlayer) local Theme = require(script.Theme) local PluginSettings = require(script.PluginSettings) @@ -272,6 +273,7 @@ function App:render() Padding = UDim.new(0, 5), }), notifs = e(Notifications, { + soundPlayer = self.props.soundPlayer, notifications = self.state.notifications, onClose = function(index) self:closeNotification(index) @@ -347,10 +349,11 @@ return function(props) plugin = props.plugin, }, { App = PluginSettings.with(function(settings) - local settingsProps = Dictionary.merge(props, { + local mergedProps = Dictionary.merge(props, { settings = settings, + soundPlayer = soundPlayer.new(settings), }) - return e(App, settingsProps) + return e(App, mergedProps) end), }) end diff --git a/plugin/src/playSound.lua b/plugin/src/soundPlayer.lua similarity index 54% rename from plugin/src/playSound.lua rename to plugin/src/soundPlayer.lua index 4e4523136..a58e83640 100644 --- a/plugin/src/playSound.lua +++ b/plugin/src/soundPlayer.lua @@ -1,4 +1,4 @@ --- Roblox decided that sounds only play in Edit mode when parented to a plugin widget, for some reason +-- Sounds only play in Edit mode when parented to a plugin widget, for some reason local plugin = plugin or script:FindFirstAncestorWhichIsA("Plugin") local widget = plugin:CreateDockWidgetPluginGui("Rojo_soundPlayer", DockWidgetPluginGuiInfo.new( Enum.InitialDockState.Float, @@ -9,7 +9,18 @@ local widget = plugin:CreateDockWidgetPluginGui("Rojo_soundPlayer", DockWidgetPl widget.Name = "Rojo_soundPlayer" widget.Title = "Rojo Sound Player" -return function(soundId) +local SoundPlayer = {} +SoundPlayer.__index = SoundPlayer + +function SoundPlayer.new(settings) + return setmetatable({ + settings = settings, + }, SoundPlayer) +end + +function SoundPlayer:play(soundId) + if self.settings and self.settings:get("playSounds") == false then return end + local sound = Instance.new("Sound") sound.SoundId = soundId sound.Parent = widget @@ -20,3 +31,5 @@ return function(soundId) sound:Play() end + +return SoundPlayer