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/lib/rubysketch/sprite.rb
CHANGED
@@ -1,101 +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
|
|
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
|
107
|
+
end
|
108
|
+
|
109
|
+
alias pos position
|
110
|
+
alias pos= position=
|
111
|
+
|
112
|
+
# Returns the size of the sprite.
|
113
|
+
#
|
114
|
+
# @return [Vector] size
|
115
|
+
#
|
43
116
|
def size()
|
44
117
|
@view__.size.toVector
|
45
118
|
end
|
46
119
|
|
120
|
+
# Returns the width of the sprite.
|
121
|
+
#
|
122
|
+
# @return [Numeric] width
|
123
|
+
#
|
124
|
+
def width()
|
125
|
+
@view__.width
|
126
|
+
end
|
127
|
+
|
128
|
+
# Returns the height of the sprite.
|
129
|
+
#
|
130
|
+
# @return [Numeric] height
|
131
|
+
#
|
132
|
+
def height()
|
133
|
+
@view__.height
|
134
|
+
end
|
135
|
+
|
136
|
+
alias w width
|
137
|
+
alias h height
|
138
|
+
|
139
|
+
# Returns the velocity of the sprite.
|
140
|
+
#
|
141
|
+
# @return [Vector] velocity
|
142
|
+
#
|
143
|
+
def velocity()
|
144
|
+
@view__.velocity.toVector
|
145
|
+
end
|
146
|
+
|
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
|
160
|
+
end
|
161
|
+
|
162
|
+
# Returns the x-axis velocity of the sprite.
|
163
|
+
#
|
164
|
+
# @return [Numeric] velocity.x
|
165
|
+
#
|
166
|
+
def vx()
|
167
|
+
@view__.velocity.x
|
168
|
+
end
|
169
|
+
|
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
|
179
|
+
end
|
180
|
+
|
181
|
+
# Returns the y-axis velocity of the sprite.
|
182
|
+
#
|
183
|
+
# @return [Numeric] velocity.y
|
184
|
+
#
|
185
|
+
def vy()
|
186
|
+
@view__.velocity.y
|
187
|
+
end
|
188
|
+
|
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
|
+
#
|
47
207
|
def image()
|
48
208
|
@image__
|
49
209
|
end
|
50
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
|
+
#
|
51
225
|
def offset()
|
52
226
|
@offset__
|
53
227
|
end
|
54
228
|
|
55
|
-
def
|
56
|
-
@
|
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?
|
57
245
|
end
|
58
246
|
|
59
|
-
|
60
|
-
|
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
|
61
313
|
end
|
62
314
|
|
63
|
-
alias pos position
|
64
|
-
alias pos= position=
|
65
|
-
alias vel velocity
|
66
|
-
alias vel= velocity=
|
67
315
|
alias dens density
|
68
316
|
alias dens= density=
|
69
317
|
alias fric friction
|
70
|
-
alias fric= friction
|
318
|
+
alias fric= friction=
|
71
319
|
alias rest restitution
|
72
320
|
alias rest= restitution=
|
73
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
|
+
|
74
373
|
# @private
|
75
374
|
def getInternal__()
|
76
375
|
@view__
|
77
376
|
end
|
78
377
|
|
79
|
-
|
80
|
-
attr_accessor :update, :contact
|
81
|
-
attr_reader :sprite
|
378
|
+
end# Sprite
|
82
379
|
|
83
|
-
def initialize(sprite, *a, **k, &b)
|
84
|
-
@sprite = sprite
|
85
|
-
super(*a, **k, &b)
|
86
|
-
end
|
87
380
|
|
88
|
-
|
89
|
-
|
90
|
-
end
|
381
|
+
# @private
|
382
|
+
class SpriteView < Reflex::View
|
91
383
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
384
|
+
attr_accessor :update, :contact, :will_contact
|
385
|
+
attr_reader :sprite
|
386
|
+
|
387
|
+
def initialize(sprite, *a, **k, &b)
|
388
|
+
@sprite = sprite
|
389
|
+
super(*a, **k, &b)
|
96
390
|
end
|
97
391
|
|
98
|
-
|
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
|
99
407
|
|
100
408
|
|
101
409
|
end# RubySketch
|
data/lib/rubysketch.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubysketch/all'
|
|
2
2
|
|
3
3
|
|
4
4
|
module RubySketch
|
5
|
-
WINDOW =
|
5
|
+
WINDOW = RubySketch::Window.new {start}
|
6
6
|
CONTEXT = RubySketch::Context.new WINDOW
|
7
7
|
|
8
8
|
refine Object do
|
@@ -25,6 +25,6 @@ begin
|
|
25
25
|
w.__send__ :begin_draw
|
26
26
|
at_exit do
|
27
27
|
w.__send__ :end_draw
|
28
|
-
Processing::App.new {w.show}.start if c.
|
28
|
+
Processing::App.new {w.show}.start if c.hasUserBlocks__ && !$!
|
29
29
|
end
|
30
30
|
end
|
data/pod.rake
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
|
3
|
+
|
4
|
+
github = 'https://github.com/xord'
|
5
|
+
renames = {reflexion: 'reflex'}
|
6
|
+
regexp = /add\w+dependency.*['"](\w+)['"].*['"]\s*~>\s*([\d\.]+)\s*['"]/
|
7
|
+
repos = File.readlines('rubysketch.gemspec', chomp: true)
|
8
|
+
.map {|s| regexp.match(s)&.values_at 1, 2}
|
9
|
+
.compact
|
10
|
+
.to_h
|
11
|
+
.transform_keys {|name| renames[name.to_sym].then {|s| s || name}}
|
12
|
+
|
13
|
+
|
14
|
+
task :clobber do
|
15
|
+
sh %( rm -rf #{repos.keys.join ' '} )
|
16
|
+
end
|
17
|
+
|
18
|
+
task :setup
|
19
|
+
|
20
|
+
repos.each do |repo, ver|
|
21
|
+
rakefile = "#{repo}/Rakefile"
|
22
|
+
opts = [
|
23
|
+
'-c advice.detachedHead=false',
|
24
|
+
'--no-single-branch',
|
25
|
+
'--depth 1',
|
26
|
+
"--branch #{ENV['RUBYSKETCH_BRANCH'] || ('v' + ver)}"
|
27
|
+
]
|
28
|
+
|
29
|
+
task :setup => rakefile
|
30
|
+
|
31
|
+
file rakefile do
|
32
|
+
sh %( git clone #{opts.join ' '} #{github}/#{repo} )
|
33
|
+
sh %( cd #{repo} && VENDOR_NOCOMPILE=1 rake vendor erb )
|
34
|
+
end
|
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/src/RubySketch.h
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
// -*- mode: objc -*-
|
2
|
+
#import <Foundation/Foundation.h>
|
3
|
+
#import <CRBValue.h>
|
4
|
+
|
5
|
+
|
6
|
+
@interface RubySketch : NSObject
|
7
|
+
|
8
|
+
typedef void (^RescueBlock) (CRBValue* exception);
|
9
|
+
|
10
|
+
+ (void) setup;
|
11
|
+
|
12
|
+
+ (BOOL) start;
|
13
|
+
+ (BOOL) startWithRescue: (RescueBlock) rescue;
|
14
|
+
|
15
|
+
+ (BOOL) start: (NSString*) path;
|
16
|
+
+ (BOOL) start: (NSString*) path rescue: (RescueBlock) rescue;
|
17
|
+
|
18
|
+
+ (void) setActiveReflexViewController: (id) reflexViewController;
|
19
|
+
|
20
|
+
+ (void) resetActiveReflexViewController;
|
21
|
+
|
22
|
+
@end
|
data/src/RubySketch.mm
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
// -*- mode: objc -*-
|
2
|
+
#import <CRuby.h>
|
3
|
+
#import "RubySketch.h"
|
4
|
+
#include "../reflex/src/ios/view_controller.h"
|
5
|
+
|
6
|
+
|
7
|
+
extern "C"
|
8
|
+
{
|
9
|
+
void Init_beeps_native ();
|
10
|
+
void Init_rays_native ();
|
11
|
+
void Init_reflex_native ();
|
12
|
+
}
|
13
|
+
|
14
|
+
|
15
|
+
static ReflexViewController* active_reflex_view_controller = nil;
|
16
|
+
|
17
|
+
static ReflexViewController*
|
18
|
+
ReflexViewController_create()
|
19
|
+
{
|
20
|
+
return active_reflex_view_controller;
|
21
|
+
}
|
22
|
+
|
23
|
+
static void
|
24
|
+
ReflexViewController_show (UIViewController*, ReflexViewController*)
|
25
|
+
{
|
26
|
+
}
|
27
|
+
|
28
|
+
|
29
|
+
@implementation RubySketch
|
30
|
+
|
31
|
+
+ (void) setup
|
32
|
+
{
|
33
|
+
static BOOL done = NO;
|
34
|
+
if (done) return;
|
35
|
+
done = YES;
|
36
|
+
|
37
|
+
[CRuby addExtension:@"beeps/native" init:^{Init_beeps_native();}];
|
38
|
+
[CRuby addExtension:@"rays/native" init:^{Init_rays_native();}];
|
39
|
+
[CRuby addExtension:@"reflex/native" init:^{Init_reflex_native();}];
|
40
|
+
|
41
|
+
for (NSString *ext in @[
|
42
|
+
@"Xot",
|
43
|
+
@"Rucy",
|
44
|
+
@"Beeps",
|
45
|
+
@"Rays",
|
46
|
+
@"Reflex",
|
47
|
+
@"Processing",
|
48
|
+
@"RubySketch"
|
49
|
+
]) [CRuby addLibrary:ext bundle:[NSBundle bundleForClass:RubySketch.class]];
|
50
|
+
|
51
|
+
ReflexViewController_set_create_fun(ReflexViewController_create);
|
52
|
+
ReflexViewController_set_show_fun(ReflexViewController_show);
|
53
|
+
}
|
54
|
+
|
55
|
+
+ (BOOL) start
|
56
|
+
{
|
57
|
+
return [self start:@"main.rb" rescue:nil];
|
58
|
+
}
|
59
|
+
|
60
|
+
+ (BOOL) startWithRescue: (RescueBlock) rescue
|
61
|
+
{
|
62
|
+
return [self start:@"main.rb" rescue:rescue];
|
63
|
+
}
|
64
|
+
|
65
|
+
+ (BOOL) start: (NSString*) path
|
66
|
+
{
|
67
|
+
return [self start:path rescue:nil];
|
68
|
+
}
|
69
|
+
|
70
|
+
+ (BOOL) start: (NSString*) path rescue: (RescueBlock) rescue
|
71
|
+
{
|
72
|
+
CRBValue* ret = [CRuby evaluate:[NSString stringWithFormat:@
|
73
|
+
"raise 'already started' unless require 'rubysketch'\n"
|
74
|
+
"load '%@'\n"
|
75
|
+
"RubySketch::WINDOW.__send__ :end_draw\n"
|
76
|
+
"RubySketch::WINDOW.show",
|
77
|
+
path
|
78
|
+
]];
|
79
|
+
return ret && ret.toBOOL;
|
80
|
+
}
|
81
|
+
|
82
|
+
+ (void) setActiveReflexViewController: (id) reflexViewController
|
83
|
+
{
|
84
|
+
active_reflex_view_controller = reflexViewController;
|
85
|
+
}
|
86
|
+
|
87
|
+
+ (void) resetActiveReflexViewController
|
88
|
+
{
|
89
|
+
active_reflex_view_controller = nil;
|
90
|
+
}
|
91
|
+
|
92
|
+
@end
|
data/test/helper.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
|
4
|
-
%w[../xot ../rucy ../rays ../reflex ../processing .]
|
4
|
+
%w[../xot ../rucy ../beeps ../rays ../reflex ../processing .]
|
5
5
|
.map {|s| File.expand_path "../#{s}/lib", __dir__}
|
6
6
|
.each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
|
7
7
|
|
8
|
-
require 'test/unit'
|
9
8
|
require 'xot/test'
|
10
9
|
require 'rubysketch/all'
|
11
10
|
|
11
|
+
require 'test/unit'
|
12
|
+
|
12
13
|
include Xot::Test
|