htiled 0.1.1.1 → 0.1.1.2
raw patch · 2 files changed
+38/−27 lines, 2 filesdep +splitPVP ok
version bump matches the API change (PVP)
Dependencies added: split
API changes (from Hackage documentation)
Files
- htiled.cabal +2/−2
- src/Data/Tiled/Load.hs +36/−25
htiled.cabal view
@@ -1,5 +1,5 @@ Name: htiled-Version: 0.1.1.1+Version: 0.1.1.2 Synopsis: Import from the Tiled map editor. Description: Import maps from the .tmx map format generated by Tiled, <http://www.mapeditor.org>.@@ -20,5 +20,5 @@ Exposed-Modules: Data.Tiled, Data.Tiled.Types, Data.Tiled.Load Build-depends: base ==4.*, zlib ==0.5.*, bytestring , hxt == 9.*, base64-bytestring > 1- , containers >=0.4 && <0.6, filepath+ , containers >=0.4 && <0.6, filepath, split Ghc-Options: -Wall
src/Data/Tiled/Load.hs view
@@ -1,23 +1,26 @@-{-# LANGUAGE Arrows, UnicodeSyntax, RecordWildCards #-}+{-# LANGUAGE Arrows #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE UnicodeSyntax #-} module Data.Tiled.Load (loadMapFile, loadMap) where -import Prelude hiding ((.), id)-import Control.Category ((.), id)-import Data.Bits (testBit, clearBit)-import qualified Data.ByteString.Base64 as B64-import qualified Data.ByteString.Char8 as BS+import Control.Category (id, (.))+import Data.Bits (clearBit, testBit)+import qualified Data.ByteString.Base64 as B64+import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as LBS-import Data.Char (digitToInt)-import Data.List (sort)-import Data.Map (fromDistinctAscList, Map)-import Data.Maybe (listToMaybe, fromMaybe, isNothing)-import Data.Word (Word32)+import Data.Char (digitToInt)+import Data.List (sort)+import Data.List.Split (splitOn)+import Data.Map (Map, fromDistinctAscList)+import Data.Maybe (fromMaybe, isNothing, listToMaybe)+import Data.Word (Word32)+import Prelude hiding (id, (.)) -import qualified Codec.Compression.GZip as GZip-import qualified Codec.Compression.Zlib as Zlib-import Text.XML.HXT.Core+import qualified Codec.Compression.GZip as GZip+import qualified Codec.Compression.Zlib as Zlib+import Text.XML.HXT.Core -import Data.Tiled.Types+import Data.Tiled.Types -- | Load a map from a string loadMap ∷ String → IO TiledMap@@ -116,24 +119,32 @@ dataToTiles ∷ Int → Int → String → String → String → Map (Int, Int) Tile dataToTiles w h "base64" "gzip" = toMap w h . base64 GZip.decompress dataToTiles w h "base64" "zlib" = toMap w h . base64 Zlib.decompress- dataToTiles _ _ _ _ = error "unsupported tile data format, only base64 and \- \gzip/zlib is supported at the moment."+ dataToTiles w h "csv" _ = toMap w h . csv+ dataToTiles _ _ _ _ = error "unsupported tile data format, only base64 with \+ \gzip/zlib and csv are supported at the moment." toMap w h = fromDistinctAscList . sort . filter (\(_, x) → tileGid x /= 0) . zip [(x, y) | y ← [0..h-1], x ← [0..w-1]] - base64 f = bytesToTiles . LBS.unpack . f . LBS.fromChunks+ base64 f = wordsToTiles . bytesToWords . LBS.unpack . f . LBS.fromChunks . (:[]) . B64.decodeLenient . BS.pack - bytesToTiles (a:b:c:d:xs) = Tile { .. } : bytesToTiles xs+ csv = wordsToTiles . map (read ∷ String → Word32)+ . splitOn ","+ . filter (`elem` (',':['0' .. '9']))++ bytesToWords [] = []+ bytesToWords (a:b:c:d:xs) = n : bytesToWords xs where n = f a + f b * 256 + f c * 65536 + f d * 16777216 f = fromIntegral . fromEnum ∷ Char → Word32- tileGid = n `clearBit` 30 `clearBit` 31 `clearBit` 29- tileIsVFlipped = n `testBit` 30- tileIsHFlipped = n `testBit` 31- tileIsDiagFlipped = n `testBit` 29- bytesToTiles [] = []- bytesToTiles _ = error "number of bytes not a multiple of 4."+ bytesToWords _ = error "number of bytes not a multiple of 4."++ wordsToTiles [] = []+ wordsToTiles (w:ws) = Tile { .. } : wordsToTiles ws+ where tileGid = w `clearBit` 30 `clearBit` 31 `clearBit` 29+ tileIsVFlipped = w `testBit` 30+ tileIsHFlipped = w `testBit` 31+ tileIsDiagFlipped = w `testBit` 29 common = proc (l, x) → do layerName ← getAttrValue "name" ⤙ l