Apply all world side effects using list
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
module Dodge.Config.Load
|
||||
(
|
||||
loadDodgeConfig
|
||||
) where
|
||||
import Dodge.Config.Data
|
||||
|
||||
import Data.Aeson
|
||||
import System.Directory
|
||||
|
||||
loadDodgeConfig :: IO Configuration
|
||||
loadDodgeConfig = do
|
||||
fExists <- doesFileExist "data/dodge.config.json"
|
||||
if fExists
|
||||
then do
|
||||
mayConfig <- decodeFileStrict "data/dodge.config.json"
|
||||
case mayConfig of
|
||||
Just config -> return config
|
||||
Nothing -> do
|
||||
putStrLn "invalid data/dodge.config.json, loading defaults"
|
||||
return defaultConfig
|
||||
else do
|
||||
putStrLn "No data/data/dodge.config.json found, loading defaults"
|
||||
return defaultConfig
|
||||
@@ -6,20 +6,23 @@ module Dodge.Config.Update
|
||||
import Dodge.Data
|
||||
import Dodge.Config.Data
|
||||
import Sound
|
||||
import Preload.Data
|
||||
|
||||
import Data.Aeson (encodeFile)
|
||||
import Control.Monad (when)
|
||||
|
||||
updateDodgeConfig :: World -> IO ()
|
||||
updateDodgeConfig w = case _menuLayers w of
|
||||
(ConfigSaveScreen : _) -> do
|
||||
putStrLn "Saving config to data/dodge.config.json"
|
||||
encodeFile "data/dodge.config.json" cfig
|
||||
_ -> when (_configNeedsUpdate w) (setVolume cfig)
|
||||
where
|
||||
cfig = _config w
|
||||
saveConfig :: Configuration -> PreloadData SoundOrigin -> IO (PreloadData SoundOrigin)
|
||||
saveConfig cfig d = do
|
||||
putStrLn "Saving config to data/dodge.config.json"
|
||||
encodeFile "data/dodge.config.json" cfig
|
||||
return d
|
||||
|
||||
setVolume :: Configuration -> IO ()
|
||||
setVolume cfig = do
|
||||
setSoundVolume ( _volume_master cfig * _volume_sound cfig)
|
||||
setMusicVolume ( _volume_master cfig * _volume_music cfig)
|
||||
|
||||
setVol :: Configuration -> PreloadData SoundOrigin -> IO (PreloadData SoundOrigin)
|
||||
setVol cfig d = do
|
||||
setVolume cfig
|
||||
return d
|
||||
|
||||
Reference in New Issue
Block a user