added verification for renderer
This commit is contained in:
		
							
								
								
									
										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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user