reight 0.2.2 → 0.3.0
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-wasm.yml +2 -2
- data/ChangeLog.md +17 -0
- data/VERSION +1 -1
- data/bin/r8 +1 -1
- data/lib/reight/all.rb +5 -4
- data/lib/reight/app/navigator.rb +1 -1
- data/lib/reight/app/runner.rb +4 -4
- data/lib/reight/context.rb +22 -8
- data/lib/reight/project.rb +1 -1
- data/lib/reight/reight.rb +1 -1
- data/lib/reight.rb +4 -4
- data/reight.gemspec +7 -7
- data/wasm/.gitignore +1 -0
- data/wasm/Gemfile +1 -1
- data/wasm/Rakefile +69 -60
- data/wasm/template/index.html.erb +26 -11
- metadata +16 -17
- data/wasm/Gemfile.lock +0 -96
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7f06e6fb613d24adc8fc5be3914d35e297870849d558dec1122f27209a69278f
|
|
4
|
+
data.tar.gz: 54887cce180015cbd1208c6a108d749acea130e024e8d26e6932137821c4c264
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2ad0a98e07067d11a93db027a92f48241b8fc68a0d91b9dd3041b6d0730c3826420b99080a02e7a7b4ff8260f5a1b10ea98c9ecead46b81ca9b49fdf328ba38a
|
|
7
|
+
data.tar.gz: 1c07419e16e73320956eb0a9165e6c54db23773f1cae236e9774b9061f3161462072d9318dbc53a17ddeee7297e66b98c91c58a6ae464aef29508731712026e0
|
data/ChangeLog.md
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
# reight ChangeLog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## [v0.3.0] - 2026-06-12
|
|
5
|
+
|
|
6
|
+
- [BREAKING] Drop redundant drawXxx aliases from GraphicsContext (from processing)
|
|
7
|
+
- [BREAKING] Make pixelDensity a keyword arg in createGraphics (from processing)
|
|
8
|
+
|
|
9
|
+
- Adopt the per-window Context model from Processing
|
|
10
|
+
- Support AUTO pixel density for sharp text in editor and game
|
|
11
|
+
- Make r8 command executable
|
|
12
|
+
- Bump wasm build to Ruby 4.0
|
|
13
|
+
- Untrack Gemfile.lock in wasm subproject
|
|
14
|
+
- Scope WASM build sources to gem src/ext/include/lib
|
|
15
|
+
- Switch test page to CDN-based asset loading
|
|
16
|
+
- Guard test:deploy with file preview and confirmation prompt
|
|
17
|
+
|
|
18
|
+
- Fix launch failure when chips image is missing
|
|
19
|
+
|
|
20
|
+
|
|
4
21
|
## [v0.2.2] - 2026-05-20
|
|
5
22
|
|
|
6
23
|
- Use Node 24 in WASM release workflow for npm Trusted Publishing
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.3.0
|
data/bin/r8
CHANGED
data/lib/reight/all.rb
CHANGED
|
@@ -6,13 +6,14 @@ module Reight
|
|
|
6
6
|
Processing.alias_snake_case_methods__ Processing
|
|
7
7
|
Processing.alias_snake_case_methods__ RubySketch
|
|
8
8
|
|
|
9
|
-
WINDOW__
|
|
9
|
+
WINDOW__ = Processing.setup__ RubySketch::Window, RubySketch::Context
|
|
10
|
+
$processing_context__ = WINDOW__.context
|
|
10
11
|
|
|
11
12
|
refine Object do
|
|
12
|
-
|
|
13
|
-
(Processing.funcs__(
|
|
13
|
+
klass = RubySketch::Context
|
|
14
|
+
(Processing.funcs__(klass) - Processing.events__(klass)).each do |func|
|
|
14
15
|
define_method func do |*args, **kwargs, &block|
|
|
15
|
-
|
|
16
|
+
$processing_context__.__send__ func, *args, **kwargs, &block
|
|
16
17
|
end
|
|
17
18
|
end
|
|
18
19
|
end
|
data/lib/reight/app/navigator.rb
CHANGED
data/lib/reight/app/runner.rb
CHANGED
|
@@ -2,7 +2,7 @@ class Reight::Runner < Reight::App
|
|
|
2
2
|
|
|
3
3
|
include Xot::Inspectable
|
|
4
4
|
|
|
5
|
-
ROOT_CONTEXT = Reight::
|
|
5
|
+
ROOT_CONTEXT = Reight::WINDOW__.context
|
|
6
6
|
|
|
7
7
|
TEMPORARY_HASH = {}
|
|
8
8
|
|
|
@@ -157,7 +157,7 @@ class Reight::Runner < Reight::App
|
|
|
157
157
|
backup_global_vars
|
|
158
158
|
@context = create_context
|
|
159
159
|
@paused = false
|
|
160
|
-
Processing::Context.
|
|
160
|
+
Processing::Context.setCurrent__ @context
|
|
161
161
|
begin_wrapping_user_classes @context
|
|
162
162
|
eval_user_script @context, project.code_paths.zip(project.codes).to_h
|
|
163
163
|
end
|
|
@@ -168,7 +168,7 @@ class Reight::Runner < Reight::App
|
|
|
168
168
|
|
|
169
169
|
def cleanup()
|
|
170
170
|
ROOT_CONTEXT.remove_world @context.spriteWorld__ if @context
|
|
171
|
-
Processing::Context.
|
|
171
|
+
Processing::Context.setCurrent__ nil
|
|
172
172
|
@context = nil
|
|
173
173
|
end_wrapping_user_classes
|
|
174
174
|
clear_all_timers
|
|
@@ -224,7 +224,7 @@ class Reight::Runner < Reight::App
|
|
|
224
224
|
alias_method snake, camel if snake != camel
|
|
225
225
|
end
|
|
226
226
|
|
|
227
|
-
Processing.funcs__(ROOT_CONTEXT).each do |func|
|
|
227
|
+
Processing.funcs__(ROOT_CONTEXT.class).each do |func|
|
|
228
228
|
next if method_defined? func
|
|
229
229
|
define_method(func) {|*a, **k, &b| ROOT_CONTEXT.__send__ func, *a, **k, &b}
|
|
230
230
|
end
|
data/lib/reight/context.rb
CHANGED
|
@@ -6,9 +6,12 @@ module Reight::Context
|
|
|
6
6
|
TIMER_PREFIX__ = '__r8__'
|
|
7
7
|
|
|
8
8
|
# @private
|
|
9
|
-
def initialize(rootContext, project)
|
|
10
|
-
@rootContext__, @project__ = rootContext, project
|
|
11
|
-
init__ Rays::Image.new(
|
|
9
|
+
def initialize(rootContext, project, pixelDensity: 1)
|
|
10
|
+
@rootContext__, @project__, @pixelDensity__ = rootContext, project, pixelDensity
|
|
11
|
+
init__ Rays::Image.new(
|
|
12
|
+
@rootContext__.width,
|
|
13
|
+
@rootContext__.height,
|
|
14
|
+
pixel_density: @pixelDensity__)
|
|
12
15
|
end
|
|
13
16
|
|
|
14
17
|
# Returns the project object.
|
|
@@ -40,14 +43,19 @@ module Reight::Context
|
|
|
40
43
|
end
|
|
41
44
|
|
|
42
45
|
# @see https://rubydoc.info/gems/rubysketch/RubySketch/Context#size-instance_method
|
|
43
|
-
def size(width, height,
|
|
44
|
-
|
|
45
|
-
@resizeCanvas__ = [width, height]
|
|
46
|
+
def size(width, height, pixelDensity: nil)
|
|
47
|
+
@resizeCanvas__ = [width, height, pixelDensity]
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
# @see https://rubydoc.info/gems/rubysketch/RubySketch/Context#createCanvas-instance_method
|
|
49
51
|
alias createCanvas size
|
|
50
52
|
|
|
53
|
+
# @see https://rubydoc.info/gems/rubysketch/RubySketch/Context#pixelDensity-instance_method
|
|
54
|
+
def pixelDensity(density = nil)
|
|
55
|
+
size width, height, pixelDensity: density if density
|
|
56
|
+
super()
|
|
57
|
+
end
|
|
58
|
+
|
|
51
59
|
# @see https://www.rubydoc.info/gems/processing/Processing/Context#mouseX-instance_method
|
|
52
60
|
def mouseX()
|
|
53
61
|
x, (cx, _) = @rootContext__.mouseX, @canvasFrame__
|
|
@@ -140,9 +148,15 @@ module Reight::Context
|
|
|
140
148
|
|
|
141
149
|
# @private
|
|
142
150
|
def resizeCanvas__()
|
|
143
|
-
w, h
|
|
151
|
+
w, h, pd = @resizeCanvas__ || return
|
|
144
152
|
@resizeCanvas__ = nil
|
|
145
|
-
|
|
153
|
+
|
|
154
|
+
@pixelDensity__ = pd if pd
|
|
155
|
+
pd = @pixelDensity__ == :auto ? nil : @pixelDensity__
|
|
156
|
+
pd ||= @rootContext__.pixelDensity
|
|
157
|
+
return if w == width && h == height && pd == pixelDensity
|
|
158
|
+
|
|
159
|
+
updateCanvas__ Rays::Image.new(w.to_i, h.to_i, pixel_density: pd)
|
|
146
160
|
|
|
147
161
|
rootw, rooth = @rootContext__.width, @rootContext__.height
|
|
148
162
|
if w == rootw && h == rooth
|
data/lib/reight/project.rb
CHANGED
data/lib/reight/reight.rb
CHANGED
data/lib/reight.rb
CHANGED
|
@@ -2,19 +2,19 @@ require 'reight/all'
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
begin
|
|
5
|
-
w
|
|
5
|
+
w = Reight::WINDOW__
|
|
6
6
|
|
|
7
7
|
reight_classes = %i[Sprite Sound]
|
|
8
|
-
|
|
8
|
+
w.context.class.constants
|
|
9
9
|
.reject {_1 =~ /__$/}
|
|
10
10
|
.reject {reight_classes.include? _1}
|
|
11
|
-
.each {self.class.const_set _1,
|
|
11
|
+
.each {self.class.const_set _1, w.context.class.const_get(_1)}
|
|
12
12
|
reight_classes
|
|
13
13
|
.each {self.class.const_set _1, Reight.const_get(_1)}
|
|
14
14
|
|
|
15
15
|
w.__send__ :begin_draw
|
|
16
16
|
at_exit do
|
|
17
17
|
w.__send__ :end_draw
|
|
18
|
-
Processing::App.new {w.show}.start if
|
|
18
|
+
Processing::App.new {w.show}.start if w.context.hasUserBlocks__ && !$!
|
|
19
19
|
end
|
|
20
20
|
end
|
data/reight.gemspec
CHANGED
|
@@ -25,13 +25,13 @@ Gem::Specification.new do |s|
|
|
|
25
25
|
s.platform = Gem::Platform::RUBY
|
|
26
26
|
s.required_ruby_version = '>= 3.0.0'
|
|
27
27
|
|
|
28
|
-
s.add_dependency 'xot', '~> 0.3.
|
|
29
|
-
s.add_dependency 'rucy', '~> 0.3.
|
|
30
|
-
s.add_dependency 'beeps', '~> 0.3.
|
|
31
|
-
s.add_dependency 'rays', '~> 0.3.
|
|
32
|
-
s.add_dependency 'reflexion', '~> 0.4.
|
|
33
|
-
s.add_dependency 'processing', '~> 1.
|
|
34
|
-
s.add_dependency 'rubysketch', '~> 0.
|
|
28
|
+
s.add_dependency 'xot', '~> 0.3.14'
|
|
29
|
+
s.add_dependency 'rucy', '~> 0.3.14'
|
|
30
|
+
s.add_dependency 'beeps', '~> 0.3.15'
|
|
31
|
+
s.add_dependency 'rays', '~> 0.3.15'
|
|
32
|
+
s.add_dependency 'reflexion', '~> 0.4.2'
|
|
33
|
+
s.add_dependency 'processing', '~> 1.3.0'
|
|
34
|
+
s.add_dependency 'rubysketch', '~> 0.9.0'
|
|
35
35
|
|
|
36
36
|
s.files = `git ls-files`.split $/
|
|
37
37
|
s.executables = s.files.grep(%r{^bin/}) {|f| File.basename f}
|
data/wasm/.gitignore
CHANGED
data/wasm/Gemfile
CHANGED
data/wasm/Rakefile
CHANGED
|
@@ -18,7 +18,9 @@ DATA_DIR = '.data'
|
|
|
18
18
|
OUT_DIR = 'output'
|
|
19
19
|
|
|
20
20
|
GEMS = Dir.glob("#{ROOT_DIR}/*/*.gemspec").map {File.basename File.dirname _1}
|
|
21
|
-
GEM_SRCS = GEMS.
|
|
21
|
+
GEM_SRCS = GEMS.flat_map {|gem|
|
|
22
|
+
Dir.glob "#{ROOT_DIR}/#{gem}/{include,src,ext,lib}/**/*.{h,hpp,c,cpp,m,mm,rb}"
|
|
23
|
+
}
|
|
22
24
|
|
|
23
25
|
OUT_WASM = "#{OUT_DIR}/ruby.wasm"
|
|
24
26
|
OUT_JS = "#{OUT_DIR}/#{NAME}.js"
|
|
@@ -33,13 +35,14 @@ task :clean => 'test:clean' do
|
|
|
33
35
|
Dir.chdir ROOT_DIR do
|
|
34
36
|
sh %( rake clean )
|
|
35
37
|
end
|
|
36
|
-
sh %( rm -rf build rubies #{
|
|
38
|
+
sh %( rm -rf build rubies #{DATA_DIR} #{OUT_DIR} )
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
task :clobber => :clean do
|
|
40
42
|
Dir.chdir ROOT_DIR do
|
|
41
43
|
sh %( rake clobber )
|
|
42
44
|
end
|
|
45
|
+
sh %( rm -rf #{BUNDLE_DIR} )
|
|
43
46
|
end
|
|
44
47
|
|
|
45
48
|
task :build => OUT_DATA
|
|
@@ -85,26 +88,34 @@ file OUT_WASM => [BUNDLE_DIR, OUT_DIR] + GEM_SRCS do
|
|
|
85
88
|
end
|
|
86
89
|
|
|
87
90
|
ldflags = %W[
|
|
91
|
+
-sALLOW_MEMORY_GROWTH=1
|
|
92
|
+
-sINITIAL_MEMORY=#{1024 * 1024 * 64}
|
|
88
93
|
-sASYNCIFY_STACK_SIZE=#{1024 * 1024 * 4}
|
|
94
|
+
-fexceptions
|
|
89
95
|
-sNO_DISABLE_EXCEPTION_CATCHING
|
|
90
96
|
-sFORCE_FILESYSTEM
|
|
91
97
|
-sUSE_SDL=2
|
|
92
98
|
-sUSE_SDL_TTF=2
|
|
93
|
-
-sALLOW_MEMORY_GROWTH=1
|
|
94
|
-
-sINITIAL_MEMORY=#{1024 * 1024 * 64}
|
|
95
99
|
-sEXPORTED_RUNTIME_METHODS=ccall,cwrap,UTF8ToString,stringToUTF8,FS
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
].reject {_1 =~ /^\s*#/}.join ' '
|
|
101
|
+
envs = [
|
|
102
|
+
"RUBY_WASM_EMCC_LDFLAGS='#{ldflags}'",
|
|
103
|
+
# avoid host's libyaml (e.g. Homebrew) being picked up by psych extconf
|
|
104
|
+
"PKG_CONFIG_LIBDIR=''"
|
|
105
|
+
].join ' '
|
|
106
|
+
opts = %W[
|
|
107
|
+
--ruby-version 4.0
|
|
108
|
+
--target wasm32-unknown-emscripten
|
|
109
|
+
--dest_dir #{DATA_DIR}
|
|
110
|
+
--remake
|
|
111
|
+
-o #{OUT_JS}
|
|
112
|
+
].join ' '
|
|
113
|
+
sh %( #{envs} bundle exec rbwasm build #{opts} )
|
|
103
114
|
ensure
|
|
104
115
|
backups.each {|path, s| File.write path, s}
|
|
105
116
|
end
|
|
106
117
|
|
|
107
|
-
roots = Dir.glob('rubies/ruby-*-wasm*-*-emscripten
|
|
118
|
+
roots = Dir.glob('rubies/ruby-*-wasm*-*-emscripten-*-*')
|
|
108
119
|
.select {File.directory? _1}
|
|
109
120
|
raise "expected 1 root, got #{roots.size}" if roots.size != 1
|
|
110
121
|
sh %( cp -f #{roots.first}/usr/local/bin/ruby.wasm #{OUT_WASM} )
|
|
@@ -118,73 +129,71 @@ directory OUT_DIR
|
|
|
118
129
|
|
|
119
130
|
|
|
120
131
|
namespace :test do
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
132
|
+
to_path_map = -> paths, &block {
|
|
133
|
+
paths
|
|
134
|
+
.reject {_1.end_with? '~'}
|
|
135
|
+
.reject {File.directory? _1}
|
|
136
|
+
.map {[_1, block.call(_1)]}
|
|
137
|
+
.to_h
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
cdn_url = "https://cdn.jsdelivr.net/npm/reight-wasm@#{Reight::Extension.version}"
|
|
141
|
+
test_dir = 'test'
|
|
142
|
+
template_dir = 'template'
|
|
143
|
+
template_files = to_path_map[Dir.glob "#{template_dir}/**/*"] {
|
|
144
|
+
_1.sub(/^#{template_dir}/, test_dir).sub(/\.erb$/, '')
|
|
145
|
+
}
|
|
146
|
+
wasm_files = to_path_map[OUT_FILES] {
|
|
147
|
+
"#{test_dir}/#{File.basename _1}"
|
|
126
148
|
}
|
|
127
|
-
|
|
128
|
-
|
|
149
|
+
assets = to_path_map[["../../rubysketch/examples/physics.rb"]] {
|
|
150
|
+
"#{test_dir}/#{File.basename _1}"
|
|
129
151
|
}
|
|
130
152
|
|
|
131
153
|
task :clean do
|
|
132
154
|
sh %( rm -rf #{test_dir} )
|
|
133
155
|
end
|
|
134
156
|
|
|
135
|
-
task :serve =>
|
|
157
|
+
task :serve => template_files.values + wasm_files.values + assets.values do
|
|
136
158
|
require 'webrick'
|
|
137
159
|
WEBrick::HTTPServer.new(Port: 8080, DocumentRoot: test_dir).start
|
|
138
160
|
end
|
|
139
161
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
162
|
+
task :deploy => template_files.values + assets.values do
|
|
163
|
+
wasm_files.values.each {File.unlink _1 if File.symlink? _1}
|
|
164
|
+
Dir.glob("#{test_dir}/**/*").each {puts _1}
|
|
165
|
+
print "Deploy? [y/n]: "
|
|
166
|
+
next unless $stdin.gets =~ /^(y|yes)$/i
|
|
167
|
+
sh %( npx wrangler pages deploy #{test_dir} --branch master )
|
|
146
168
|
end
|
|
147
169
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
File.symlink "../#{from}", to unless File.symlink? to
|
|
151
|
-
end
|
|
152
|
-
end
|
|
170
|
+
template_files.each do |from, to|
|
|
171
|
+
paths = assets.values.map {_1.sub /^#{test_dir}/, ''}
|
|
153
172
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
gravity 0, 1000
|
|
162
|
-
@grounds = [
|
|
163
|
-
createSprite(0, height - 30, width, 30),
|
|
164
|
-
createSprite(0, 0, 10, height),
|
|
165
|
-
createSprite(width - 10, 0, 10, height)
|
|
166
|
-
]
|
|
167
|
-
@sprites = []
|
|
173
|
+
file to => [test_dir, from] do
|
|
174
|
+
if from.end_with? '.erb'
|
|
175
|
+
File.write to, ERB.new(File.read from).result_with_hash(
|
|
176
|
+
wasm_url_base: cdn_url, assets: paths, main: paths.first)
|
|
177
|
+
else
|
|
178
|
+
sh %( cp #{from} #{to} )
|
|
179
|
+
end
|
|
168
180
|
end
|
|
181
|
+
end
|
|
169
182
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
sprite @grounds
|
|
174
|
-
fill 0, 200, 100
|
|
175
|
-
sprite @sprites
|
|
176
|
-
fill 255
|
|
177
|
-
textSize 24
|
|
178
|
-
textAlign RIGHT
|
|
179
|
-
text "#{frameRate.round} FPS", width - 100, 30
|
|
183
|
+
wasm_files.each do |from, to|
|
|
184
|
+
file to => [OUT_DATA, test_dir, from] do
|
|
185
|
+
File.symlink "../#{from}", to unless File.symlink? to
|
|
180
186
|
end
|
|
187
|
+
end
|
|
181
188
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
189
|
+
assets.each do |from, to|
|
|
190
|
+
file to => [test_dir, from] do
|
|
191
|
+
sh %( cp #{from} #{to} )
|
|
192
|
+
filter_file to do |s|
|
|
193
|
+
words = %w[map expand_path lib dir each unshift include directory]
|
|
194
|
+
s.sub(/^.*\%w\[.*\].*#{words.join '.*'}.*?(require)/m) {$1}
|
|
195
|
+
end
|
|
186
196
|
end
|
|
187
|
-
END
|
|
188
197
|
end
|
|
189
198
|
|
|
190
199
|
directory test_dir
|
|
@@ -19,27 +19,42 @@
|
|
|
19
19
|
console.error('[unhandled rejection]', e.reason);
|
|
20
20
|
});
|
|
21
21
|
</script>
|
|
22
|
-
<script src="<%= base %>/reight.js"></script>
|
|
23
22
|
<script type="module">
|
|
24
|
-
const
|
|
25
|
-
const
|
|
23
|
+
const isLocal = ['localhost', '127.0.0.1'].includes(location.hostname)
|
|
24
|
+
const WASM_URL_BASE = isLocal ? '.' : '<%= wasm_url_base %>';
|
|
25
|
+
|
|
26
|
+
await new Promise((resolve, reject) => {
|
|
27
|
+
const s = document.createElement('script');
|
|
28
|
+
s.src = `${WASM_URL_BASE}/reight.js`;
|
|
29
|
+
s.onload = resolve;
|
|
30
|
+
s.onerror = reject;
|
|
31
|
+
document.head.appendChild(s);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const libRes = await fetch(`${WASM_URL_BASE}/reightlib.js`);
|
|
26
35
|
const libBlob = new Blob([await libRes.text()], {type: 'application/javascript'});
|
|
27
36
|
const libUrl = URL.createObjectURL(libBlob);
|
|
28
37
|
const {loadReightLib} = await import(libUrl);
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
async function writeFile(mod, path, url) {
|
|
40
|
+
const res = await fetch(url);
|
|
41
|
+
const data = new Uint8Array(await res.arrayBuffer());
|
|
42
|
+
mod.FS.writeFile(path, data);
|
|
43
|
+
}
|
|
33
44
|
const RubyModule = {
|
|
34
|
-
canvas:
|
|
45
|
+
canvas: document.getElementById('canvas'),
|
|
35
46
|
print: (s) => console.log('[ruby]', s),
|
|
36
47
|
printErr: (s) => console.error('[ruby err]', s),
|
|
37
48
|
onAbort: (s) => console.error('[abort]', s),
|
|
38
|
-
locateFile: (path) => `${
|
|
39
|
-
preRun: [(mod) => {
|
|
40
|
-
mod.
|
|
49
|
+
locateFile: (path) => `${WASM_URL_BASE}/${path}`,
|
|
50
|
+
preRun: [async (mod) => {
|
|
51
|
+
mod.addRunDependency('assets')
|
|
52
|
+
<% assets.each do |asset| %>
|
|
53
|
+
await writeFile(mod, '<%= asset %>', '<%= asset %>');
|
|
54
|
+
<% end %>
|
|
55
|
+
mod.removeRunDependency('assets')
|
|
41
56
|
}],
|
|
42
|
-
arguments: ['-e', 'load "/bundle/setup.rb"; load "
|
|
57
|
+
arguments: ['-e', 'load "/bundle/setup.rb"; load "<%= main %>"'],
|
|
43
58
|
};
|
|
44
59
|
globalThis.__ruby_module = RubyModule;
|
|
45
60
|
loadReightLib();
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: reight
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- xordog
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-06-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: xot
|
|
@@ -16,98 +16,98 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.3.
|
|
19
|
+
version: 0.3.14
|
|
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.3.
|
|
26
|
+
version: 0.3.14
|
|
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.3.
|
|
33
|
+
version: 0.3.14
|
|
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.3.
|
|
40
|
+
version: 0.3.14
|
|
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.3.
|
|
47
|
+
version: 0.3.15
|
|
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.3.
|
|
54
|
+
version: 0.3.15
|
|
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.3.
|
|
61
|
+
version: 0.3.15
|
|
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.3.
|
|
68
|
+
version: 0.3.15
|
|
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.4.
|
|
75
|
+
version: 0.4.2
|
|
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.4.
|
|
82
|
+
version: 0.4.2
|
|
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: 1.
|
|
89
|
+
version: 1.3.0
|
|
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: 1.
|
|
96
|
+
version: 1.3.0
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: rubysketch
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0.
|
|
103
|
+
version: 0.9.0
|
|
104
104
|
type: :runtime
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: 0.
|
|
110
|
+
version: 0.9.0
|
|
111
111
|
description: A Retro Game Engine for Ruby.
|
|
112
112
|
email: xordog@gmail.com
|
|
113
113
|
executables:
|
|
@@ -185,7 +185,6 @@ files:
|
|
|
185
185
|
- wasm/.bundle/config
|
|
186
186
|
- wasm/.gitignore
|
|
187
187
|
- wasm/Gemfile
|
|
188
|
-
- wasm/Gemfile.lock
|
|
189
188
|
- wasm/Rakefile
|
|
190
189
|
- wasm/template/index.html.erb
|
|
191
190
|
homepage: https://github.com/xord/reight
|
data/wasm/Gemfile.lock
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
PATH
|
|
2
|
-
remote: ../../beeps
|
|
3
|
-
specs:
|
|
4
|
-
beeps (0.3.13)
|
|
5
|
-
rucy (~> 0.3.13)
|
|
6
|
-
xot (~> 0.3.13)
|
|
7
|
-
|
|
8
|
-
PATH
|
|
9
|
-
remote: ../../processing
|
|
10
|
-
specs:
|
|
11
|
-
processing (1.2.0)
|
|
12
|
-
rays (~> 0.3.13)
|
|
13
|
-
reflexion (~> 0.4.0)
|
|
14
|
-
rexml
|
|
15
|
-
rucy (~> 0.3.13)
|
|
16
|
-
xot (~> 0.3.13)
|
|
17
|
-
|
|
18
|
-
PATH
|
|
19
|
-
remote: ../../rays
|
|
20
|
-
specs:
|
|
21
|
-
rays (0.3.13)
|
|
22
|
-
rucy (~> 0.3.13)
|
|
23
|
-
xot (~> 0.3.13)
|
|
24
|
-
|
|
25
|
-
PATH
|
|
26
|
-
remote: ../../reflex
|
|
27
|
-
specs:
|
|
28
|
-
reflexion (0.4.0)
|
|
29
|
-
rays (~> 0.3.13)
|
|
30
|
-
rucy (~> 0.3.13)
|
|
31
|
-
xot (~> 0.3.13)
|
|
32
|
-
|
|
33
|
-
PATH
|
|
34
|
-
remote: ../../rubysketch
|
|
35
|
-
specs:
|
|
36
|
-
rubysketch (0.8.0)
|
|
37
|
-
beeps (~> 0.3.13)
|
|
38
|
-
processing (~> 1.2.0)
|
|
39
|
-
rays (~> 0.3.13)
|
|
40
|
-
reflexion (~> 0.4.0)
|
|
41
|
-
rucy (~> 0.3.13)
|
|
42
|
-
xot (~> 0.3.13)
|
|
43
|
-
|
|
44
|
-
PATH
|
|
45
|
-
remote: ../../rucy
|
|
46
|
-
specs:
|
|
47
|
-
rucy (0.3.13)
|
|
48
|
-
xot (~> 0.3.13)
|
|
49
|
-
|
|
50
|
-
PATH
|
|
51
|
-
remote: ../../xot
|
|
52
|
-
specs:
|
|
53
|
-
xot (0.3.13)
|
|
54
|
-
|
|
55
|
-
PATH
|
|
56
|
-
remote: ..
|
|
57
|
-
specs:
|
|
58
|
-
reight (0.2.0)
|
|
59
|
-
beeps (~> 0.3.13)
|
|
60
|
-
processing (~> 1.2.0)
|
|
61
|
-
rays (~> 0.3.13)
|
|
62
|
-
reflexion (~> 0.4.0)
|
|
63
|
-
rubysketch (~> 0.8.0)
|
|
64
|
-
rucy (~> 0.3.13)
|
|
65
|
-
xot (~> 0.3.13)
|
|
66
|
-
|
|
67
|
-
GEM
|
|
68
|
-
remote: https://rubygems.org/
|
|
69
|
-
specs:
|
|
70
|
-
logger (1.7.0)
|
|
71
|
-
rake (13.4.2)
|
|
72
|
-
rexml (3.4.4)
|
|
73
|
-
ruby_wasm (2.9.4-aarch64-linux)
|
|
74
|
-
logger
|
|
75
|
-
ruby_wasm (2.9.4-arm64-darwin)
|
|
76
|
-
logger
|
|
77
|
-
|
|
78
|
-
PLATFORMS
|
|
79
|
-
aarch64-linux-gnu
|
|
80
|
-
arm64-darwin-23
|
|
81
|
-
arm64-darwin-24
|
|
82
|
-
|
|
83
|
-
DEPENDENCIES
|
|
84
|
-
beeps!
|
|
85
|
-
processing!
|
|
86
|
-
rake
|
|
87
|
-
rays!
|
|
88
|
-
reflexion!
|
|
89
|
-
reight!
|
|
90
|
-
ruby_wasm (~> 2.9.4)
|
|
91
|
-
rubysketch!
|
|
92
|
-
rucy!
|
|
93
|
-
xot!
|
|
94
|
-
|
|
95
|
-
BUNDLED WITH
|
|
96
|
-
2.4.20
|