packages feed

animate 0.6.1 → 0.7.0

raw patch · 4 files changed

+81/−4 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Animate: keyName :: KeyName key => key -> Text
+ Animate: keyName :: (KeyName key, Show key) => key -> Text

Files

README.md view
@@ -1,2 +1,72 @@ # animate Animation for sprites++---++`animate` is a general purpose animation library as it's used for graphical 2D and terminal games.+Each key of an animation are left opened to custom types.+This is in an effort to avoid using numbers or strings as indices and be reusable.++---++[Example using SDL2](https://github.com/jxv/animate-sdl2/tree/master/example) (and includes loading from "Paths")++---++## Sprite Information++Sprite loaders are provided but aren't required.+While the loaders are opininated compared to the rest of the library, they aren't bound to any graphics library.+And many pieces are left exposed if you wish piece together some other variation.++The YAML (and JSON) files describe very typical sprite information:++```yaml+# File path of spritesheet+image: "dino.png"++# Colorkey for transparency+# Optional: It's a tuple of [Red, Green, Blue] between 0-255 values.+alpha: [255, 0, 255]++# Clip is a portion of the sprite sheet+# Optional: The offset is optional.+# [x, y, width, height]+# [x, y, width, height, offsetX, offsetY] ++clips:+# Idle                      # index+- [  0, 0, 48, 48]          # 0+- [ 48, 0, 48, 48]          # 1+- [ 96, 0, 48, 48, 24, 42]  # 2+- [144, 0, 48, 48, 24, 42]  # 3++# Move+- [192, 0, 48, 48, 24, 42]  # 4+- [240, 0, 48, 48, 24, 42]  # 5+- [288, 0, 48, 48, 24, 42]  # 6+- [336, 0, 48, 48, 24, 42]  # 7+- [384, 0, 48, 48, 24, 42]  # 8+- [432, 0, 48, 48, 24, 42]  # 9++# And so on...++# Animation frames are defined by the clip indices and delay time for each clip+animations:+  Idle:+  # [index, delay (seconds)]+  - [0, 0.2]+  - [1, 0.2]+  - [2, 0.2]+  - [3, 0.2]++  Move:+  - [4, 0.01]+  - [5, 0.01]+  - [6, 0.01]+  - [7, 0.01]+  - [8, 0.01]+  - [9, 0.01]++  # And so on...+```
animate.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 49d97c06a6ee7a87c120cefd771eaace13f5dd09656f8aa4d8712e5e43093f7f+-- hash: 9749d72f4f8c62c30bff78a34dd0b51c361144ad7ff2143d29a2b35dac91f8c0  name:           animate-version:        0.6.1+version:        0.7.0 synopsis:       Animation for sprites description:    Prototypical sprite animation with type-safety. category:       Game
library/Animate.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DefaultSignatures #-} module Animate   ( Color   , FrameIndex@@ -39,9 +40,10 @@ import Data.Aeson (FromJSON(..), ToJSON(..), (.:), eitherDecode, object, (.=), Value(..)) import Data.Map (Map) import Data.Word (Word8)-import Data.Text (Text)+import Data.Text (Text, pack) import GHC.Generics (Generic) + -- | Alias for RGB (8bit, 8bit, 8bit) type Color = (Word8, Word8, Word8) @@ -61,6 +63,11 @@ -- | Animation Keyframe. `keyName` is used for JSON parsing. class KeyName key where   keyName :: key -> Text+  default keyName :: Show key => key -> Text+  keyName = pack . dropTickPrefix . show+    where+      dropTickPrefix :: String -> String+      dropTickPrefix = drop 1 . dropWhile (/= '\'')  -- | Describe the boxed area of the 2d sprite inside a sprite sheet data SpriteClip key = SpriteClip
package.yaml view
@@ -1,5 +1,5 @@ name: animate-version: '0.6.1'+version: '0.7.0' category: Game synopsis: Animation for sprites description: Prototypical sprite animation with type-safety.