160 lines
4.3 KiB
Haskell
160 lines
4.3 KiB
Haskell
{-# LANGUAGE StrictData #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
module Dodge.Data.Config where
|
|
|
|
import Shape.Data
|
|
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_distortions :: Bool
|
|
, _graphics_bloom :: Bool
|
|
, _graphics_shadow_rendering :: ShadowRendering
|
|
, _graphics_shadow_size :: Importance
|
|
, _graphics_downsize_resolution :: ResFactor
|
|
, _graphics_world_resolution :: ResFactor
|
|
, _graphics_distortion_resolution :: ResFactor
|
|
, _graphics_num_shadow_casters :: NumShadowCasters
|
|
, _windowX :: Int
|
|
, _windowY :: Int
|
|
, _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)
|
|
|
|
windowXFloat :: Configuration -> Float
|
|
windowXFloat = fromIntegral . _windowX
|
|
windowYFloat :: Configuration -> Float
|
|
windowYFloat = fromIntegral . _windowY
|
|
|
|
data DebugBool
|
|
= Show_ms_frame
|
|
| Enable_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
|
|
| Inspect_wall
|
|
| Show_nodes_near_select
|
|
| Show_path_between
|
|
deriving (Eq, Ord, Bounded, Enum, Show)
|
|
|
|
data ResFactor = DoubleRes | FullRes | HalfRes | QuarterRes | EighthRes | SixteenthRes
|
|
deriving (Show, Eq, Ord, Enum, Bounded)
|
|
|
|
data ShadowRendering
|
|
= GeoObjShads
|
|
| InstancingShads
|
|
| NoObjShads
|
|
| NoShadows
|
|
| NoLighting
|
|
| ComputeShader
|
|
deriving (Show, Eq, Ord, Enum, Bounded)
|
|
|
|
data RoomClipping = NoRoomClipBoundaries | AllRoomClipBoundaries | IntersectingRoomClipBoundaries
|
|
deriving (Show, Eq, Ord, Enum, Bounded)
|
|
|
|
applyResFactor :: ResFactor -> Int -> Int
|
|
applyResFactor rf = case rf of
|
|
DoubleRes -> (2*)
|
|
FullRes -> id
|
|
HalfRes -> (`div` 2)
|
|
QuarterRes -> (`div` 4)
|
|
EighthRes -> (`div` 8)
|
|
SixteenthRes -> (`div` 16)
|
|
|
|
--resFactorNum :: ResFactor -> Int
|
|
--resFactorNum rf = case rf of
|
|
-- FullRes -> 1
|
|
-- HalfRes -> 2
|
|
-- QuarterRes -> 4
|
|
-- EighthRes -> 8
|
|
-- SixteenthRes -> 16
|
|
|
|
defaultConfig :: Configuration
|
|
defaultConfig =
|
|
Configuration
|
|
{ _volume_master = 1
|
|
, _volume_sound = 1
|
|
, _volume_music = 0
|
|
, _graphics_cloud_shadows = True
|
|
, _graphics_bloom = True
|
|
, _graphics_shadow_rendering = GeoObjShads
|
|
, _graphics_shadow_size = Typical
|
|
, _graphics_distortions = True
|
|
, _graphics_downsize_resolution = SixteenthRes
|
|
, _graphics_world_resolution = QuarterRes
|
|
, _graphics_distortion_resolution = FullRes
|
|
, _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
|