Skip to content
Snippets Groups Projects
Select Git revision
  • 24a0763b4b0a87b5abd488ebca67f4c5ff9b966d
  • main default protected
  • 75389691-a67c-422a-91e9-aa58bfb5-main-patch-32205
  • test-pipe
  • extended-scripts
  • structured-badges
  • guix-pipeline
  • cabal-pipeline
8 results

WriteRepo.hs

Blame
  • TiledAbstract.hs 2.08 KiB
    {-# LANGUAGE OverloadedStrings #-}
    
    module TiledAbstract where
    
    import           Data.Maybe  (fromMaybe)
    import           Data.Proxy  (Proxy)
    import           Data.Text   (Text)
    import qualified Data.Vector as V
    import           Tiled       (Layer (..), Property (..), PropertyValue (..),
                                  Tile (..), Tiledmap (..), Tileset (..), Object(..))
    
    class HasProperties a where
      getProperties :: a -> [Property]
      adjustProperties :: ([Property] -> Maybe [Property]) -> a -> a
    
    instance HasProperties Layer where
      getProperties = fromMaybe mempty . layerProperties
      adjustProperties f layer = layer
        { layerProperties = f (getProperties layer) }
    
    instance HasProperties Tileset where
      getProperties = fromMaybe mempty . tilesetProperties
      adjustProperties f tileset = tileset
        { tilesetProperties = f (getProperties tileset) }
    
    instance HasProperties Tile where
      getProperties = V.toList . fromMaybe mempty . tileProperties
      adjustProperties f tile = tile
        { tileProperties = (fmap V.fromList . f) (getProperties tile) }
    
    instance HasProperties Object where
      getProperties = V.toList . fromMaybe mempty . objectProperties
      adjustProperties f obj = obj
        { objectProperties = (fmap V.fromList . f) (getProperties obj) }
    
    instance HasProperties Tiledmap where
      getProperties = fromMaybe mempty . tiledmapProperties
      adjustProperties f tiledmap = tiledmap
        { tiledmapProperties = f (getProperties tiledmap) }
    
    class HasTypeName a where
      typeName :: Proxy a -> Text
    instance HasTypeName Layer where
      typeName _ = "layer"
    instance HasTypeName Tileset where
      typeName _ = "tileset"
    instance HasTypeName Property where
      typeName _ = "property"
    
    class HasName a where
      getName :: a -> Text
    instance HasName Layer where
      getName = layerName
    instance HasName Tileset where
      getName = tilesetName
    instance HasName Property where
      getName (Property n _) = n
    
    class IsProperty a where
      asProperty :: a -> PropertyValue
    instance IsProperty PropertyValue where
      asProperty = id
      {-# INLINE asProperty #-}
    instance IsProperty Text where
      asProperty = StrProp
      {-# INLINE asProperty #-}