aboutsummaryrefslogtreecommitdiff
path: root/Final.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Final.hs')
-rw-r--r--Final.hs34
1 files changed, 22 insertions, 12 deletions
diff --git a/Final.hs b/Final.hs
index 96c826a..cba5784 100644
--- a/Final.hs
+++ b/Final.hs
@@ -9,6 +9,7 @@ import Graphics.UI.SDL.Image as SDLImg
import Graphics.UI.SDL as SDL
import Graphics.SDL.SDLHelp
import Graphics.Glyph.Util
+import Graphics.Glyph.ExtendedGL
import Control.Monad
import Graphics.Glyph.BufferBuilder
@@ -102,11 +103,19 @@ getWaterQuads marr arr = do
let (_,(w,h)) = bounds marr
let elevationCacheIO :: IO (Map.Map Int (Int,Int,Int,Int,Int))
elevationCacheIO = do
- let tup = (max,max,max,min,min)
+ let tup = (min,max,max,min,min)
foldM (\themap (x,y) -> do
bodyID <- readArray arr (x,y)
if bodyID == 0 then return themap else do
- let elev = elevation $ marr ! (x,y) :: Int
+ let valid (x,y) = x >= 0 && x <= w && y >= 0 && y <= h
+ let neighbors (x,y) = P.filter valid $ map (zipWithT2 (+) (x,y))
+ [ (1,0),
+ (0,1), (0,-1),
+ (-1,0) ]
+ let toelev x =
+ let tile = marr ! x in
+ (tileType tile == Water) ? 1000000000000 $ elevation tile
+ let elev = minimum $ map toelev (neighbors (x,y))
let newmap = Map.insertWith (\old->
zipWithT5 (P.$) (zipWithT5 (P.$) tup old)
) bodyID (elev,x,y,x,y) themap
@@ -115,16 +124,16 @@ getWaterQuads marr arr = do
dat <- (liftM Map.toList elevationCacheIO)
return . sequence_ $ for dat $ \(_, (elev,maxx,maxy,minx,miny)) -> do
- let relev = (fromIntegral elev) / 10
- mxx = fromIntegral maxx
- mnx = fromIntegral minx
- mxy = fromIntegral maxy
- mny = fromIntegral miny
- mapM_ bVertex3 $ trianglesFromQuads
- [(mxx,relev,mxy),
- (mxx,relev,mny),
- (mnx,relev,mny),
- (mnx,relev,mxy)]
+ let mxx = fromIntegral maxx + 1
+ mnx = fromIntegral minx - 1
+ mxy = fromIntegral maxy + 1
+ mny = fromIntegral miny - 1
+ relev = fromIntegral elev / 10 in
+ mapM_ bVertex3 $ trianglesFromQuads
+ [(mxx,relev,mxy),
+ (mxx,relev,mny),
+ (mnx,relev,mny),
+ (mnx,relev,mxy)]
printArray :: Array (Int,Int) Tile -> IO ()
@@ -263,6 +272,7 @@ main = do
surface <- simpleStartup "Spectical" (640,480)
stgen <- newStdGen
stgen2 <- newStdGen
+
-- (log',file) <- loadObjFile "tree.obj"
-- mapM_ putStrLn log'