Add num_shadow_casters graphics parameter, allow cycle down enum options

This commit is contained in:
2023-02-26 23:38:58 +00:00
parent bf1bd5bb0b
commit 6b0f78d4eb
9 changed files with 203 additions and 151 deletions
+28 -1
View File
@@ -10,6 +10,30 @@ 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
@@ -18,6 +42,7 @@ data Configuration = Configuration
, _graphics_cloud_shadows :: Bool
, _graphics_object_shadows :: ObjectShadows
, _graphics_resolution_factor :: ResFactor
, _graphics_num_shadow_casters :: NumShadowCasters
, _windowX :: Float
, _windowY :: Float
, _windowPosX :: Int
@@ -81,7 +106,8 @@ defaultConfig =
, _graphics_wall_textured = True
, _graphics_cloud_shadows = True
, _graphics_object_shadows = GeoObjShads
, _graphics_resolution_factor = FullRes
, _graphics_resolution_factor = QuarterRes
, _graphics_num_shadow_casters = toEnum 10
, _windowX = 800
, _windowY = 600
, _windowPosX = 0
@@ -95,6 +121,7 @@ debugOn :: DebugBool -> Configuration -> Bool
debugOn db = S.member db . _debug_booleans
makeLenses ''Configuration
deriveJSON defaultOptions ''NumShadowCasters
deriveJSON defaultOptions ''ResFactor
deriveJSON defaultOptions ''ObjectShadows
deriveJSON defaultOptions ''RoomClipping
+1
View File
@@ -186,6 +186,7 @@ graphicsMenuOptions =
, makeBoolOption graphics_wall_textured "WALL TEXTURES"
, makeEnumOption graphics_object_shadows "OBJECT SHADOWS" id
, makeBoolOption graphics_cloud_shadows "CLOUD SHADOWS"
, makeEnumOption graphics_num_shadow_casters "SHADOW CASTERS" id
]
gameOverMenu :: Universe -> ScreenLayer
+7 -1
View File
@@ -11,8 +11,9 @@ makeBoolOption lns t =
(\u -> MODStringOption t (show (u ^# uvConfig . lns)))
makeEnumOption lns str sideeff =
Toggle
Toggle2
(\u -> sideeff (u & uvConfig . lns #%~ cycleEnum))
(\u -> sideeff (u & uvConfig . lns #%~ cycleDownEnum))
(\u -> MODStringOption str (show (u ^# uvConfig . lns)))
makeSubmenuOption submenu t = Toggle (pushScreen submenu) (const t)
@@ -21,3 +22,8 @@ cycleEnum :: (Eq a, Enum a, Bounded a) => a -> a
cycleEnum x
| x == maxBound = minBound
| otherwise = succ x
cycleDownEnum :: (Eq a, Enum a, Bounded a) => a -> a
cycleDownEnum x
| x == minBound = maxBound
| otherwise = pred x
+5 -5
View File
@@ -21,7 +21,7 @@ import Graphics.GL.Core43
import Graphics.Rendering.OpenGL hiding (color, rotate, scale, translate)
import MatrixHelper
import Render
import qualified SDL
--import qualified SDL
import Shader
import Shader.Bind
import Shader.Data
@@ -29,9 +29,9 @@ import Shader.ExtraPrimitive
import Shader.Parameters
import Shader.Poke
doDrawing :: RenderData -> Universe -> IO Word32
doDrawing :: RenderData -> Universe -> IO ()
doDrawing pdata u = do
sTicks <- SDL.ticks
-- sTicks <- SDL.ticks
let w = _uvWorld u
cfig = _uvConfig u
rot = w ^. cWorld . camPos . camRot
@@ -293,8 +293,8 @@ doDrawing pdata u = do
renderLayer FixedCoordLayer shadV layerCounts
renderFoldable shadV $ fixedCoordPictures u
depthMask $= Enabled
eTicks <- SDL.ticks
return (eTicks - sTicks)
-- eTicks <- SDL.ticks
-- return (eTicks - sTicks)
--------------------------------------------------------------------------------
-- note: currently assume there is only one UBO, we only bind it once at setup
+4 -1
View File
@@ -2,6 +2,7 @@ module Dodge.Render.Lights (
lightsToRender,
) where
import Data.List (sortOn)
import Data.Maybe
import Dodge.Data.LWorld
import Dodge.Data.CamPos
@@ -11,7 +12,9 @@ import qualified IntMapHelp as IM
import Control.Lens
lightsToRender :: Configuration -> CamPos -> LWorld -> [(Point3, Float, Point3)]
lightsToRender cfig campos w =
{-# INLINE lightsToRender #-}
lightsToRender cfig campos w = take (fromEnum $ cfig ^. graphics_num_shadow_casters) $
sortOn (\(_,x,_) -> negate x) $
mapMaybe getLS (IM.elems $ w ^. lightSources)
++ mapMaybe getTLS (w ^. tempLightSources)
where
+7 -1
View File
@@ -1,5 +1,7 @@
module Dodge.TestString where
import Dodge.Render.ShapePicture
import Dodge.Render.Lights
import Data.Aeson (ToJSON)
import Data.ByteString.Lazy.Char8 (unpack)
import qualified Data.Aeson.Encode.Pretty as AEP
@@ -10,7 +12,11 @@ import Dodge.Data.Universe
--import qualified Data.Map.Strict as M
--import qualified IntMapHelp as IM
testStringInit :: Universe -> [String]
testStringInit u = [show $ u ^? uvWorld . hud . hudElement . diSections . sssExtra . sssSelPos . _Just]
testStringInit u = [show $ length $ lightsToRender (u ^. uvConfig) (u ^. uvWorld . cWorld . camPos)
(u ^. uvWorld . cWorld . lWorld)
, show $ length $ fst $ worldSPic (u ^. uvConfig) (u ^. uvWorld)
, show $ length $ snd $ worldSPic (u ^. uvConfig) (u ^. uvWorld) ]
--[show $ u ^? uvWorld . hud . hudElement . diSections . sssExtra . sssSelPos . _Just]
-- [show $ fmap IM.keys $ u ^? uvWorld . hud . hudElement . subInventory . ciSections . sssSections]
getPretty :: ToJSON a => a -> [String]