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 +70/−0
- animate.cabal +2/−2
- library/Animate.hs +8/−1
- package.yaml +1/−1
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.