aniruby 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b0e843e0f081ca0cc57e4e28ed4b37f43574d7d4b50220d608879357f322d44
4
- data.tar.gz: e284a38f220483bd15cae1a0ed61f6615296d8b4257838266013d9214bfd327c
3
+ metadata.gz: 0f06e5010221982c6ac29ff4f0670f1315236397182aa8df23bbc199b411f959
4
+ data.tar.gz: 06752b16a07eae712c689130ac7bfaf41b433a6fc18a2bc26339a6fbba0c14eb
5
5
  SHA512:
6
- metadata.gz: e3339f0a1560b4b77adf2b1dadf574d88f80d8315e71c0a1e7d886e94da3ada92968486dfdb48ef06fba66fa572f9f8f1fb95ace2669afba150c233e4cda780a
7
- data.tar.gz: 42308936cde744c37f56af5c1fe03e244f0d13634ebf52dd194408603531108e5cf4d804b0da6432f7fe7f3b2a81c02ec27ac4036b0dc51af88c75594d458078
6
+ metadata.gz: 07dfe64289a335ffc010d07eb7596e8cdea2cdb55084e81a2d789045bb7b3be59471dcc8a8735aee5e5f11ece070566c8ebf05d1e9bf2aadd3af31603c691b7b
7
+ data.tar.gz: a47f0888419c88b9ea73d742f283894a0fbb07c8d1bebd9c8bd5fc1a9db367bf16d9da62ab434a6e1afc3f44fd4ad97c8527b05eeb787bc0f298a01d43d4e6a1
data/CHANGELOG.md CHANGED
@@ -5,7 +5,19 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## Unreleased
9
+
10
+ ## 0.1.3 - 2023-08-22
11
+
12
+ ### Fixed
13
+
14
+ - Undefined method error in animation, when using `size` on `AniRuby::Frames`, now
15
+ use `Enumerable#count` instead.
16
+
17
+ ### Changed
18
+
19
+ - The way milliseconds are used as duration, before you'll have to use whole numbers
20
+ (1000 is a second, 500 half a second and so on), now we can just use floats for that (1.0 as a second, 0.5 half a second and so on).
9
21
 
10
22
  ## 0.1.2 - 2023-08-20
11
23
 
data/README.md CHANGED
@@ -1,13 +1,16 @@
1
1
  # AniRuby
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/aniruby.svg)](https://badge.fury.io/rb/aniruby)
4
+
3
5
  Make sprite animations on Gosu simple and easy.
4
6
 
5
7
  ## Summary
6
8
 
7
9
  This library will provide you with a nice n easy interface to do sprite animations
8
- on [Gosu](https://www.libgosu.org/), while being as nifty as possible
10
+ on [Gosu](https://www.libgosu.org/), while being as nifty and simple as possible.
9
11
 
10
- The library is made in pure Ruby with no dependencies at all (except Gosu, of course)
12
+ The library is made in pure Ruby with no dependencies at all (except Gosu, of course) so
13
+ its quite lightweight.
11
14
 
12
15
  ## Install
13
16
 
@@ -18,14 +21,14 @@ You can install the gem with the following command:
18
21
  or use it with a bundle:
19
22
 
20
23
  ```ruby
21
- # Somewhere in a Gemfile
24
+ # Somewhere in your Gemfile
22
25
 
23
26
  gem 'aniruby'
24
27
  ```
25
28
 
26
29
  ## Getting Started
27
30
 
28
- Using the less code possible:
31
+ The smallest example:
29
32
 
30
33
  ```ruby
31
34
 
@@ -38,10 +41,11 @@ class MyWindow < Gosu::Window
38
41
 
39
42
  @animation = AniRuby::Animation.new('my_spritesheet.png', 32, 32,
40
43
  false, true,
41
- 150)
44
+ 0.15)
42
45
  end
43
46
 
44
47
  def update
48
+ # Remember to update your animation!
45
49
  @animation.update
46
50
  end
47
51
 
@@ -56,22 +60,57 @@ end
56
60
  When you create a animation, you'll need to have an *spritesheet*, where you have
57
61
  each sprite of the animation, that's the first argument to `Animation#new`, then
58
62
  you'll need the dimensions of each individual sprite on your spritesheet, in the
59
- example provided each sprite in the spritesheet is 32x32.
63
+ example provided we assume each sprite in the spritesheet is 32x32. Take for example
64
+ the following spritesheet courtesy of penzilla on [Itch.io](https://penzilla.itch.io/hooded-protagonist)
65
+
66
+ ![example spritesheet](assets/example_spritesheet.png)
67
+
68
+ when we load it, it'll be divided into different image based on the individual
69
+ dimensions of each sprite, so if we specify 32 as width and 32 as height then the
70
+ spritesheet will be divided like this:
71
+
72
+ ![example spritesheet quads](assets/example_spritesheet_quads.png)
73
+
74
+ That is the bare minimum, to get an animation, of course you can use Gosu's retro
75
+ option so pixel animations when scaled will still look crisp, looping or the duration
76
+ of the animation (or for every individual frame even!).
77
+
78
+ In the example above we initialize the animation with retro off, looping on and
79
+ with a duration of 0.15 (150ms) for every frame. So we'll get something like this:
80
+
81
+ ![example spritesheet result](assets/example_spritesheet_result.gif)
82
+
83
+ Ain't that nice?
84
+
85
+ ### Drawing
86
+
87
+ You can draw an animation like any other `Gosu::Image`! Sn animation has both
88
+ `Animation#draw` and `Animation#draw_rot`, these methods mimic the ones on Gosu, so you don't
89
+ have to learn anything new.
90
+
91
+ ### Extras
92
+
93
+ Each `Animation` has extra helpful methods, like `pause` & `unpause`, `reset`,
94
+ `done?`, etc. I recommend you to look on the source, its pretty small and easy to
95
+ understand, or build the YARD documentation with
96
+
97
+ `rake doc`
98
+
99
+ ## Development
60
100
 
61
- That is the bare minimum, you can specify filter type (retro in gosu's API), looping
62
- and duration (for each individual frame too!).
101
+ First clone this repo locally:
63
102
 
64
- provided you have the initilization right, you need to `update` your animation for it
65
- to come to live!
103
+ `git clone https://github.com/Chadowo/aniruby`
66
104
 
67
- NOTE: `Animation#draw` mimics the API of gosu' `Image#draw`, so you can give it
68
- much more than single coordinates. there's `Animation#draw_rot` too!
105
+ Then you can use rake to build or test gem.
69
106
 
70
107
  ## Roadmap
71
108
 
72
109
  - more fine-grained control of animation
73
110
  - being able to make an animation stitching `Gosu::Image`'s together
74
- - mirroring
111
+ - mirroring
112
+ - inverse animation
113
+ - multiple animation from a single spritesheet
75
114
 
76
115
  ## License
77
116
 
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require_relative 'lib/aniruby/version'
6
6
 
7
7
  Minitest::TestTask.create
8
8
 
9
- task :default => :build
9
+ task :default => :test
10
10
 
11
11
  desc 'Build the gem'
12
12
  task :build do
@@ -17,11 +17,11 @@ module AniRuby
17
17
  # @param frame_h [Integer] The height of each individual frame
18
18
  # @param retro [Boolean] If true, the animation will not be interpolated when scaled
19
19
  # @param loop [Boolean] If true, the animation will loop indefinitely
20
- # @param durations [Integer] The duration of the frames in milliseconds (500
21
- # is half a second, 1000 a second, etc). If
22
- # there's more than one duration, then they will
23
- # be mapped to each frame of the animation, the
24
- # frames with no specified duration will default to 100
20
+ # @param durations [Float] The duration of the frames in MS (0.5 is half a second,
21
+ # 1.0 a second, etc). If there's more than one duration
22
+ # provided they will be mapped to each frame of the
23
+ # animation. The default for each frame is 0.1.
24
+ #
25
25
  #
26
26
  # @return [Animation] A new animation ready to play
27
27
  def initialize(spritesheet, frame_w, frame_h, retro = false, loop = true, *durations)
@@ -147,7 +147,7 @@ module AniRuby
147
147
 
148
148
  # Set the duration for all frames in the animation
149
149
  #
150
- # @param ms [Integer] The new duration in milliseconds
150
+ # @param ms [Float] The new duration in milliseconds
151
151
  def duration(ms)
152
152
  @frames.each { |frame| frame.duration = ms}
153
153
  end
@@ -157,7 +157,7 @@ module AniRuby
157
157
  # @return [Boolean]
158
158
  # @note This method will return true in intervals if the animation loops
159
159
  def done?
160
- true if @current_frame == @frames.size - 1
160
+ true if @current_frame == @frames.count - 1
161
161
  end
162
162
 
163
163
  # Is the animation paused?
@@ -173,12 +173,12 @@ module AniRuby
173
173
  #
174
174
  # @return [AniRuby::Frame]
175
175
  def get_current_frame
176
- @frames[@current_frame % @frames.size]
176
+ @frames[@current_frame % @frames.count]
177
177
  end
178
178
 
179
179
  # Has the current frame's duration expired?
180
180
  def frame_expired?
181
- now = Gosu.milliseconds
181
+ now = Gosu.milliseconds / 1000.0
182
182
  @last_frame ||= now
183
183
 
184
184
  if (now - @last_frame) > @frames[@current_frame].duration
data/lib/aniruby/frame.rb CHANGED
@@ -1,11 +1,18 @@
1
1
 
2
2
  module AniRuby
3
- # A frame has a sprite and a duration in milliseconds
3
+ # A frame has a sprite that's Gosu::Image and a duration specified in
4
+ # milliseconds
4
5
  class Frame
5
6
  attr_accessor :duration, :sprite
6
7
  attr_reader :w, :h
7
8
 
8
- def initialize(sprite, duration = 100)
9
+ # Create a new frame
10
+ #
11
+ # @param sprite [Gosu::Image]
12
+ # @param duration [Float]
13
+ #
14
+ # @return [Frame]
15
+ def initialize(sprite, duration = 0.1)
9
16
  @sprite = sprite
10
17
  @duration = duration
11
18
 
@@ -1,6 +1,6 @@
1
1
 
2
2
  module AniRuby
3
- # Collection of frames, with Enumerable included to add iteration functions
3
+ # Collection of frames
4
4
  class Frames
5
5
  include Enumerable
6
6
 
@@ -14,6 +14,8 @@ module AniRuby
14
14
  end
15
15
 
16
16
  # @param index [Integer]
17
+ #
18
+ # @return [Frame]
17
19
  def [](index)
18
20
  @frames[index]
19
21
  end
@@ -2,7 +2,7 @@
2
2
  module AniRuby
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 2
5
+ PATCH = 3
6
6
 
7
7
  # See https://semver.org/
8
8
  VERSION = "#{MAJOR}.#{MINOR}.#{PATCH}".freeze
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aniruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chadow
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-20 00:00:00.000000000 Z
11
+ date: 2023-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu