module Game.LambdaHack.Content.CaveKind
( CaveKind(..), validateCaveKind
) where
import Data.Text (Text)
import qualified Data.Text as T
import qualified Game.LambdaHack.Common.Dice as Dice
import Game.LambdaHack.Common.Misc
import Game.LambdaHack.Common.Point
import Game.LambdaHack.Common.Random
data CaveKind = CaveKind
{ csymbol :: !Char
, cname :: !Text
, cfreq :: !Freqs
, cxsize :: !X
, cysize :: !Y
, cgrid :: !Dice.DiceXY
, cminPlaceSize :: !Dice.DiceXY
, cmaxPlaceSize :: !Dice.DiceXY
, cdarkChance :: !Dice.Dice
, cnightChance :: !Dice.Dice
, cauxConnects :: !Rational
, cmaxVoid :: !Rational
, cminStairDist :: !Int
, cdoorChance :: !Chance
, copenChance :: !Chance
, chidden :: !Int
, cactorFreq :: !Freqs
, citemNum :: !Dice.Dice
, citemFreq :: !Freqs
, cplaceFreq :: !Freqs
, cpassable :: !Bool
, cdefTile :: !Text
, cdarkCorTile :: !Text
, clitCorTile :: !Text
, cfillerTile :: !Text
, couterFenceTile :: !Text
, clegendDarkTile :: !Text
, clegendLitTile :: !Text
}
deriving Show
validateCaveKind :: [CaveKind] -> [CaveKind]
validateCaveKind = filter (\CaveKind{..} ->
let (maxGridX, maxGridY) = Dice.maxDiceXY cgrid
(minMinSizeX, minMinSizeY) = Dice.minDiceXY cminPlaceSize
(maxMinSizeX, maxMinSizeY) = Dice.maxDiceXY cminPlaceSize
(minMaxSizeX, minMaxSizeY) = Dice.minDiceXY cmaxPlaceSize
xborder = if maxGridX == 1 || couterFenceTile /= "basic outer fence"
then 2
else 0
yborder = if maxGridY == 1 || couterFenceTile /= "basic outer fence"
then 2
else 0
in T.length cname > 25
|| cxsize < 7
|| cysize < 7
|| minMinSizeX < 1
|| minMinSizeY < 1
|| minMaxSizeX < maxMinSizeX
|| minMaxSizeY < maxMinSizeY
|| maxGridX * (maxMinSizeX + 1) + xborder >= cxsize
|| maxGridY * (maxMinSizeY + 1) + yborder >= cysize)