From c73e8af72a82b488e330391bb3cc831f69fad678 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 23 Feb 2023 23:10:00 +0000 Subject: [PATCH] Commit before attempt to remove geometry shaders from shadow extrusion --- data/texture/charMap.png | Bin 3438 -> 3438 bytes shader/lighting/cap.geom | 11 +++-------- shader/lighting/lineShadow.geom | 5 +++-- src/Dodge/Base/Collide.hs | 2 +- src/Dodge/Block.hs | 3 ++- src/Dodge/Creature/ChaseCrit.hs | 2 +- src/Dodge/Data/CWorld.hs | 2 ++ src/Dodge/Data/LWorld.hs | 2 -- src/Dodge/Default/World.hs | 3 ++- src/Dodge/Layout.hs | 5 ++--- src/Dodge/Path.hs | 10 +++++----- src/Dodge/Placement/PlaceSpot/TriggerDoor.hs | 4 ++-- src/Dodge/Render/ShapePicture.hs | 2 +- src/Dodge/Save.hs | 6 +++--- src/Shader/Poke.hs | 2 +- 15 files changed, 28 insertions(+), 31 deletions(-) diff --git a/data/texture/charMap.png b/data/texture/charMap.png index 660d71aee024ca23a31f954dd47b11a43e9f2e8b..115dafb7c1f36be85356de646b5aad5f1920803f 100644 GIT binary patch delta 2271 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 diff --git a/shader/lighting/cap.geom b/shader/lighting/cap.geom index 8ad0b4ff7..63d4c521c 100644 --- a/shader/lighting/cap.geom +++ b/shader/lighting/cap.geom @@ -18,24 +18,19 @@ void main() vec4 p0 = gl_in[0].gl_Position ; vec4 p1 = gl_in[1].gl_Position ; vec4 p2 = gl_in[2].gl_Position ; - if ( //dot( p0.xyz - vec3 (0,0,1), cross( p0.xyz - p1.xyz, p1.xyz - p2.xyz)) < 0 - // && + if ( //if Light Source is below all vertices, draw cap + // TODO think about when LS is beside the object ( p0.z - lightPos.z > 0 ) && ( p1.z - lightPos.z > 0 ) && ( p2.z - lightPos.z > 0 ) ) { - // front cap + // the front cap vec4 v1 = vec4 (0,0,1,0) ; gl_Position = theMat * projNear(p0); EmitVertex(); gl_Position = theMat * projNear(p1); EmitVertex(); gl_Position = theMat * projNear(p2); EmitVertex(); EndPrimitive(); - // if light points downwards onto surface, draw back cap too - if (dot ( p0.xyz - lightPos, vec3 ( 0,0,1) ) > 0) - { - } - else {} } else {} } diff --git a/shader/lighting/lineShadow.geom b/shader/lighting/lineShadow.geom index fd49b139b..5ad1eeab2 100644 --- a/shader/lighting/lineShadow.geom +++ b/shader/lighting/lineShadow.geom @@ -3,7 +3,8 @@ layout (lines_adjacency) in; layout (triangle_strip, max_vertices = 4) out; layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; uniform vec3 lightPos; -vec4 shift (vec4 p) { return (vec4 (p.xyz + (100000*(p.xyz-lightPos)), 1));} +//vec4 shift (vec4 p) { return (vec4 (p.xyz + (100000*(p.xyz-lightPos)), 1));} +vec4 shift (vec4 p) { return (vec4 (p.xyz + (1000*(p.xyz-lightPos)), 1));} // copied from lighting/cap.geom, should not be changed on its own vec4 projNear (vec4 pos) { @@ -34,7 +35,7 @@ void main() //vec3 n2 = n0 + n1; // assumes the summands are normalized vec3 lightDir = p0.xyz - lightPos.xyz; // first test if the edge is part of the silhouette - // that is, if the normals of the faces connected by the edge point in + // that is, if the normals of the faces connected by the edge point are in // "different directions" wrt the light direction if ( dot(n0 , lightDir) * dot(n1 , lightDir) <= 0 ) // using <= rather than < seems to get rid of overlapping shadow diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index 66b887ac8..49a5a0ea1 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -130,7 +130,7 @@ visibleWalls sp ep = allVisibleWalls :: World -> [(Point2, Wall)] {-# INLINE allVisibleWalls #-} -allVisibleWalls w = concatMap (flip (visibleWalls vPos) w . (+.+ vPos)) $ nRays 20 +allVisibleWalls w = concatMap (flip (visibleWalls vPos) w . (+.+ vPos)) $ nRays 15 where vPos = w ^. cWorld . camPos . camViewFrom diff --git a/src/Dodge/Block.hs b/src/Dodge/Block.hs index 048cfd98c..d49c7ce48 100644 --- a/src/Dodge/Block.hs +++ b/src/Dodge/Block.hs @@ -73,7 +73,8 @@ maybeClearPath :: World -> PathEdgeNodes -> World maybeClearPath w (PathEdgeNodes x y pe) | not . null $ overlapSegWalls (_peStart pe) (_peEnd pe) $ wlsNearSeg (_peStart pe) (_peEnd pe) w = w - | otherwise = w & cWorld . lWorld . pathGraph %~ FGL.insEdge (x, y, pe & peObstacles .~ mempty) . FGL.delEdge (x, y) + | otherwise = w + & cWorld . pathGraph %~ FGL.insEdge (x, y, pe & peObstacles .~ mempty) . FGL.delEdge (x, y) destroyDoor :: Door -> World -> World destroyDoor dr w = diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index 6afc107a9..f8ea54893 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -54,4 +54,4 @@ chaseCrit = 0 , _crMvType = defaultChaseMvType } - & crType . humanoidAI .~ ChaseAI +-- & crType . humanoidAI .~ ChaseAI diff --git a/src/Dodge/Data/CWorld.hs b/src/Dodge/Data/CWorld.hs index a14ce5880..529d9429d 100644 --- a/src/Dodge/Data/CWorld.hs +++ b/src/Dodge/Data/CWorld.hs @@ -19,6 +19,7 @@ import Dodge.GameRoom import Geometry.ConvexPoly import Dodge.Data.CamPos import qualified Data.IntSet as IS +import Data.Graph.Inductive data CWorld = CWorld { _lWorld :: LWorld @@ -29,6 +30,7 @@ data CWorld = CWorld , _timeFlow :: TimeFlowStatus , _seenWalls :: IS.IntSet , _floorTiles :: [(Point3, Point3)] + , _pathGraph :: Gr Point2 PathEdge } data TimeFlowStatus diff --git a/src/Dodge/Data/LWorld.hs b/src/Dodge/Data/LWorld.hs index 71324355e..bd11227bc 100644 --- a/src/Dodge/Data/LWorld.hs +++ b/src/Dodge/Data/LWorld.hs @@ -50,7 +50,6 @@ module Dodge.Data.LWorld ( import Control.Lens import Data.Aeson import Data.Aeson.TH -import Data.Graph.Inductive import Dodge.Data.Beam import Dodge.Data.Block import Dodge.Data.Bounds @@ -138,7 +137,6 @@ data LWorld = LWorld , _decorations :: IM.IntMap Picture , _foregroundShapes :: IM.IntMap ForegroundShape , _corpses :: IM.IntMap Corpse - , _pathGraph :: Gr Point2 PathEdge , _lightSources :: IM.IntMap LightSource , _tempLightSources :: [TempLightSource] , _seenLocations :: IM.IntMap (WdP2, String) diff --git a/src/Dodge/Default/World.hs b/src/Dodge/Default/World.hs index 49e8876bf..7ee9fe939 100644 --- a/src/Dodge/Default/World.hs +++ b/src/Dodge/Default/World.hs @@ -84,6 +84,8 @@ defaultCWorld = , _timeFlow = NormalTimeFlow , _seenWalls = mempty , _floorTiles = mempty + --, _pathGraph = mempty + , _pathGraph = Data.Graph.Inductive.Graph.empty } defaultLWorld :: LWorld @@ -130,7 +132,6 @@ defaultLWorld = , _buttons = IM.empty , _corpses = IM.empty , _decorations = IM.empty - , _pathGraph = Data.Graph.Inductive.Graph.empty , _lightSources = IM.empty , _tempLightSources = [] , _seenLocations = diff --git a/src/Dodge/Layout.hs b/src/Dodge/Layout.hs index f27791d34..650e4ea07 100644 --- a/src/Dodge/Layout.hs +++ b/src/Dodge/Layout.hs @@ -3,6 +3,7 @@ module Dodge.Layout ( generateLevelFromRoomList, ) where +import Dodge.Path.Translate import qualified Control.Foldl as L import Control.Lens import Data.Foldable @@ -44,7 +45,7 @@ generateLevelFromRoomList gr' w = . worldToGenWorld rs' $ w & cWorld . lWorld . walls .~ wallsFromRooms rs & cWorld . cwGen . cwgGameRooms .~ gameRoomsFromRooms (IM.elems rs') - & cWorld . lWorld . pathGraph .~ path + & cWorld . pathGraph .~ path & pnZoning .~ foldl' (flip zonePn) mempty (labNodes path) & peZoning .~ foldl' (flip zonePe) mempty (map fromEdgeTuple $ labEdges path) where @@ -54,8 +55,6 @@ generateLevelFromRoomList gr' w = rs = map doRoomShift $ IM.elems rs' rs' = mapM shuffleRoomPos gr' & evalState $ _randGen w -fromEdgeTuple :: (Int, Int, PathEdge) -> PathEdgeNodes -fromEdgeTuple (a, b, pe) = PathEdgeNodes a b pe randomCompass :: World -> World randomCompass w = w & cWorld . camPos . camRot .~ (takeOne [0, 0.5 * pi, pi, 1.5 * pi] & evalState $ _randGen w) diff --git a/src/Dodge/Path.hs b/src/Dodge/Path.hs index 4e59b55cd..5bd8e49ed 100644 --- a/src/Dodge/Path.hs +++ b/src/Dodge/Path.hs @@ -30,14 +30,14 @@ import Data.Bifunctor getNodePos :: Int -> World -> Maybe Point2 --getNodePos i w = _pathGraph (_cWorld w) `lab` i -getNodePos i w = (w ^. cWorld . lWorld . pathGraph) `lab` i +getNodePos i w = (w ^. cWorld . pathGraph) `lab` i makePathBetween :: Point2 -> Point2 -> World -> Maybe [Int] makePathBetween a b w = do -- join $ sp <$> a' <*> b' <*> return (_pathGraph w) na <- walkableNodeNear w a nb <- walkableNodeNear w b - sp na nb (second _peDist (efilter (not . pathEdgeObstructed . (^. _3)) $ w ^. cWorld . lWorld . pathGraph)) + sp na nb (second _peDist (efilter (not . pathEdgeObstructed . (^. _3)) $ w ^. cWorld . pathGraph)) --_pathGraph (_cWorld w))) pathEdgeObstructed :: PathEdge -> Bool @@ -53,13 +53,13 @@ walkableNodeNear w p = fmap fst . find (flip (isWalkable p) w . snd) $ nodesNear makePathBetweenPs :: Point2 -> Point2 -> World -> Maybe [Point2] --makePathBetweenPs a b w = mapMaybe (lab $ _pathGraph (_cWorld w)) <$> makePathBetween a b w -makePathBetweenPs a b w = mapMaybe (lab $ w ^. cWorld . lWorld . pathGraph) <$> makePathBetween a b w +makePathBetweenPs a b w = mapMaybe (lab $ w ^. cWorld . pathGraph) <$> makePathBetween a b w bfsNodePoints :: Int -> World -> [Point2] bfsNodePoints n w = mapMaybe (lab g) $ bfs n g where --g = _pathGraph (_cWorld w) - g = w ^. cWorld . lWorld . pathGraph + g = w ^. cWorld . pathGraph pointTowardsImpulse :: Point2 -> Point2 -> World -> Maybe Point2 pointTowardsImpulse a b w = (find (flip (isWalkable a) w) . reverse) =<< makePathBetweenPs a b w @@ -138,7 +138,7 @@ addEdges nodemap gr = foldl' f (mempty, gr) obstructPathsCrossing :: EdgeObstacle -> Point2 -> Point2 -> World -> (World, Set PathEdgeNodes) obstructPathsCrossing obstacletype sp' ep w = - ( w & cWorld . lWorld . pathGraph %~ updateedges + ( w & cWorld . pathGraph %~ updateedges , es ) where diff --git a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs index ba39a8483..4c498e58b 100644 --- a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs +++ b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs @@ -71,9 +71,9 @@ maybeClearDoorPaths eo es w = foldl' (maybeClearDoorPath eo) w es maybeClearDoorPath :: EdgeObstacle -> World -> PathEdgeNodes -> World maybeClearDoorPath eo w (PathEdgeNodes x y pe) | not . null $ overlapSegWalls (_peStart pe) (_peEnd pe) $ wlsNearSeg (_peStart pe) (_peEnd pe) w = - w & cWorld . lWorld . pathGraph %~ FGL.insEdge (x, y, pe & peObstacles . at eo ?~ ()) . FGL.delEdge (x, y) + w & cWorld . pathGraph %~ FGL.insEdge (x, y, pe & peObstacles . at eo ?~ ()) . FGL.delEdge (x, y) | otherwise = - w & cWorld . lWorld . pathGraph %~ FGL.insEdge (x, y, pe & peObstacles . at eo .~ Nothing) . FGL.delEdge (x, y) + w & cWorld . pathGraph %~ FGL.insEdge (x, y, pe & peObstacles . at eo .~ Nothing) . FGL.delEdge (x, y) plSlideDoor :: Door -> diff --git a/src/Dodge/Render/ShapePicture.hs b/src/Dodge/Render/ShapePicture.hs index bfed70fbe..e5c8d0824 100644 --- a/src/Dodge/Render/ShapePicture.hs +++ b/src/Dodge/Render/ShapePicture.hs @@ -463,7 +463,7 @@ drawPathing cfig w = <> foldMap dispInc (graphToIncidence gr) where dispInc (p, n) = setDepth 2 . uncurryV translate p . scale 0.1 0.1 $ text $ show n - gr = w ^. cWorld . lWorld . pathGraph + gr = w ^. cWorld . pathGraph crDisplayInfo :: Configuration -> CamPos -> Creature -> Maybe (Point2, [String]) crDisplayInfo cfig cam cr diff --git a/src/Dodge/Save.hs b/src/Dodge/Save.hs index a6384a5d6..32ae00ad2 100644 --- a/src/Dodge/Save.hs +++ b/src/Dodge/Save.hs @@ -8,6 +8,8 @@ module Dodge.Save ( reloadLevelStart, ) where + +import Dodge.Path.Translate import Data.Graph.Inductive (labEdges, labNodes) import Dodge.Zoning.Pathing import Data.Foldable @@ -53,11 +55,9 @@ readSaveSlot ss = do & uvScreenLayers .~ [] else putStrLn "loadSaveSlot failed to find saved file" >> return removescreenlayers where - path uv = uv ^. uvWorld . cWorld . lWorld . pathGraph + path uv = uv ^. uvWorld . cWorld . pathGraph removescreenlayers = Just . (uvScreenLayers .~ []) -fromEdgeTuple :: (Int, Int, PathEdge) -> PathEdgeNodes -fromEdgeTuple (a, b, pe) = PathEdgeNodes a b pe saveSlotPath :: SaveSlot -> String saveSlotPath (SaveSlotNum i) = "saveSlot/" ++ show i diff --git a/src/Shader/Poke.hs b/src/Shader/Poke.hs index ff5979d8c..e10886f2d 100644 --- a/src/Shader/Poke.hs +++ b/src/Shader/Poke.hs @@ -165,7 +165,7 @@ pokeJustV :: Ptr Float -> Int -> ShapeV -> IO Int ---{-# INLINE pokeJustV #-} +{-# INLINE pokeJustV #-} pokeJustV ptr nv sh = do -- pokeArray (advancePtr ptr (off 0)) [a,b,c,d,e,f,g] pokeElemOff ptr (off 0) a