rubysketch 0.5.3 → 0.5.4
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 +4 -4
- data/.github/workflows/utils.rb +2 -1
- data/ChangeLog.md +7 -0
- data/RubySketch.podspec +18 -5
- data/VERSION +1 -1
- data/lib/rubysketch/all.rb +8 -1
- data/lib/rubysketch/context.rb +69 -13
- data/lib/rubysketch/extension.rb +1 -0
- data/lib/rubysketch/graphics_context.rb +7 -14
- data/lib/rubysketch/helper.rb +1 -0
- data/lib/rubysketch/sound.rb +32 -1
- data/lib/rubysketch/sprite.rb +343 -62
- data/lib/rubysketch/window.rb +1 -0
- data/pod.rake +7 -5
- data/rubysketch.gemspec +6 -6
- data/test/test_sound.rb +2 -4
- data/test/test_sprite.rb +177 -5
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82a93ef9dac4ae855bfa85f9a076ed05c807875db70be9c5e72419137499434e
|
4
|
+
data.tar.gz: 2f432e94c80ad231f50ca11df96ecd6a13c389551f75c426e161701e25d85a23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cdf7238a4d07fe88b5d1fe3d68ea6f62d9536b142afda5dad1f4c15538bae2047d4e188bbc88e0777d641650ad9c5f5864720345ad5ec950e2ff18e83f552db9
|
7
|
+
data.tar.gz: 310a71a0b3388876bd0c0910a09bb9aa12e5686e5885ec8e4b2a32cb4af629ed18a010731a77b4a8ea1a9a4be41de504098767d0d133e3344554d5078508ad29
|
data/.github/workflows/utils.rb
CHANGED
@@ -20,8 +20,9 @@ def setup_dependencies(build: true, only: nil)
|
|
20
20
|
|
21
21
|
exts.each do |ext|
|
22
22
|
gem = RENAMES[ext.to_sym].then {|s| s || ext}
|
23
|
-
clone = "git clone --depth 1 https://github.com/xord/#{ext}.git ../#{ext}"
|
24
23
|
ver = gemspec[/add_runtime_dependency.*['"]#{gem}['"].*['"]\s*~>\s*([\d\.]+)\s*['"]/, 1]
|
24
|
+
opts = '-c advice.detachedHead=false --depth 1'
|
25
|
+
clone = "git clone #{opts} https://github.com/xord/#{ext}.git ../#{ext}"
|
25
26
|
|
26
27
|
# 'rake subtree:push' pushes all subrepos, so cloning by new tag
|
27
28
|
# often fails before tagging each new tag
|
data/ChangeLog.md
CHANGED
data/RubySketch.podspec
CHANGED
@@ -23,11 +23,15 @@ Pod::Spec.new do |s|
|
|
23
23
|
incdirs = exts.map {|x| "#{root}/#{x}/include"}.concat %W[
|
24
24
|
#{root}/src
|
25
25
|
#{root}/beeps/vendor/stk/include
|
26
|
+
#{root}/beeps/vendor/AudioFile
|
27
|
+
#{root}/beeps/vendor/r8brain-free-src
|
28
|
+
#{root}/beeps/vendor/signalsmith-stretch
|
26
29
|
#{root}/rays/vendor/glm
|
27
30
|
#{root}/rays/vendor/clipper/cpp
|
28
31
|
#{root}/rays/vendor/poly2tri/poly2tri
|
29
32
|
#{root}/rays/vendor/splines-lib
|
30
|
-
#{root}/reflex/vendor/
|
33
|
+
#{root}/reflex/vendor/box2d/include
|
34
|
+
#{root}/reflex/vendor/box2d/src
|
31
35
|
${PODS_ROOT}/CRuby/CRuby/include
|
32
36
|
]
|
33
37
|
|
@@ -63,16 +67,25 @@ Pod::Spec.new do |s|
|
|
63
67
|
end
|
64
68
|
|
65
69
|
s.subspec "Beeps" do |spec|
|
66
|
-
spec.source_files = "beeps/src/*.cpp"
|
67
|
-
spec.
|
70
|
+
spec .source_files = "beeps/src/*.cpp"
|
71
|
+
spec.osx.source_files = "beeps/src/osx/*.{cpp,mm}"
|
72
|
+
spec.ios.source_files = "beeps/src/osx/*.{cpp,mm}"
|
73
|
+
spec.frameworks = %w[OpenAL AVFoundation]
|
68
74
|
|
69
75
|
spec.subspec "STK" do |sub|
|
70
76
|
sub.source_files = "beeps/vendor/stk/src/*.cpp"
|
71
|
-
sub.exclude_files = %
|
77
|
+
sub.exclude_files = %w[Tcp Udp Socket Thread Mutex InetWv Rt].map {|s|
|
72
78
|
"beeps/vendor/stk/src/#{s}*.cpp"
|
73
79
|
}
|
74
80
|
end
|
75
81
|
|
82
|
+
spec.subspec "R8BrainFreeSrc" do |sub|
|
83
|
+
sub.source_files = "beeps/vendor/r8brain-free-src/*.cpp"
|
84
|
+
sub.exclude_files = %w[example pffft_double/].map {|s|
|
85
|
+
"beeps/vendor/r8brain-free-src/#{s}*.cpp"
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
76
89
|
spec.subspec "Ext" do |ext|
|
77
90
|
ext.source_files = "beeps/ext/beeps/*.cpp"
|
78
91
|
end
|
@@ -108,7 +121,7 @@ Pod::Spec.new do |s|
|
|
108
121
|
spec.ios.frameworks = %w[CoreMotion]
|
109
122
|
|
110
123
|
spec.subspec "Box2D" do |sub|
|
111
|
-
sub.source_files = "reflex/vendor/
|
124
|
+
sub.source_files = "reflex/vendor/box2d/src/**/*.cpp"
|
112
125
|
end
|
113
126
|
|
114
127
|
spec.subspec "Ext" do |ext|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.4
|
data/lib/rubysketch/all.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'forwardable'
|
2
1
|
require 'beeps'
|
3
2
|
require 'processing/all'
|
4
3
|
|
@@ -10,3 +9,11 @@ require 'rubysketch/sprite'
|
|
10
9
|
require 'rubysketch/sound'
|
11
10
|
require 'rubysketch/graphics_context'
|
12
11
|
require 'rubysketch/context'
|
12
|
+
|
13
|
+
|
14
|
+
module RubySketch
|
15
|
+
|
16
|
+
Vector = Processing::Vector
|
17
|
+
Image = Processing::Image
|
18
|
+
|
19
|
+
end# RubySketch
|
data/lib/rubysketch/context.rb
CHANGED
@@ -5,47 +5,103 @@ module RubySketch
|
|
5
5
|
|
6
6
|
include GraphicsContext
|
7
7
|
|
8
|
+
Sound = RubySketch::Sound
|
9
|
+
Sprite = RubySketch::Sprite
|
10
|
+
|
11
|
+
# @private
|
8
12
|
def initialize(window)
|
9
13
|
super
|
10
|
-
@
|
14
|
+
@layer__ = window.add_overlay SpriteLayer.new
|
11
15
|
end
|
12
16
|
|
17
|
+
# Creates a new sprite and add it to physics engine.
|
18
|
+
#
|
19
|
+
# @overload createSprite(image: img)
|
20
|
+
# pos: [0, 0], size: [image.width, image.height]
|
21
|
+
# @param [Image] img sprite image
|
22
|
+
#
|
23
|
+
# @overload createSprite(x, y, image: img)
|
24
|
+
# pos: [x, y], size: [image.width, image.height]
|
25
|
+
# @param [Numeric] x x of sprite position
|
26
|
+
# @param [Numeric] y y of sprite position
|
27
|
+
# @param [Image] img sprite image
|
28
|
+
#
|
29
|
+
# @overload createSprite(x, y, w, h)
|
30
|
+
# pos(x, y), size: [w, h]
|
31
|
+
# @param [Numeric] x x of sprite position
|
32
|
+
# @param [Numeric] y y of sprite position
|
33
|
+
# @param [Numeric] w width of sprite
|
34
|
+
# @param [Numeric] h height of sprite
|
35
|
+
#
|
36
|
+
# @overload createSprite(x, y, w, h, image: img, offset: off)
|
37
|
+
# pos: [x, y], size: [w, h], offset: [offset.x, offset.x]
|
38
|
+
# @param [Numeric] x x of sprite position
|
39
|
+
# @param [Numeric] y y of sprite position
|
40
|
+
# @param [Numeric] w width of sprite
|
41
|
+
# @param [Numeric] h height of sprite
|
42
|
+
# @param [Image] img sprite image
|
43
|
+
# @param [Vector] off offset of sprite image
|
44
|
+
#
|
13
45
|
def createSprite(*args, **kwargs)
|
14
46
|
addSprite Sprite.new(*args, **kwargs)
|
15
47
|
end
|
16
48
|
|
49
|
+
# Adds the sprite to the physics engine.
|
50
|
+
#
|
51
|
+
# @param [Sprite] sprite sprite object
|
52
|
+
#
|
17
53
|
def addSprite(sprite)
|
18
|
-
@
|
54
|
+
@layer__.add sprite.getInternal__ if sprite
|
19
55
|
sprite
|
20
56
|
end
|
21
57
|
|
58
|
+
# Removes the sprite from the physics engine.
|
59
|
+
#
|
60
|
+
# @param [Sprite] sprite sprite object
|
61
|
+
#
|
22
62
|
def removeSprite(sprite)
|
23
|
-
@
|
63
|
+
@layer__.remove sprite.getInternal__ if sprite
|
24
64
|
sprite
|
25
65
|
end
|
26
66
|
|
67
|
+
# @private
|
27
68
|
def loadSound(path)
|
28
69
|
Sound.load path
|
29
70
|
end
|
30
71
|
|
72
|
+
# Sets gravity for the physics engine.
|
73
|
+
#
|
74
|
+
# @overload gravity(vec)
|
75
|
+
# @param [Vector] vec gracity vector
|
76
|
+
#
|
77
|
+
# @overload gravity(ary)
|
78
|
+
# @param [Array<Numeric>] ary gravityX, gravityY
|
79
|
+
#
|
80
|
+
# @overload gravity(x, y)
|
81
|
+
# @param [Numeric] x x of gravity vector
|
82
|
+
# @param [Numeric] y y of gracity vector
|
83
|
+
#
|
31
84
|
def gravity(*args)
|
32
85
|
x, y =
|
33
|
-
case args
|
34
|
-
when
|
86
|
+
case arg = args.first
|
87
|
+
when Vector then arg.array
|
88
|
+
when Array then arg
|
35
89
|
else args
|
36
90
|
end
|
37
|
-
@
|
38
|
-
v.gravity x * v.meter, y * v.meter
|
39
|
-
end
|
91
|
+
@layer__.gravity x, y
|
40
92
|
end
|
41
93
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
94
|
+
end# Context
|
95
|
+
|
96
|
+
|
97
|
+
# @private
|
98
|
+
class SpriteLayer < Reflex::View
|
99
|
+
|
100
|
+
def on_draw(e)
|
101
|
+
e.block
|
46
102
|
end
|
47
103
|
|
48
|
-
end#
|
104
|
+
end# SpriteLayer
|
49
105
|
|
50
106
|
|
51
107
|
end# RubySketch
|
data/lib/rubysketch/extension.rb
CHANGED
@@ -3,34 +3,27 @@ module RubySketch
|
|
3
3
|
|
4
4
|
module GraphicsContext
|
5
5
|
|
6
|
+
# Draws one or more sprites.
|
7
|
+
#
|
8
|
+
# @param [Array<Sprite>] sprites
|
9
|
+
#
|
6
10
|
def sprite(*sprites)
|
7
11
|
sprites.flatten! if sprites.first&.is_a? Array
|
8
12
|
sprites.each do |sp|
|
9
13
|
v = sp.getInternal__
|
10
|
-
f, angle
|
14
|
+
f, angle = v.frame, v.angle
|
11
15
|
if angle == 0
|
12
|
-
|
16
|
+
sp.on_draw__ f.x, f.y, f.w, f.h
|
13
17
|
else
|
14
18
|
pushMatrix do
|
15
19
|
translate f.x, f.y
|
16
20
|
rotate radians(angle)
|
17
|
-
|
21
|
+
sp.on_draw__ 0, 0, f.w, f.h
|
18
22
|
end
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
22
26
|
|
23
|
-
def drawSprite__(x, y, w, h, img, offset)
|
24
|
-
if img && offset
|
25
|
-
ox, oy = offset
|
26
|
-
copy img, ox, oy, w, h, x, y, w, h
|
27
|
-
elsif img
|
28
|
-
image img, x, y
|
29
|
-
else
|
30
|
-
rect x, y, w, h
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
27
|
end# GraphicsContext
|
35
28
|
|
36
29
|
|
data/lib/rubysketch/helper.rb
CHANGED
data/lib/rubysketch/sound.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module RubySketch
|
2
2
|
|
3
3
|
|
4
|
+
# @private
|
4
5
|
class Sound
|
5
6
|
|
6
7
|
# @private
|
@@ -8,6 +9,8 @@ module RubySketch
|
|
8
9
|
@sound = sound
|
9
10
|
end
|
10
11
|
|
12
|
+
# Play sound.
|
13
|
+
#
|
11
14
|
def play()
|
12
15
|
old = @player
|
13
16
|
@player = @sound.play
|
@@ -15,12 +18,16 @@ module RubySketch
|
|
15
18
|
true
|
16
19
|
end
|
17
20
|
|
21
|
+
# Pause sound.
|
22
|
+
#
|
18
23
|
def pause()
|
19
24
|
return false unless @player
|
20
25
|
@player.pause
|
21
26
|
true
|
22
27
|
end
|
23
28
|
|
29
|
+
# Stop sound.
|
30
|
+
#
|
24
31
|
def stop()
|
25
32
|
return false unless @player
|
26
33
|
@player.stop
|
@@ -28,22 +35,46 @@ module RubySketch
|
|
28
35
|
true
|
29
36
|
end
|
30
37
|
|
38
|
+
# Returns whether the sound is playing or not.
|
39
|
+
#
|
40
|
+
# @return [Boolean] playing or not
|
41
|
+
#
|
31
42
|
def playing?()
|
32
43
|
@player ? @player.playing? : false
|
33
44
|
end
|
34
45
|
|
46
|
+
# Returns whether the sound is paused or not.
|
47
|
+
#
|
48
|
+
# @return [Boolean] paused or not
|
49
|
+
#
|
35
50
|
def paused?()
|
36
|
-
|
51
|
+
@player ? @player.paused? : false
|
37
52
|
end
|
38
53
|
|
54
|
+
# Returns whether the sound is stopped or not.
|
55
|
+
#
|
56
|
+
# @return [Boolean] stopped or not
|
57
|
+
#
|
39
58
|
def stopped?()
|
40
59
|
@player ? @player.stopped? : true
|
41
60
|
end
|
42
61
|
|
62
|
+
# Save the sound data to a file.
|
63
|
+
#
|
64
|
+
# @param [String] path file path
|
65
|
+
#
|
66
|
+
# @return [Sound] self
|
67
|
+
#
|
43
68
|
def save(path)
|
44
69
|
@sound.save path
|
45
70
|
end
|
46
71
|
|
72
|
+
# Load a sound file.
|
73
|
+
#
|
74
|
+
# @param [String] path file path
|
75
|
+
#
|
76
|
+
# @return [Sound] sound object
|
77
|
+
#
|
47
78
|
def self.load(path)
|
48
79
|
f = Beeps::FileIn.new path
|
49
80
|
self.new Beeps::Sound.new(f, f.seconds, nchannels: f.nchannels)
|
data/lib/rubysketch/sprite.rb
CHANGED
@@ -1,128 +1,409 @@
|
|
1
1
|
module RubySketch
|
2
2
|
|
3
3
|
|
4
|
+
# Sprite object.
|
5
|
+
#
|
4
6
|
class Sprite
|
5
7
|
|
6
|
-
|
8
|
+
# Initialize sprite object.
|
9
|
+
#
|
10
|
+
# @overload new(image: img)
|
11
|
+
# pos: [0, 0], size: [image.width, image.height]
|
12
|
+
# @param [Image] img sprite image
|
13
|
+
#
|
14
|
+
# @overload new(x, y, image: img)
|
15
|
+
# pos: [x, y], size: [image.width, image.height]
|
16
|
+
# @param [Numeric] x x of sprite position
|
17
|
+
# @param [Numeric] y y of sprite position
|
18
|
+
# @param [Image] img sprite image
|
19
|
+
#
|
20
|
+
# @overload new(x, y, w, h)
|
21
|
+
# pos(x, y), size: [w, h]
|
22
|
+
# @param [Numeric] x x of sprite position
|
23
|
+
# @param [Numeric] y y of sprite position
|
24
|
+
# @param [Numeric] w width of sprite
|
25
|
+
# @param [Numeric] h height of sprite
|
26
|
+
#
|
27
|
+
# @overload new(x, y, w, h, image: img, offset: off)
|
28
|
+
# pos: [x, y], size: [w, h], offset: [offset.x, offset.x]
|
29
|
+
# @param [Numeric] x x of sprite position
|
30
|
+
# @param [Numeric] y y of sprite position
|
31
|
+
# @param [Numeric] w width of sprite
|
32
|
+
# @param [Numeric] h height of sprite
|
33
|
+
# @param [Image] img sprite image
|
34
|
+
# @param [Vector] off offset of sprite image
|
35
|
+
#
|
36
|
+
def initialize(x = 0, y = 0, w = nil, h = nil, image: nil, offset: nil)
|
37
|
+
w ||= (image&.width || 0)
|
38
|
+
h ||= (image&.height || 0)
|
39
|
+
raise 'invalid size' unless w >= 0 && h >= 0
|
40
|
+
raise 'invalid image' if image && !image.getInternal__.is_a?(Rays::Image)
|
7
41
|
|
8
|
-
|
9
|
-
w ||= image&.width || 0
|
10
|
-
h ||= image&.height || 0
|
11
|
-
raise 'invalid size' unless w >= 0 && h >= 0
|
42
|
+
@view__ = SpriteView.new(self, x: x, y: y, w: w, h: h, back: :white)
|
12
43
|
|
13
|
-
|
14
|
-
|
44
|
+
self.image = image if image
|
45
|
+
self.offset = offset if offset
|
15
46
|
end
|
16
47
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
:friction, :friction=,
|
25
|
-
:restitution, :restitution=
|
48
|
+
# Returns the position of the sprite.
|
49
|
+
#
|
50
|
+
# @return [Vector] position
|
51
|
+
#
|
52
|
+
def position()
|
53
|
+
@view__.position.toVector
|
54
|
+
end
|
26
55
|
|
27
|
-
|
28
|
-
|
56
|
+
# Sets the position of the sprite.
|
57
|
+
#
|
58
|
+
# @overload position=(vec)
|
59
|
+
# @param [Vector] vec position vector
|
60
|
+
#
|
61
|
+
# @overload position=(ary)
|
62
|
+
# @param [Array<Numeric>] ary positionX, positionY
|
63
|
+
#
|
64
|
+
# @return [Vector] position
|
65
|
+
#
|
66
|
+
def position=(arg)
|
67
|
+
@view__.position = arg.is_a?(Vector) ? arg.getInternal__ : arg
|
68
|
+
arg
|
29
69
|
end
|
30
70
|
|
31
|
-
|
32
|
-
|
71
|
+
# Returns the x-coordinate position of the sprite.
|
72
|
+
#
|
73
|
+
# @return [Numeric] sprite position x
|
74
|
+
#
|
75
|
+
def x()
|
76
|
+
@view__.x
|
33
77
|
end
|
34
78
|
|
35
|
-
|
36
|
-
|
79
|
+
# Set the x-coordinate position of the sprite.
|
80
|
+
#
|
81
|
+
# @param [Numeric] n sprite position x
|
82
|
+
#
|
83
|
+
# @return [Numeric] sprite position x
|
84
|
+
#
|
85
|
+
def x=(n)
|
86
|
+
@view__.x = n
|
87
|
+
n
|
37
88
|
end
|
38
89
|
|
39
|
-
|
40
|
-
|
90
|
+
# Returns the y-coordinate position of the sprite.
|
91
|
+
#
|
92
|
+
# @return [Numeric] sprite position y
|
93
|
+
#
|
94
|
+
def y()
|
95
|
+
@view__.y
|
41
96
|
end
|
42
97
|
|
43
|
-
|
44
|
-
|
98
|
+
# Set the y-coordinate position of the sprite.
|
99
|
+
#
|
100
|
+
# @param [Numeric] n sprite position y
|
101
|
+
#
|
102
|
+
# @return [Numeric] sprite position y
|
103
|
+
#
|
104
|
+
def y=(n)
|
105
|
+
@view__.y = n
|
106
|
+
n
|
45
107
|
end
|
46
108
|
|
109
|
+
alias pos position
|
110
|
+
alias pos= position=
|
111
|
+
|
112
|
+
# Returns the size of the sprite.
|
113
|
+
#
|
114
|
+
# @return [Vector] size
|
115
|
+
#
|
47
116
|
def size()
|
48
117
|
@view__.size.toVector
|
49
118
|
end
|
50
119
|
|
51
|
-
|
52
|
-
|
120
|
+
# Returns the width of the sprite.
|
121
|
+
#
|
122
|
+
# @return [Numeric] width
|
123
|
+
#
|
124
|
+
def width()
|
125
|
+
@view__.width
|
53
126
|
end
|
54
127
|
|
55
|
-
|
56
|
-
|
128
|
+
# Returns the height of the sprite.
|
129
|
+
#
|
130
|
+
# @return [Numeric] height
|
131
|
+
#
|
132
|
+
def height()
|
133
|
+
@view__.height
|
57
134
|
end
|
58
135
|
|
136
|
+
alias w width
|
137
|
+
alias h height
|
138
|
+
|
139
|
+
# Returns the velocity of the sprite.
|
140
|
+
#
|
141
|
+
# @return [Vector] velocity
|
142
|
+
#
|
59
143
|
def velocity()
|
60
144
|
@view__.velocity.toVector
|
61
145
|
end
|
62
146
|
|
63
|
-
|
64
|
-
|
147
|
+
# Sets the velocity of the sprite.
|
148
|
+
#
|
149
|
+
# @overload velocity=(vec)
|
150
|
+
# @param [Vector] vec velocity vector
|
151
|
+
#
|
152
|
+
# @overload velocity=(ary)
|
153
|
+
# @param [Array<Numeric>] ary velocityX, velocityY
|
154
|
+
#
|
155
|
+
# @return [Vector] velocity
|
156
|
+
#
|
157
|
+
def velocity=(arg)
|
158
|
+
@view__.velocity = arg.is_a?(Vector) ? arg.getInternal__ : arg
|
159
|
+
arg
|
65
160
|
end
|
66
161
|
|
162
|
+
# Returns the x-axis velocity of the sprite.
|
163
|
+
#
|
164
|
+
# @return [Numeric] velocity.x
|
165
|
+
#
|
67
166
|
def vx()
|
68
167
|
@view__.velocity.x
|
69
168
|
end
|
70
169
|
|
71
|
-
|
72
|
-
|
73
|
-
|
170
|
+
# Sets the x-axis velocity of the sprite.
|
171
|
+
#
|
172
|
+
# @param [Numeric] n x-axis velocity
|
173
|
+
#
|
174
|
+
# @return [Numeric] velocity.x
|
175
|
+
#
|
176
|
+
def vx=(n)
|
177
|
+
@view__.velocity = @view__.velocity.tap {|v| v.x = n}
|
178
|
+
n
|
74
179
|
end
|
75
180
|
|
181
|
+
# Returns the y-axis velocity of the sprite.
|
182
|
+
#
|
183
|
+
# @return [Numeric] velocity.y
|
184
|
+
#
|
76
185
|
def vy()
|
77
186
|
@view__.velocity.y
|
78
187
|
end
|
79
188
|
|
80
|
-
|
81
|
-
|
82
|
-
|
189
|
+
# Sets the y-axis velocity of the sprite.
|
190
|
+
#
|
191
|
+
# @param [Numeric] n y-axis velocity
|
192
|
+
#
|
193
|
+
# @return [Numeric] velocity.y
|
194
|
+
#
|
195
|
+
def vy=(n)
|
196
|
+
@view__.velocity = @view__.velocity.tap {|v| v.y = n}
|
197
|
+
n
|
198
|
+
end
|
199
|
+
|
200
|
+
alias vel velocity
|
201
|
+
alias vel= velocity=
|
202
|
+
|
203
|
+
# Returns the image of the sprite.
|
204
|
+
#
|
205
|
+
# @return [Image] sprite image
|
206
|
+
#
|
207
|
+
def image()
|
208
|
+
@image__
|
209
|
+
end
|
210
|
+
|
211
|
+
# Sets the sprite image.
|
212
|
+
#
|
213
|
+
# @param [Image] img sprite image
|
214
|
+
#
|
215
|
+
# @return [Image] sprite image
|
216
|
+
#
|
217
|
+
def image=(img)
|
218
|
+
@image__ = img
|
219
|
+
end
|
220
|
+
|
221
|
+
# Returns the offset of the sprite image.
|
222
|
+
#
|
223
|
+
# @return [Vector] offset of the sprite image
|
224
|
+
#
|
225
|
+
def offset()
|
226
|
+
@offset__
|
227
|
+
end
|
228
|
+
|
229
|
+
def offset=(arg)
|
230
|
+
@offset__ =
|
231
|
+
case arg
|
232
|
+
when Vector then arg
|
233
|
+
when Array then Vector.new(*arg[0, 2])
|
234
|
+
when nil then nil
|
235
|
+
else raise ArgumentError
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
# Returns whether the sprite is movable by the physics engine.
|
240
|
+
#
|
241
|
+
# @return [Boolean] true if dynamic
|
242
|
+
#
|
243
|
+
def dynamic?()
|
244
|
+
@view__.dynamic?
|
245
|
+
end
|
246
|
+
|
247
|
+
# Sets whether the sprite is movable by the physics engine.
|
248
|
+
#
|
249
|
+
# @param [Boolean] bool movable or not
|
250
|
+
#
|
251
|
+
# @return [Boolean] true if dynamic
|
252
|
+
#
|
253
|
+
def dynamic=(bool)
|
254
|
+
@view__.dynamic = bool
|
255
|
+
bool
|
256
|
+
end
|
257
|
+
|
258
|
+
# Returns the density of the sprite.
|
259
|
+
#
|
260
|
+
# @return [Numeric] density
|
261
|
+
#
|
262
|
+
def density()
|
263
|
+
@view__.density
|
264
|
+
end
|
265
|
+
|
266
|
+
# Sets the density of the sprite.
|
267
|
+
#
|
268
|
+
# @param [Numeric] n density
|
269
|
+
#
|
270
|
+
# @return [Numeric] density
|
271
|
+
#
|
272
|
+
def density=(n)
|
273
|
+
@view__.density = n
|
274
|
+
n
|
275
|
+
end
|
276
|
+
|
277
|
+
# Returns the friction of the sprite.
|
278
|
+
#
|
279
|
+
# @return [Numeric] friction
|
280
|
+
#
|
281
|
+
def friction()
|
282
|
+
@view__.friction
|
283
|
+
end
|
284
|
+
|
285
|
+
# Sets the friction of the sprite.
|
286
|
+
#
|
287
|
+
# @param [Numeric] n friction
|
288
|
+
#
|
289
|
+
# @return [Numeric] friction
|
290
|
+
#
|
291
|
+
def friction=(n)
|
292
|
+
@view__.friction = n
|
293
|
+
n
|
294
|
+
end
|
295
|
+
|
296
|
+
# Returns the restitution of the sprite.
|
297
|
+
#
|
298
|
+
# @return [Numeric] restitution
|
299
|
+
#
|
300
|
+
def restitution()
|
301
|
+
@view__.restitution
|
302
|
+
end
|
303
|
+
|
304
|
+
# Sets the restitution of the sprite.
|
305
|
+
#
|
306
|
+
# @param [Numeric] n restitution
|
307
|
+
#
|
308
|
+
# @return [Numeric] restitution
|
309
|
+
#
|
310
|
+
def restitution=(n)
|
311
|
+
@view__.restitution = n
|
312
|
+
n
|
83
313
|
end
|
84
314
|
|
85
|
-
alias pos position
|
86
|
-
alias pos= position=
|
87
|
-
alias vel velocity
|
88
|
-
alias vel= velocity=
|
89
315
|
alias dens density
|
90
316
|
alias dens= density=
|
91
317
|
alias fric friction
|
92
|
-
alias fric= friction
|
318
|
+
alias fric= friction=
|
93
319
|
alias rest restitution
|
94
320
|
alias rest= restitution=
|
95
321
|
|
322
|
+
# Defines update block.
|
323
|
+
#
|
324
|
+
# @example vx is updated every frame
|
325
|
+
# sprite.update do
|
326
|
+
# self.vx *= 0.9
|
327
|
+
# end
|
328
|
+
#
|
329
|
+
# @return [nil] nil
|
330
|
+
#
|
331
|
+
def update(&block)
|
332
|
+
@view__.update = block
|
333
|
+
end
|
334
|
+
|
335
|
+
# Defines contact block.
|
336
|
+
#
|
337
|
+
# @example Score increases when the player sprite touches a coin
|
338
|
+
# playerSprite.contact do |o|
|
339
|
+
# score += 1 if o.coin?
|
340
|
+
# end
|
341
|
+
#
|
342
|
+
# @return [nil] nil
|
343
|
+
#
|
344
|
+
def contact(&block)
|
345
|
+
@view__.contact = block
|
346
|
+
end
|
347
|
+
|
348
|
+
# Defines contact? block.
|
349
|
+
#
|
350
|
+
# @example only collide with an enemy
|
351
|
+
# playerSprite.contact? do |o|
|
352
|
+
# o.enemy?
|
353
|
+
# end
|
354
|
+
#
|
355
|
+
# @return [nil] nil
|
356
|
+
#
|
357
|
+
def contact?(&block)
|
358
|
+
@view__.will_contact = block
|
359
|
+
end
|
360
|
+
|
361
|
+
# @private
|
362
|
+
def on_draw__(x, y, w, h)
|
363
|
+
img, off = frame, @image__, @offset__
|
364
|
+
if img && off
|
365
|
+
copy img, off.x, off.y, f.w, h, x, y, w, h
|
366
|
+
elsif img
|
367
|
+
image img, x, y
|
368
|
+
else
|
369
|
+
rect x, y, w, h
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
96
373
|
# @private
|
97
374
|
def getInternal__()
|
98
375
|
@view__
|
99
376
|
end
|
100
377
|
|
101
|
-
|
102
|
-
attr_accessor :update, :contact, :will_contact
|
103
|
-
attr_reader :sprite
|
378
|
+
end# Sprite
|
104
379
|
|
105
|
-
def initialize(sprite, *a, **k, &b)
|
106
|
-
@sprite = sprite
|
107
|
-
super(*a, **k, &b)
|
108
|
-
end
|
109
380
|
|
110
|
-
|
111
|
-
|
112
|
-
end
|
381
|
+
# @private
|
382
|
+
class SpriteView < Reflex::View
|
113
383
|
|
114
|
-
|
115
|
-
|
116
|
-
@contact.call v.sprite, e.action if @contact && v.is_a?(View)
|
117
|
-
end
|
384
|
+
attr_accessor :update, :contact, :will_contact
|
385
|
+
attr_reader :sprite
|
118
386
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
end
|
387
|
+
def initialize(sprite, *a, **k, &b)
|
388
|
+
@sprite = sprite
|
389
|
+
super(*a, **k, &b)
|
123
390
|
end
|
124
391
|
|
125
|
-
|
392
|
+
def on_update(e)
|
393
|
+
@update.call if @update
|
394
|
+
end
|
395
|
+
|
396
|
+
def on_contact(e)
|
397
|
+
v = e.view
|
398
|
+
@contact.call v.sprite, e.action if @contact && v.is_a?(SpriteView)
|
399
|
+
end
|
400
|
+
|
401
|
+
def will_contact?(v)
|
402
|
+
return true if !@will_contact || !v.is_a?(SpriteView)
|
403
|
+
@will_contact.call v.sprite
|
404
|
+
end
|
405
|
+
|
406
|
+
end# SpriteView
|
126
407
|
|
127
408
|
|
128
409
|
end# RubySketch
|
data/lib/rubysketch/window.rb
CHANGED
data/pod.rake
CHANGED
@@ -19,15 +19,17 @@ task :setup
|
|
19
19
|
|
20
20
|
repos.each do |repo, ver|
|
21
21
|
rakefile = "#{repo}/Rakefile"
|
22
|
-
opts =
|
23
|
-
|
24
|
-
branch
|
25
|
-
|
22
|
+
opts = [
|
23
|
+
'-c advice.detachedHead=false',
|
24
|
+
'--no-single-branch',
|
25
|
+
'--depth 1',
|
26
|
+
"--branch #{ENV['RUBYSKETCH_BRANCH'] || ('v' + ver)}"
|
27
|
+
]
|
26
28
|
|
27
29
|
task :setup => rakefile
|
28
30
|
|
29
31
|
file rakefile do
|
30
|
-
sh %( git clone #{opts} #{github}/#{repo} )
|
32
|
+
sh %( git clone #{opts.join ' '} #{github}/#{repo} )
|
31
33
|
sh %( cd #{repo} && VENDOR_NOCOMPILE=1 rake vendor erb )
|
32
34
|
end
|
33
35
|
end
|
data/rubysketch.gemspec
CHANGED
@@ -28,12 +28,12 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.platform = Gem::Platform::RUBY
|
29
29
|
s.required_ruby_version = '>= 2.7.0'
|
30
30
|
|
31
|
-
s.add_runtime_dependency 'xot', '~> 0.1.
|
32
|
-
s.add_runtime_dependency 'rucy', '~> 0.1.
|
33
|
-
s.add_runtime_dependency 'beeps', '~> 0.1.
|
34
|
-
s.add_runtime_dependency 'rays', '~> 0.1.
|
35
|
-
s.add_runtime_dependency 'reflexion', '~> 0.1.
|
36
|
-
s.add_runtime_dependency 'processing', '~> 0.5.
|
31
|
+
s.add_runtime_dependency 'xot', '~> 0.1.34'
|
32
|
+
s.add_runtime_dependency 'rucy', '~> 0.1.34'
|
33
|
+
s.add_runtime_dependency 'beeps', '~> 0.1.35'
|
34
|
+
s.add_runtime_dependency 'rays', '~> 0.1.34'
|
35
|
+
s.add_runtime_dependency 'reflexion', '~> 0.1.35'
|
36
|
+
s.add_runtime_dependency 'processing', '~> 0.5.5'
|
37
37
|
|
38
38
|
s.add_development_dependency 'rake'
|
39
39
|
s.add_development_dependency 'test-unit'
|
data/test/test_sound.rb
CHANGED
@@ -73,7 +73,7 @@ class TestSound < Test::Unit::TestCase
|
|
73
73
|
assert_equal [false, false, true], [s.playing?, s.paused?, s.stopped?]
|
74
74
|
end
|
75
75
|
|
76
|
-
def
|
76
|
+
def test_save_load()
|
77
77
|
s = sound
|
78
78
|
|
79
79
|
File.delete PATH
|
@@ -81,10 +81,8 @@ class TestSound < Test::Unit::TestCase
|
|
81
81
|
|
82
82
|
s.save PATH
|
83
83
|
assert_true File.exist? PATH
|
84
|
-
end
|
85
84
|
|
86
|
-
|
87
|
-
assert_nothing_raised {sound.play}
|
85
|
+
assert_nothing_raised {RS::Sound.load(PATH).play}
|
88
86
|
end
|
89
87
|
|
90
88
|
end# TestSound
|
data/test/test_sprite.rb
CHANGED
@@ -6,18 +6,190 @@ require_relative 'helper'
|
|
6
6
|
|
7
7
|
class TestSprite < Test::Unit::TestCase
|
8
8
|
|
9
|
+
RS = RubySketch
|
10
|
+
|
9
11
|
def sprite(*args, **kwargs)
|
10
|
-
|
12
|
+
RS::Sprite.new(*args, **kwargs)
|
11
13
|
end
|
12
14
|
|
13
15
|
def vec(*args, **kwargs)
|
14
|
-
|
16
|
+
RS::Vector.new(*args, **kwargs)
|
17
|
+
end
|
18
|
+
|
19
|
+
def image(w, h)
|
20
|
+
RS::Image.new Rays::Image.new(w, h)
|
15
21
|
end
|
16
22
|
|
17
23
|
def test_initialize()
|
18
|
-
assert_equal 0,
|
19
|
-
assert_equal
|
20
|
-
assert_equal vec(
|
24
|
+
assert_equal vec(0, 0), sprite .pos
|
25
|
+
assert_equal vec(1, 2), sprite(1, 2) .pos
|
26
|
+
assert_equal vec(1, 2), sprite(1, 2, 3, 4).pos
|
27
|
+
|
28
|
+
assert_equal vec(0, 0), sprite .size
|
29
|
+
assert_equal vec(3, 4), sprite(1, 2, 3, 4) .size
|
30
|
+
assert_equal vec(5, 6), sprite( image: image(5, 6)).size
|
31
|
+
assert_equal vec(5, 6), sprite(1, 2, image: image(5, 6)).size
|
32
|
+
assert_equal vec(3, 4), sprite(1, 2, 3, 4, image: image(5, 6)).size
|
33
|
+
|
34
|
+
assert_equal nil, sprite .image
|
35
|
+
assert_equal [1, 2], sprite(image: image(1, 2)).image.size
|
36
|
+
|
37
|
+
assert_equal nil, sprite.offset
|
38
|
+
assert_equal vec(1, 2), sprite(offset: [1, 2]).offset
|
39
|
+
assert_equal vec(1, 2), sprite(offset: vec(1, 2)).offset
|
40
|
+
|
41
|
+
assert_raise {sprite 0, 0, -1, 0}
|
42
|
+
assert_raise {sprite 0, 0, 0, -1}
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_position()
|
46
|
+
s = sprite
|
47
|
+
assert_equal vec(0, 0), s.pos
|
48
|
+
|
49
|
+
s.pos = vec(1, 2)
|
50
|
+
assert_equal vec(1, 2), s.pos
|
51
|
+
|
52
|
+
s.pos = [3, 4]
|
53
|
+
assert_equal vec(3, 4), s.pos
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_xy()
|
57
|
+
s = sprite
|
58
|
+
assert_equal 0, s.x
|
59
|
+
assert_equal vec(0, 0), s.pos
|
60
|
+
|
61
|
+
s.x = 1
|
62
|
+
assert_equal 1, s.x
|
63
|
+
assert_equal vec(1, 0), s.pos
|
64
|
+
|
65
|
+
s.y = 2
|
66
|
+
assert_equal 2, s.y
|
67
|
+
assert_equal vec(1, 2), s.pos
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_size()
|
71
|
+
assert_equal vec(0, 0), sprite .size
|
72
|
+
assert_equal vec(1, 0), sprite(0, 0, 1) .size
|
73
|
+
assert_equal vec(1, 2), sprite(0, 0, 1, 2) .size
|
74
|
+
assert_equal vec(3, 4), sprite(image: image(3, 4)).size
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_wh()
|
78
|
+
assert_equal 1, sprite(0, 0, 1, 2).width
|
79
|
+
assert_equal 2, sprite(0, 0, 1, 2).height
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_velocity()
|
83
|
+
s = sprite
|
84
|
+
assert_equal vec(0, 0), s.vel
|
85
|
+
|
86
|
+
s.vel = vec(1, 2)
|
87
|
+
assert_equal vec(1, 2), s.vel
|
88
|
+
|
89
|
+
s.vel = [3, 4]
|
90
|
+
assert_equal vec(3, 4), s.vel
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_vxvy()
|
94
|
+
s = sprite
|
95
|
+
assert_equal 0, s.vx
|
96
|
+
assert_equal vec(0, 0), s.vel
|
97
|
+
|
98
|
+
s.vx = 1
|
99
|
+
assert_equal 1, s.vx
|
100
|
+
assert_equal vec(1, 0), s.vel
|
101
|
+
|
102
|
+
s.vy = 2
|
103
|
+
assert_equal 2, s.vy
|
104
|
+
assert_equal vec(1, 2), s.vel
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_image()
|
108
|
+
s = sprite
|
109
|
+
assert_equal nil, s.image
|
110
|
+
|
111
|
+
s.image = image(1, 2)
|
112
|
+
assert_equal [1, 2], s.image.size
|
113
|
+
|
114
|
+
s.image = image(3, 4)
|
115
|
+
assert_equal [3, 4], s.image.size
|
116
|
+
|
117
|
+
s.image = nil
|
118
|
+
assert_equal nil, s.image
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_offset()
|
122
|
+
s = sprite
|
123
|
+
assert_equal nil, s.offset
|
124
|
+
|
125
|
+
s.offset = [1, 2]
|
126
|
+
assert_equal vec(1, 2), s.offset
|
127
|
+
|
128
|
+
s.offset = vec(3, 4)
|
129
|
+
assert_equal vec(3, 4), s.offset
|
130
|
+
|
131
|
+
s.offset = nil
|
132
|
+
assert_equal nil, s.offset
|
133
|
+
|
134
|
+
assert_raise(ArgumentError) {s.offset = 1}
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_dynamic?()
|
138
|
+
s = sprite
|
139
|
+
assert_equal false, s.dynamic?
|
140
|
+
|
141
|
+
s.dynamic = true
|
142
|
+
assert_equal true, s.dynamic?
|
143
|
+
|
144
|
+
s.dynamic = false
|
145
|
+
assert_equal false, s.dynamic?
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_density()
|
149
|
+
s = sprite
|
150
|
+
assert_equal 0, s.dens
|
151
|
+
|
152
|
+
s.dens = 1
|
153
|
+
assert_equal 1, s.dens
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_friction()
|
157
|
+
s = sprite
|
158
|
+
assert_equal 0, s.fric
|
159
|
+
|
160
|
+
s.fric = 1
|
161
|
+
assert_equal 1, s.fric
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_restitution()
|
165
|
+
s = sprite
|
166
|
+
assert_equal 0, s.rest
|
167
|
+
|
168
|
+
s.rest = 1
|
169
|
+
assert_equal 1, s.rest
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_blocks()
|
173
|
+
s = sprite
|
174
|
+
v = s.instance_variable_get :@view__
|
175
|
+
assert_nil v.update
|
176
|
+
assert_nil v.contact
|
177
|
+
assert_nil v.will_contact
|
178
|
+
|
179
|
+
s.update {}
|
180
|
+
assert_not_nil v.update
|
181
|
+
assert_nil v.contact
|
182
|
+
assert_nil v.will_contact
|
183
|
+
|
184
|
+
s.contact {}
|
185
|
+
assert_not_nil v.update
|
186
|
+
assert_not_nil v.contact
|
187
|
+
assert_nil v.will_contact
|
188
|
+
|
189
|
+
s.contact? {}
|
190
|
+
assert_not_nil v.update
|
191
|
+
assert_not_nil v.contact
|
192
|
+
assert_not_nil v.will_contact
|
21
193
|
end
|
22
194
|
|
23
195
|
end# TestSprite
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubysketch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xordog
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xot
|
@@ -16,84 +16,84 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.
|
19
|
+
version: 0.1.34
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1.
|
26
|
+
version: 0.1.34
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rucy
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.1.
|
33
|
+
version: 0.1.34
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.1.
|
40
|
+
version: 0.1.34
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: beeps
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.1.
|
47
|
+
version: 0.1.35
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.1.
|
54
|
+
version: 0.1.35
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rays
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.1.
|
61
|
+
version: 0.1.34
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.1.
|
68
|
+
version: 0.1.34
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: reflexion
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.1.
|
75
|
+
version: 0.1.35
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.1.
|
82
|
+
version: 0.1.35
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: processing
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.5.
|
89
|
+
version: 0.5.5
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.5.
|
96
|
+
version: 0.5.5
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|