{-# LANGUAGE OverloadedStrings #-} module Map.Map where import System.Random import Data.Array.IArray import Data.Text as T import Prelude as P data TileType = Grass | Sand | Water | Mountain deriving (Show, Eq) type MapEntry = ( Float, -- ^ Height TileType ) type PlayMap = Array (Int, Int) MapEntry -- if writing in ASCII-Format transpose so i,j -> y,x -- row-minor -> row-major testMapTemplate :: [Text] testMapTemplate = T.transpose [ "~~~~~~~~~~~~~~~~~~~~", "~~SSSSSSSSSSSSSS~~~~", "~SSGGGGGGGSGSGGS~~~~", "~SSGGGGGGMSGSGMS~~~~", "~SGGGGGGMMMGGGS~~~S~", "~SGGGMGMMMMMGGS~~~SS", "~GGGGGGGGGGGGGGS~~~~", "~SGGGGGGGGGGGGGS~~~~", "~~SSSSGGGSSSSS~~~~~~", "~~~~~SGGGGS~~~~~~~~~", "~~~~SSGGGGSS~~~~~~~~", "~~SSSGGGGGGSSSSS~~~~", "~SSGSGSGGGSGSGGS~~~~", "~SSGSGSGGMSGSGMS~~~~", "~SGGMMMMGGGGGGS~~~~~", "~SGMMMMMGGGGSSS~~~~~", "~GGMMMMMGGGSSSSS~~~~", "~SGGGGGGGSSSSSSS~~~~", "~~SSSSSSSSSSSS~~~~~~", "~~~~~~~~~~~~~~~~~~~~" ] testmap :: IO PlayMap testmap = do g <- getStdGen rawMap <- return $ parseTemplate (randoms g) (T.concat testMapTemplate) return $ listArray ((0,0),(19,19)) rawMap parseTemplate :: [Int] -> Text -> [MapEntry] parseTemplate (r:rs) t = (case T.head t of '~' -> (0, Water) 'S' -> (0, Sand) 'G' -> (fromIntegral (r `mod` 3)/2.0,Grass) 'M' -> (fromIntegral (r `mod` 3 + 2)/2.0, Mountain) _ -> error "invalid template format for map" ):parseTemplate rs (T.tail t) parseTemplate [] _ = error "out of randoms.."