animate 0.6.0 → 0.6.1
raw patch · 3 files changed
+52/−11 lines, 3 filesdep +yamlPVP ok
version bump matches the API change (PVP)
Dependencies added: yaml
API changes (from Hackage documentation)
+ Animate: readSpriteSheetInfoYAML :: FromJSON delay => FilePath -> IO (SpriteSheetInfo key delay)
+ Animate: readSpriteSheetYAML :: (KeyName key, Ord key, Bounded key, Enum key, FromJSON delay) => (FilePath -> Maybe Color -> IO img) -> FilePath -> IO (SpriteSheet key img delay)
Files
- animate.cabal +12/−6
- library/Animate.hs +38/−4
- package.yaml +2/−1
animate.cabal view
@@ -1,9 +1,11 @@--- This file has been generated from package.yaml by hpack version 0.17.1.+-- This file has been generated from package.yaml by hpack version 0.20.0. -- -- see: https://github.com/sol/hpack+--+-- hash: 49d97c06a6ee7a87c120cefd771eaace13f5dd09656f8aa4d8712e5e43093f7f name: animate-version: 0.6.0+version: 0.6.1 synopsis: Animation for sprites description: Prototypical sprite animation with type-safety. category: Game@@ -30,14 +32,17 @@ default-extensions: DuplicateRecordFields FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase NamedFieldPuns ScopedTypeVariables OverloadedStrings ghc-options: -Wall build-depends:- base >=4.7 && <5- , aeson+ aeson+ , base >=4.7 && <5 , bytestring , containers , text , vector+ , yaml exposed-modules: Animate+ other-modules:+ Paths_animate default-language: Haskell2010 test-suite animate-test-suite@@ -48,12 +53,13 @@ default-extensions: DuplicateRecordFields FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase NamedFieldPuns ScopedTypeVariables OverloadedStrings ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N build-depends:- base- , aeson+ aeson , animate+ , base , containers , hspec , vector other-modules: AnimateSpec+ Paths_animate default-language: Haskell2010
library/Animate.hs view
@@ -25,12 +25,15 @@ , nextKey , prevKey , readSpriteSheetInfoJSON+ , readSpriteSheetInfoYAML , readSpriteSheetJSON+ , readSpriteSheetYAML ) where import qualified Data.Vector as V (Vector, (!), length, fromList) import qualified Data.Map as Map import qualified Data.ByteString.Lazy as BL+import qualified Data.Yaml as Y import Control.Applicative ((<|>)) import Control.Monad (mzero) import Data.Aeson (FromJSON(..), ToJSON(..), (.:), eitherDecode, object, (.=), Value(..))@@ -230,9 +233,25 @@ :: FromJSON delay => FilePath -- ^ Path of the sprite sheet info JSON file -> IO (SpriteSheetInfo key delay)-readSpriteSheetInfoJSON path = do+readSpriteSheetInfoJSON = readSpriteSheetInfo eitherDecode++readSpriteSheetInfoYAML+ :: FromJSON delay+ => FilePath -- ^ Path of the sprite sheet info JSON file+ -> IO (SpriteSheetInfo key delay)+readSpriteSheetInfoYAML = readSpriteSheetInfo eitherDecodeYAML++eitherDecodeYAML :: FromJSON a => BL.ByteString -> Either String a+eitherDecodeYAML = Y.decodeEither . BL.toStrict++readSpriteSheetInfo+ :: FromJSON delay+ => (BL.ByteString -> Either String (SpriteSheetInfo key delay))+ -> FilePath -- ^ Path of the sprite sheet info JSON file+ -> IO (SpriteSheetInfo key delay)+readSpriteSheetInfo decoder path = do metaBytes <- BL.readFile path- case eitherDecode metaBytes of+ case decoder metaBytes of Left _err -> error $ "Cannot parse Sprite Sheet Info \"" ++ path ++ "\"" Right ssi -> return ssi @@ -243,8 +262,23 @@ => (FilePath -> Maybe Color -> IO img) -- ^ Inject an image loading function -> FilePath -- ^ Path of the sprite sheet info JSON file -> IO (SpriteSheet key img delay)-readSpriteSheetJSON loadImage infoPath = do- SpriteSheetInfo{ssiImage, ssiClips, ssiAnimations, ssiAlpha} <- readSpriteSheetInfoJSON infoPath+readSpriteSheetJSON = readSpriteSheet eitherDecode++readSpriteSheetYAML+ :: (KeyName key, Ord key, Bounded key, Enum key, FromJSON delay)+ => (FilePath -> Maybe Color -> IO img) -- ^ Inject an image loading function+ -> FilePath -- ^ Path of the sprite sheet info JSON file+ -> IO (SpriteSheet key img delay)+readSpriteSheetYAML = readSpriteSheet eitherDecodeYAML++readSpriteSheet+ :: (KeyName key, Ord key, Bounded key, Enum key, FromJSON delay)+ => (BL.ByteString -> Either String (SpriteSheetInfo key delay))+ -> (FilePath -> Maybe Color -> IO img)+ -> FilePath+ -> IO (SpriteSheet key img delay)+readSpriteSheet decoder loadImage infoPath = do+ SpriteSheetInfo{ssiImage, ssiClips, ssiAnimations, ssiAlpha} <- readSpriteSheetInfo decoder infoPath i <- loadImage ssiImage ssiAlpha let frame key = (key, map (\a -> Frame (ssiClips !! fst a) (snd a)) (ssiAnimations Map.! keyName key)) let animationMap = Map.fromList $ map frame [minBound..maxBound]
package.yaml view
@@ -1,5 +1,5 @@ name: animate-version: '0.6.0'+version: '0.6.1' category: Game synopsis: Animation for sprites description: Prototypical sprite animation with type-safety.@@ -26,6 +26,7 @@ - containers - text - vector+ - yaml source-dirs: library tests: animate-test-suite: