packages feed

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 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: