added verification for renderer
This commit is contained in:
parent
7a0f938201
commit
0bac190174
74
src/Main.hs
74
src/Main.hs
@ -2,14 +2,82 @@
|
|||||||
module Main where
|
module Main where
|
||||||
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Data.ByteString as B
|
import qualified Data.ByteString as B
|
||||||
import Data.ByteString.Char8 as B8
|
import qualified Data.ByteString.Char8 as B8
|
||||||
|
|
||||||
import Data.Attoparsec
|
import Data.Attoparsec
|
||||||
|
|
||||||
import Scene.Parser
|
import Scene.Parser
|
||||||
|
import Scene.Types
|
||||||
|
|
||||||
|
findCamera :: [ObjectParser] -> Either String Camera
|
||||||
|
findCamera [] = Left "No camera found"
|
||||||
|
findCamera (a:as) = case a of
|
||||||
|
OpC c -> return c
|
||||||
|
_ -> findCamera as
|
||||||
|
|
||||||
|
findDepth :: [ObjectParser] -> Either String RecursionDepth
|
||||||
|
findDepth [] = Left "No recursion depth defined"
|
||||||
|
findDepth (a:as) = case a of
|
||||||
|
OpR r -> return r
|
||||||
|
_ -> findDepth as
|
||||||
|
|
||||||
|
findAmbience :: [ObjectParser] -> Either String Ambience
|
||||||
|
findAmbience [] = Left "No ambience light defined"
|
||||||
|
findAmbience (a:as) = case a of
|
||||||
|
OpA am -> return am
|
||||||
|
_ -> findAmbience as
|
||||||
|
|
||||||
|
findBackground :: [ObjectParser] -> Either String Background
|
||||||
|
findBackground [] = Left "No background color defined"
|
||||||
|
findBackground (a:as) = case a of
|
||||||
|
OpB b -> return b
|
||||||
|
_ -> findBackground as
|
||||||
|
|
||||||
|
filterLights :: [ObjectParser] -> [Light]
|
||||||
|
filterLights [] = []
|
||||||
|
filterLights (a:as) = case a of
|
||||||
|
OpL l -> l:filterLights as
|
||||||
|
_ -> filterLights as
|
||||||
|
|
||||||
|
filterObjects :: [ObjectParser] -> [Collidable]
|
||||||
|
filterObjects [] = []
|
||||||
|
filterObjects (a:as) = case a of
|
||||||
|
OpS s -> S s:filterObjects as
|
||||||
|
OpM m -> M m:filterObjects as
|
||||||
|
OpP p -> P p:filterObjects as
|
||||||
|
_ -> filterObjects as
|
||||||
|
|
||||||
|
validateScene :: [ObjectParser] -> Either String Scene
|
||||||
|
validateScene obs = do
|
||||||
|
cam <- findCamera obs
|
||||||
|
depth <- findDepth obs
|
||||||
|
amb <- findAmbience obs
|
||||||
|
back <- findBackground obs
|
||||||
|
lights <- return $ filterLights obs
|
||||||
|
objects <- return $ filterObjects obs
|
||||||
|
return $ Scene
|
||||||
|
{ ambientLight = amb
|
||||||
|
, sceneCamera = cam
|
||||||
|
, sceneRecursions = depth
|
||||||
|
, sceneBackground = back
|
||||||
|
, sceneLights = lights
|
||||||
|
, sceneObjects = objects
|
||||||
|
}
|
||||||
|
|
||||||
|
render :: Scene -> IO ()
|
||||||
|
render s = putStrLn "rendering currently not implemented"
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
f <- B.readFile "scenes/test.sce"
|
f <- B.readFile "scenes/test.sce"
|
||||||
print $ parseScene f
|
rawScene <- return $ parseScene f
|
||||||
|
case rawScene of
|
||||||
|
Left error -> putStrLn $ "error Parsing: " ++ error
|
||||||
|
Right raw -> do
|
||||||
|
scene <- return $ validateScene raw
|
||||||
|
case scene of
|
||||||
|
Left error -> putStrLn $ "Error: " ++ error
|
||||||
|
Right s -> do
|
||||||
|
print s
|
||||||
|
render s
|
||||||
|
Loading…
Reference in New Issue
Block a user