orange_zest 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +2 -0
- data/CHANGELOG.md +15 -1
- data/Gemfile.lock +2 -1
- data/lib/orange_zest/animation.rb +13 -0
- data/lib/orange_zest/box.rb +10 -2
- data/lib/orange_zest/component.rb +25 -0
- data/lib/orange_zest/entity.rb +1 -1
- data/lib/orange_zest/point.rb +58 -2
- data/lib/orange_zest/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27e386f30a8dc3f44d62bc4883bc8f08466ab9238a79c0027eaec2845cc9073e
|
4
|
+
data.tar.gz: c1e22e77a3cc554a03e253e732c37efb42ddda52dbbe39a1e9d07e009ae0d4d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33e6b35b126fc62d9b6b1f2627b6afc37144d921ec95434e7ca338a1c63c1fe10d3217e1613cb6bb64b9bf4fa8de4cc19463e68ab3c4c69493d9398ba6e60960
|
7
|
+
data.tar.gz: 77b3ed115ae9d72f2de69f73efb82ac3f3c951edbaa145a1e30882f0a064e92c605dd49304ea216e111daed01b723f7f2d1a4fb7a5f59ccf6d1e93abfa0056fd
|
data/.github/workflows/main.yml
CHANGED
@@ -7,6 +7,8 @@ jobs:
|
|
7
7
|
runs-on: ubuntu-latest
|
8
8
|
steps:
|
9
9
|
- uses: actions/checkout@v2
|
10
|
+
- name: Install Gosu dependencies
|
11
|
+
run: sudo apt install build-essential libsdl2-dev libgl1-mesa-dev libopenal-dev libgmp-dev libfontconfig1-dev
|
10
12
|
- name: Set up Ruby
|
11
13
|
uses: ruby/setup-ruby@v1
|
12
14
|
with:
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,18 @@
|
|
1
|
-
## [
|
1
|
+
## [0.2.0] - 2023-05-18
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
- Add `Component#anon` for creating one-off components
|
6
|
+
- Add `Box#centre` for getting the centre point of a bounding box
|
7
|
+
- Add `Point#line_to` for sampling points on a line between two points
|
8
|
+
- Alias `Point#[]` to `Point#new`
|
9
|
+
- Override `Point#to_s` and `Point#inspect` to be more concise
|
10
|
+
- Scalars can now be added or subtracted with a `Point` to equivalently affect all of its elements
|
11
|
+
- Add `Animation#placeholder` for creating a static, solid-colour animation
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
- `Entity#bounding_box` now reflects scaling in its width and height
|
2
16
|
|
3
17
|
## [0.1.0] - 2022-08-27
|
4
18
|
|
data/Gemfile.lock
CHANGED
@@ -8,7 +8,7 @@ GEM
|
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
diff-lcs (1.5.0)
|
11
|
-
gosu (
|
11
|
+
gosu (1.4.5)
|
12
12
|
rake (13.0.6)
|
13
13
|
rspec (3.11.0)
|
14
14
|
rspec-core (~> 3.11.0)
|
@@ -26,6 +26,7 @@ GEM
|
|
26
26
|
|
27
27
|
PLATFORMS
|
28
28
|
arm64-darwin-21
|
29
|
+
x86_64-linux
|
29
30
|
|
30
31
|
DEPENDENCIES
|
31
32
|
orange_zest!
|
@@ -23,6 +23,19 @@ module OrangeZest
|
|
23
23
|
new([image], -1)
|
24
24
|
end
|
25
25
|
|
26
|
+
# A helper method to create a placeholder animation, with a single frame of static colour in a
|
27
|
+
# chosen size.
|
28
|
+
# @param [Numeric] width
|
29
|
+
# @param [Numeric] height
|
30
|
+
# @param [Gosu::Color] colour
|
31
|
+
# @return [Animation]
|
32
|
+
def self.placeholder(width, height, colour)
|
33
|
+
image = Gosu.render(width, height) do
|
34
|
+
Gosu.draw_rect(0, 0, width, height, colour)
|
35
|
+
end
|
36
|
+
Animation.static(image)
|
37
|
+
end
|
38
|
+
|
26
39
|
# Resets this animation to its first frame.
|
27
40
|
def reset
|
28
41
|
@ticks = 0
|
data/lib/orange_zest/box.rb
CHANGED
@@ -18,9 +18,17 @@ module OrangeZest
|
|
18
18
|
end
|
19
19
|
|
20
20
|
# Returns true if a point is inside this box.
|
21
|
+
# @return [Boolean]
|
21
22
|
def point_inside?(point)
|
22
23
|
point.x >= origin.x && point.x <= origin.x + width \
|
23
24
|
&& point.y >= origin.y && point.y <= origin.y + height
|
24
|
-
end
|
25
|
-
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns the point at the centre of this box.
|
28
|
+
# @return [Point]
|
29
|
+
def centre
|
30
|
+
origin + Point.new(width / 2, height / 2)
|
31
|
+
end
|
32
|
+
alias center centre
|
33
|
+
end
|
26
34
|
end
|
@@ -28,5 +28,30 @@ module OrangeZest
|
|
28
28
|
raise 'tried to unregister component which is not registered' unless group
|
29
29
|
group.remove(self)
|
30
30
|
end
|
31
|
+
|
32
|
+
# A helper method to easily instantiate a new `Component` without creating a named subclass.
|
33
|
+
# Useful for components which will be instantiated exactly once and never need to be referred
|
34
|
+
# to again.
|
35
|
+
#
|
36
|
+
# @param [#call, nil] update
|
37
|
+
# @param [#call, nil] draw
|
38
|
+
# @return [Component]
|
39
|
+
def self.anon(update: nil, draw: nil)
|
40
|
+
_update = update || ->{}
|
41
|
+
_draw = draw || ->{}
|
42
|
+
|
43
|
+
Class.new(Component) do
|
44
|
+
@@update = _update
|
45
|
+
@@draw = _draw
|
46
|
+
|
47
|
+
def update
|
48
|
+
@@update.()
|
49
|
+
end
|
50
|
+
|
51
|
+
def draw
|
52
|
+
@@draw.()
|
53
|
+
end
|
54
|
+
end.new
|
55
|
+
end
|
31
56
|
end
|
32
57
|
end
|
data/lib/orange_zest/entity.rb
CHANGED
@@ -82,7 +82,7 @@ module OrangeZest
|
|
82
82
|
# Returns a bounding box for this entity, starting at its position and spanning the size of its
|
83
83
|
# current frame.
|
84
84
|
def bounding_box
|
85
|
-
Box.new(position, image.width, image.height)
|
85
|
+
Box.new(position, image.width * scaling, image.height * scaling)
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
data/lib/orange_zest/point.rb
CHANGED
@@ -9,9 +9,19 @@ module OrangeZest
|
|
9
9
|
@z = z
|
10
10
|
end
|
11
11
|
|
12
|
+
def self.[](*args)
|
13
|
+
new(*args)
|
14
|
+
end
|
15
|
+
|
12
16
|
def +(other)
|
13
|
-
|
14
|
-
Point
|
17
|
+
case other
|
18
|
+
when Point
|
19
|
+
Point.new(x + other.x, y + other.y, z + other.z)
|
20
|
+
when Numeric
|
21
|
+
Point.new(x + other, y + other, z + other)
|
22
|
+
else
|
23
|
+
raise TypeError, "can't add point to #{other}"
|
24
|
+
end
|
15
25
|
end
|
16
26
|
|
17
27
|
def -@
|
@@ -33,11 +43,57 @@ module OrangeZest
|
|
33
43
|
[x, y, z].hash
|
34
44
|
end
|
35
45
|
|
46
|
+
def to_s
|
47
|
+
"#<Point: #{x}, #{y}, #{z}>"
|
48
|
+
end
|
49
|
+
alias inspect to_s
|
50
|
+
|
36
51
|
# Computes the distance between this point and another.
|
37
52
|
def distance(other)
|
38
53
|
x_dist = (x - other.x)
|
39
54
|
y_dist = (y - other.y)
|
40
55
|
Math.sqrt(x_dist**2 + y_dist**2)
|
41
56
|
end
|
57
|
+
|
58
|
+
# Return all points in a line from one point to another.
|
59
|
+
#
|
60
|
+
# This is a 2D operation - Z is ignored. Floating point components of either point are rounded
|
61
|
+
# to integers.
|
62
|
+
#
|
63
|
+
# @param [Point] other
|
64
|
+
# @return [<Point>]
|
65
|
+
def line_to(other)
|
66
|
+
# `supercover_line` from: https://www.redblobgames.com/grids/line-drawing.html
|
67
|
+
dx = other.x.round - self.x.round
|
68
|
+
dy = other.y.round - self.y.round
|
69
|
+
nx = dx.abs
|
70
|
+
ny = dy.abs
|
71
|
+
sign_x = dx <=> 0
|
72
|
+
sign_y = dy <=> 0
|
73
|
+
|
74
|
+
p = self.clone
|
75
|
+
points = [p.clone]
|
76
|
+
|
77
|
+
ix = 0
|
78
|
+
iy = 0
|
79
|
+
while ix < nx || iy < ny
|
80
|
+
decision = (1 + 2*ix) * ny - (1 + 2*iy) * nx
|
81
|
+
if decision == 0
|
82
|
+
p.x += sign_x
|
83
|
+
p.y += sign_y
|
84
|
+
ix += 1
|
85
|
+
iy += 1
|
86
|
+
elsif decision < 0
|
87
|
+
p.x += sign_x
|
88
|
+
ix += 1
|
89
|
+
else
|
90
|
+
p.y += sign_y
|
91
|
+
iy += 1
|
92
|
+
end
|
93
|
+
points << p.clone
|
94
|
+
end
|
95
|
+
|
96
|
+
points
|
97
|
+
end
|
42
98
|
end
|
43
99
|
end
|
data/lib/orange_zest/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orange_zest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Christiansen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gosu
|