rubysketch 0.5.2 → 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/release-gem.yml +1 -1
- data/.github/workflows/utils.rb +2 -1
- data/ChangeLog.md +17 -0
- data/RubySketch.podspec +114 -12
- data/VERSION +1 -1
- data/examples/hello.rb +1 -1
- data/lib/rubysketch/all.rb +11 -1
- data/lib/rubysketch/context.rb +73 -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 +86 -0
- data/lib/rubysketch/sprite.rb +356 -48
- data/lib/rubysketch/window.rb +14 -0
- data/lib/rubysketch.rb +2 -2
- data/pod.rake +35 -0
- data/rubysketch.gemspec +6 -6
- data/src/RubySketch.h +22 -0
- data/src/RubySketch.mm +92 -0
- data/test/helper.rb +3 -2
- data/test/test_sound.rb +88 -0
- data/test/test_sprite.rb +177 -5
- metadata +22 -17
- data/src/RubyProcessing.h +0 -11
- data/src/RubyProcessing.mm +0 -25
data/test/test_sound.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require_relative 'helper'
|
5
|
+
|
6
|
+
|
7
|
+
class TestSound < Test::Unit::TestCase
|
8
|
+
|
9
|
+
RS = RubySketch
|
10
|
+
B = Beeps
|
11
|
+
|
12
|
+
PATH = 'test.wav'
|
13
|
+
|
14
|
+
def sound()
|
15
|
+
RS::Sound.load PATH
|
16
|
+
end
|
17
|
+
|
18
|
+
def setup()
|
19
|
+
B::Sound.new(B::Oscillator.new >> B::Gain.new(gain: 0), 0.1).save PATH
|
20
|
+
end
|
21
|
+
|
22
|
+
def teardown()
|
23
|
+
B::SoundPlayer.stop_all
|
24
|
+
File.delete PATH if File.exist?(PATH)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_play()
|
28
|
+
s = sound
|
29
|
+
assert_equal [false, false, true], [s.playing?, s.paused?, s.stopped?]
|
30
|
+
s.play
|
31
|
+
assert_equal [true, false, false], [s.playing?, s.paused?, s.stopped?]
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_pause()
|
35
|
+
s = sound
|
36
|
+
s.play
|
37
|
+
assert_equal [true, false, false], [s.playing?, s.paused?, s.stopped?]
|
38
|
+
s.pause
|
39
|
+
assert_equal [false, true, false], [s.playing?, s.paused?, s.stopped?]
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_stop()
|
43
|
+
s = sound
|
44
|
+
s.play
|
45
|
+
assert_equal [true, false, false], [s.playing?, s.paused?, s.stopped?]
|
46
|
+
s.stop
|
47
|
+
assert_equal [false, false, true], [s.playing?, s.paused?, s.stopped?]
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_play_end_then_stop()
|
51
|
+
s = sound
|
52
|
+
s.play
|
53
|
+
assert_equal [true, false, false], [s.playing?, s.paused?, s.stopped?]
|
54
|
+
sleep 0.2
|
55
|
+
assert_equal [false, false, true], [s.playing?, s.paused?, s.stopped?]
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_play_after_pause()
|
59
|
+
s = sound
|
60
|
+
s.play
|
61
|
+
s.pause
|
62
|
+
assert_equal [false, true, false], [s.playing?, s.paused?, s.stopped?]
|
63
|
+
s.play
|
64
|
+
assert_equal [true, false, false], [s.playing?, s.paused?, s.stopped?]
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_stop_after_pause()
|
68
|
+
s = sound
|
69
|
+
s.play
|
70
|
+
s.pause
|
71
|
+
assert_equal [false, true, false], [s.playing?, s.paused?, s.stopped?]
|
72
|
+
s.stop
|
73
|
+
assert_equal [false, false, true], [s.playing?, s.paused?, s.stopped?]
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_save_load()
|
77
|
+
s = sound
|
78
|
+
|
79
|
+
File.delete PATH
|
80
|
+
assert_false File.exist? PATH
|
81
|
+
|
82
|
+
s.save PATH
|
83
|
+
assert_true File.exist? PATH
|
84
|
+
|
85
|
+
assert_nothing_raised {RS::Sound.load(PATH).play}
|
86
|
+
end
|
87
|
+
|
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-
|
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
|
@@ -162,11 +162,15 @@ files:
|
|
162
162
|
- lib/rubysketch/extension.rb
|
163
163
|
- lib/rubysketch/graphics_context.rb
|
164
164
|
- lib/rubysketch/helper.rb
|
165
|
+
- lib/rubysketch/sound.rb
|
165
166
|
- lib/rubysketch/sprite.rb
|
167
|
+
- lib/rubysketch/window.rb
|
168
|
+
- pod.rake
|
166
169
|
- rubysketch.gemspec
|
167
|
-
- src/
|
168
|
-
- src/
|
170
|
+
- src/RubySketch.h
|
171
|
+
- src/RubySketch.mm
|
169
172
|
- test/helper.rb
|
173
|
+
- test/test_sound.rb
|
170
174
|
- test/test_sprite.rb
|
171
175
|
homepage: https://github.com/xord/rubysketch
|
172
176
|
licenses: []
|
@@ -186,10 +190,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
190
|
- !ruby/object:Gem::Version
|
187
191
|
version: '0'
|
188
192
|
requirements: []
|
189
|
-
rubygems_version: 3.4.
|
193
|
+
rubygems_version: 3.4.10
|
190
194
|
signing_key:
|
191
195
|
specification_version: 4
|
192
196
|
summary: A game engine based on the Processing API.
|
193
197
|
test_files:
|
194
198
|
- test/helper.rb
|
199
|
+
- test/test_sound.rb
|
195
200
|
- test/test_sprite.rb
|
data/src/RubyProcessing.h
DELETED
data/src/RubyProcessing.mm
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
// -*- mode: objc -*-
|
2
|
-
#import <CRuby.h>
|
3
|
-
#import "RubyProcessing.h"
|
4
|
-
#import "RubySketch.h"
|
5
|
-
|
6
|
-
|
7
|
-
@implementation RubySketch
|
8
|
-
|
9
|
-
+ (void) setup
|
10
|
-
{
|
11
|
-
static BOOL done = NO;
|
12
|
-
if (done) return;
|
13
|
-
done = YES;
|
14
|
-
|
15
|
-
[RubyProcessing setup];
|
16
|
-
[CRuby addLibrary:@"RubySketch" bundle:[NSBundle bundleForClass:RubySketch.class]];
|
17
|
-
}
|
18
|
-
|
19
|
-
+ (void) start: (NSString*) path
|
20
|
-
{
|
21
|
-
[CRuby evaluate:@"raise 'already started' unless require 'rubysketch'\n"];
|
22
|
-
[RubyProcessing start: path];
|
23
|
-
}
|
24
|
-
|
25
|
-
@end
|