From a4476a3e6d44e8e2ae054a8aec68836b2e813c60 Mon Sep 17 00:00:00 2001 From: stuebinm Date: Mon, 20 Sep 2021 02:17:13 +0200 Subject: lint embedded tilesets --- lib/Properties.hs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'lib/Properties.hs') diff --git a/lib/Properties.hs b/lib/Properties.hs index 4dada7d..395bc87 100644 --- a/lib/Properties.hs +++ b/lib/Properties.hs @@ -9,7 +9,7 @@ module Properties (checkLayerProperty, checkMap) where import Control.Monad (unless, when) import Data.Text (Text, isPrefixOf) import Tiled2 (Layer (..), Property (..), PropertyValue (..), - Tiledmap (..)) + Tiledmap (..), Tileset (..)) import Util (layerIsEmpty, prettyprint) import LintWriter (LintWriter, complain, dependsOn, forbid, info, @@ -131,6 +131,7 @@ checkMap :: Tiledmap -> LintWriter () checkMap tiledmap = do -- check properties mapM_ (checkMapProperty tiledmap) (tiledmapProperties tiledmap) + mapM_ checkTileset (tiledmapTilesets tiledmap) -- some layers should exist hasLayerNamed "start" (const True) "The map must have one layer named \"start\"" @@ -151,7 +152,17 @@ checkMap tiledmap = do unless (any pred layers) $ complain err - +-- | check an embedded tile set. +-- +-- Important to collect dependency files +checkTileset :: Tileset -> LintWriter () +checkTileset tileset = do + -- TODO: can tilesets be non-local dependencies? + dependsOn $ Local (tilesetImage tileset) + + -- reject tilesets unsuitable for workadventure + unless (tilesetTilewidth tileset == 32 && tilesetTileheight tileset == 32) + $ complain $ "Tileset " <> tilesetName tileset <> " must have tile size 32 by 32" -- | does this layer have the given property? containsProperty :: [Property] -> Text -> Bool -- cgit v1.2.3