rubysketch 0.5.2 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|