module Game.LambdaHack.Client.UI.Content.Screen
( ScreenContent(..), makeData
#ifdef EXPOSE_INTERNAL
, validateSingle
#endif
) where
import Prelude ()
import Game.LambdaHack.Core.Prelude
import qualified Data.EnumMap.Strict as EM
import qualified Data.Text as T
import Game.LambdaHack.Definition.Defs
data ScreenContent = ScreenContent
{ rwidth :: X
, rheight :: Y
, rmainMenuArt :: Text
, rintroScreen :: [String]
, rmoveKeysScreen :: [String]
, rapplyVerbMap :: EM.EnumMap Char T.Text
}
validateSingle :: ScreenContent -> [Text]
validateSingle ScreenContent{rmainMenuArt} =
let ts = T.lines rmainMenuArt
tsNot80 = filter ((/= 80) . T.length) ts
in case tsNot80 of
[] -> [ "rmainMenuArt doesn't have at least 24 lines, but "
<> tshow (length ts)
| length ts < 24]
tNot80 : _ ->
["rmainMenuArt has a line with length other than 80:" <> tNot80]
makeData :: ScreenContent -> ScreenContent
makeData sc =
let singleOffenders = validateSingle sc
in assert (null singleOffenders
`blame` "Screen Content" ++ ": some content items not valid"
`swith` singleOffenders)
sc