{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Config where import Control.Lens import Data.Aeson import Data.Aeson.TH import qualified Data.Set as S {-# ANN module "HLint: ignore Use camelCase" #-} data NumShadowCasters = NumShadowCasters0 | NumShadowCasters1 | NumShadowCasters2 | NumShadowCasters3 | NumShadowCasters4 | NumShadowCasters5 | NumShadowCasters6 | NumShadowCasters7 | NumShadowCasters8 | NumShadowCasters9 | NumShadowCasters10 | NumShadowCasters11 | NumShadowCasters12 | NumShadowCasters13 | NumShadowCasters14 | NumShadowCasters15 | NumShadowCasters16 | NumShadowCasters17 | NumShadowCasters18 | NumShadowCasters19 | NumShadowCasters20 deriving (Show,Eq,Bounded,Ord,Enum) data Configuration = Configuration { _volume_master :: Float , _volume_sound :: Float , _volume_music :: Float , _graphics_cloud_shadows :: Bool , _graphics_object_shadows :: ShadowRendering , _graphics_resolution_factor :: ResFactor , _graphics_num_shadow_casters :: NumShadowCasters , _windowX :: Float , _windowY :: Float , _windowPosX :: Int , _windowPosY :: Int , _gameplay_rotate_to_wall :: Bool , _debug_view_clip_bounds :: RoomClipping , _debug_booleans :: S.Set DebugBool -- consider using Data.BitSet } deriving (Show) data DebugBool = Show_ms_frame | Show_debug | Show_sound | Noclip | Cr_status | Cr_awareness | Mouse_position | View_boundaries | Walls_info | Pathing | Remove_LOS | Cull_more_lights | Close_shape_culling | Show_bound_box | Bound_box_screen | Show_wall_search_rays | Show_dda_test | Collision_test | Show_far_wall_detect | Show_walls_near_point_cursor | Show_walls_near_point_you | Show_zone_near_point_cursor | Show_select | Inspect_wall | Show_nodes_near_select | Show_path_between deriving (Eq, Ord, Bounded, Enum, Show) data ResFactor = FullRes | HalfRes | QuarterRes deriving (Show, Eq, Ord, Enum, Bounded) data ShadowRendering = GeoObjShads | InstancingShads | NoObjShads | NoShadows | NoLighting deriving (Show, Eq, Ord, Enum, Bounded) data RoomClipping = NoRoomClipBoundaries | AllRoomClipBoundaries | IntersectingRoomClipBoundaries deriving (Show, Eq, Ord, Enum, Bounded) resFactorNum :: ResFactor -> Int resFactorNum rf = case rf of FullRes -> 1 HalfRes -> 2 QuarterRes -> 4 defaultConfig :: Configuration defaultConfig = Configuration { _volume_master = 1 , _volume_sound = 1 , _volume_music = 0 , _graphics_cloud_shadows = True , _graphics_object_shadows = GeoObjShads , _graphics_resolution_factor = QuarterRes , _graphics_num_shadow_casters = toEnum 10 , _windowX = 800 , _windowY = 600 , _windowPosX = 0 , _windowPosY = 0 , _gameplay_rotate_to_wall = True , _debug_booleans = S.singleton Show_ms_frame , _debug_view_clip_bounds = NoRoomClipBoundaries } debugOn :: DebugBool -> Configuration -> Bool debugOn db = S.member db . _debug_booleans makeLenses ''Configuration deriveJSON defaultOptions ''NumShadowCasters deriveJSON defaultOptions ''ResFactor deriveJSON defaultOptions ''ShadowRendering deriveJSON defaultOptions ''RoomClipping deriveJSON defaultOptions ''DebugBool deriveJSON defaultOptions ''Configuration