module Game.LambdaHack.Content.CaveKind
( CaveKind(..), cvalidate
) where
import qualified Data.List as L
import Data.Text (Text)
import qualified Data.Text as T
import Game.LambdaHack.Common.Misc
import Game.LambdaHack.Common.PointXY
import Game.LambdaHack.Common.Random
data CaveKind = CaveKind
{ csymbol :: !Char
, cname :: !Text
, cfreq :: !Freqs
, cxsize :: !X
, cysize :: !Y
, cgrid :: !RollDiceXY
, cminPlaceSize :: !RollDiceXY
, cmaxPlaceSize :: !RollDiceXY
, cdarkChance :: !RollDeep
, cnightChance :: !RollDeep
, cauxConnects :: !Rational
, cmaxVoid :: !Rational
, cminStairDist :: !Int
, cdoorChance :: !Chance
, copenChance :: !Chance
, chidden :: !Int
, citemNum :: !RollDice
, citemFreq :: ![(Int, Text)]
, cdefTile :: !Text
, cdarkCorTile :: !Text
, clitCorTile :: !Text
, cfillerTile :: !Text
, cdarkLegendTile :: !Text
, clitLegendTile :: !Text
}
deriving Show
cvalidate :: [CaveKind] -> [CaveKind]
cvalidate = L.filter (\ CaveKind{ cgrid
, cminPlaceSize
, cmaxPlaceSize
, ..
} ->
let (maxGridX, maxGridY) = maxDiceXY cgrid
(minMinSizeX, minMinSizeY) = minDiceXY cminPlaceSize
(maxMinSizeX, maxMinSizeY) = maxDiceXY cminPlaceSize
(minMaxSizeX, minMaxSizeY) = minDiceXY cmaxPlaceSize
xborder = if maxGridX == 1 then 3 else 1
yborder = if maxGridX == 1 then 3 else 1
in T.length cname > 25
|| cxsize < 7
|| cysize < 7
|| minMinSizeX < 1
|| minMinSizeY < 1
|| minMaxSizeX < maxMinSizeX
|| minMaxSizeY < maxMinSizeY
|| maxGridX * (maxMinSizeX + xborder) >= cxsize
|| maxGridY * (maxMinSizeY + yborder) >= cysize)