reight 0.2.0 → 0.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3674b778fe6d2453add5a4a9ba1cdea93f9d8a3a27d584d929894b6fc63b561
4
- data.tar.gz: c322aea76c3ff5b319990d4ec14fd3b864d6573082ebd5c42334608fc70c4fe8
3
+ metadata.gz: 65c71b399c42f92fb4c05e26480b518b9cbbd8f3e91c3794cf2f3ee55d1a19bf
4
+ data.tar.gz: 163991b67c1cad80ff364717ab15d36c9b17a11ee16bb1810cb296df9273c324
5
5
  SHA512:
6
- metadata.gz: 9f5b6c8abff843e9b3b7bd0478ee9bcf8da602cae8195a12b770bd94820a05df0d87569df2524f3d740301c0dbe132be25a04c4f4b762c959667ac04966708ef
7
- data.tar.gz: d9487e23499975c8e890cc8b6c6055fadb01365f86f0c65f5680dad7d1188a3ade44436aa6899c7826943893fdf69c0bdee2416b89883273953978cadd3170bb
6
+ metadata.gz: 5af249900681707474780ab12f681a845b485f28e81c4ba507e9f39a87ebd607ba588e0f37e8927439855816e2acfed7d960d29af493a4e5dc54fd8ec5266154
7
+ data.tar.gz: 67aafaaddfd9e977c7da287c88b88d3822507addc34121e30060b390538ba2baadbc51cb07045a74d92b2231eb5e65357aa916e3dbd17692dd7feba3bfd5c534
@@ -6,6 +6,7 @@ on:
6
6
 
7
7
  permissions:
8
8
  contents: write
9
+ id-token: write
9
10
 
10
11
  jobs:
11
12
  wasm:
@@ -23,6 +24,12 @@ jobs:
23
24
  - name: checkout monorepo
24
25
  run: ruby -I.github/workflows -rutils -e 'abort unless checkout_monorepo'
25
26
 
27
+ - name: setup node
28
+ uses: actions/setup-node@v4
29
+ with:
30
+ node-version: 20
31
+ registry-url: https://registry.npmjs.org
32
+
26
33
  - name: install emscripten
27
34
  uses: mymindstorm/setup-emsdk@v14
28
35
  with:
@@ -35,3 +42,6 @@ jobs:
35
42
  env:
36
43
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37
44
  run: ruby -I.github/workflows -rutils -e 'release(*Dir.glob("../all/reight/wasm/output/*"))'
45
+
46
+ - name: publish to npm
47
+ run: cd ../all/reight/wasm && rake publish
data/ChangeLog.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # reight ChangeLog
2
2
 
3
3
 
4
+ ## [v0.2.1] - 2026-05-20
5
+
6
+ - Add npm publish to WASM release workflow
7
+ - Add test server task for local WASM development
8
+ - Rename wasm.yml to release-wasm.yml
9
+
10
+
4
11
  ## [v0.2.0] - 2026-05-17
5
12
 
6
13
  - [BREAKING] Wheel Y delta now follows top-left origin convention (from reflex)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
data/reight.gemspec CHANGED
@@ -27,11 +27,11 @@ Gem::Specification.new do |s|
27
27
 
28
28
  s.add_dependency 'xot', '~> 0.3.13'
29
29
  s.add_dependency 'rucy', '~> 0.3.13'
30
- s.add_dependency 'beeps', '~> 0.3.13'
31
- s.add_dependency 'rays', '~> 0.3.13'
32
- s.add_dependency 'reflexion', '~> 0.4.0'
33
- s.add_dependency 'processing', '~> 1.2.0'
34
- s.add_dependency 'rubysketch', '~> 0.8.0'
30
+ s.add_dependency 'beeps', '~> 0.3.14'
31
+ s.add_dependency 'rays', '~> 0.3.14'
32
+ s.add_dependency 'reflexion', '~> 0.4.1'
33
+ s.add_dependency 'processing', '~> 1.2.1'
34
+ s.add_dependency 'rubysketch', '~> 0.8.1'
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
@@ -2,3 +2,4 @@ build/
2
2
  rubies/
3
3
  .data/
4
4
  output/
5
+ test/
data/wasm/Gemfile.lock CHANGED
@@ -1,68 +1,68 @@
1
1
  PATH
2
2
  remote: ../../beeps
3
3
  specs:
4
- beeps (0.3.11)
5
- rucy (~> 0.3.11)
6
- xot (~> 0.3.11)
4
+ beeps (0.3.13)
5
+ rucy (~> 0.3.13)
6
+ xot (~> 0.3.13)
7
7
 
8
8
  PATH
9
9
  remote: ../../processing
10
10
  specs:
11
- processing (1.1.17)
12
- rays (~> 0.3.11)
13
- reflexion (~> 0.3.14)
11
+ processing (1.2.0)
12
+ rays (~> 0.3.13)
13
+ reflexion (~> 0.4.0)
14
14
  rexml
15
- rucy (~> 0.3.11)
16
- xot (~> 0.3.11)
15
+ rucy (~> 0.3.13)
16
+ xot (~> 0.3.13)
17
17
 
18
18
  PATH
19
19
  remote: ../../rays
20
20
  specs:
21
- rays (0.3.11)
22
- rucy (~> 0.3.11)
23
- xot (~> 0.3.11)
21
+ rays (0.3.13)
22
+ rucy (~> 0.3.13)
23
+ xot (~> 0.3.13)
24
24
 
25
25
  PATH
26
26
  remote: ../../reflex
27
27
  specs:
28
- reflexion (0.3.14)
29
- rays (~> 0.3.11)
30
- rucy (~> 0.3.11)
31
- xot (~> 0.3.11)
28
+ reflexion (0.4.0)
29
+ rays (~> 0.3.13)
30
+ rucy (~> 0.3.13)
31
+ xot (~> 0.3.13)
32
32
 
33
33
  PATH
34
34
  remote: ../../rubysketch
35
35
  specs:
36
- rubysketch (0.7.18)
37
- beeps (~> 0.3.11)
38
- processing (~> 1.1.17)
39
- rays (~> 0.3.11)
40
- reflexion (~> 0.3.14)
41
- rucy (~> 0.3.11)
42
- xot (~> 0.3.11)
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
43
 
44
44
  PATH
45
45
  remote: ../../rucy
46
46
  specs:
47
- rucy (0.3.11)
48
- xot (~> 0.3.11)
47
+ rucy (0.3.13)
48
+ xot (~> 0.3.13)
49
49
 
50
50
  PATH
51
51
  remote: ../../xot
52
52
  specs:
53
- xot (0.3.11)
53
+ xot (0.3.13)
54
54
 
55
55
  PATH
56
56
  remote: ..
57
57
  specs:
58
- reight (0.1.17)
59
- beeps (~> 0.3.11)
60
- processing (~> 1.1.17)
61
- rays (~> 0.3.11)
62
- reflexion (~> 0.3.14)
63
- rubysketch (~> 0.7.18)
64
- rucy (~> 0.3.11)
65
- xot (~> 0.3.11)
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
66
 
67
67
  GEM
68
68
  remote: https://rubygems.org/
@@ -78,6 +78,7 @@ GEM
78
78
  PLATFORMS
79
79
  aarch64-linux-gnu
80
80
  arm64-darwin-23
81
+ arm64-darwin-24
81
82
 
82
83
  DEPENDENCIES
83
84
  beeps!
data/wasm/Rakefile CHANGED
@@ -1,23 +1,15 @@
1
- %w[xot]
1
+ %w[xot reight]
2
2
  .map {|s| File.expand_path "../../#{s}/lib", __dir__}
3
3
  .each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
4
4
 
5
+ require 'json'
6
+ require 'erb'
5
7
  require 'xot/rake/util'
8
+ require 'reight/extension'
6
9
 
7
10
  include Xot::Rake
8
11
 
9
12
 
10
- def envs()
11
- {
12
- CC: 'emcc',
13
- CXX: 'em++',
14
- AR: 'emar',
15
- RANLIB: 'emranlib',
16
- CPPFLAGS: '-sUSE_SDL=2',
17
- }.map {|k, v| "#{k}=#{v}"}.join ' '
18
- end
19
-
20
-
21
13
  NAME = 'reight'
22
14
 
23
15
  ROOT_DIR = File.expand_path '../..', __dir__
@@ -32,15 +24,16 @@ OUT_WASM = "#{OUT_DIR}/ruby.wasm"
32
24
  OUT_JS = "#{OUT_DIR}/#{NAME}.js"
33
25
  OUT_DATA = "#{OUT_DIR}/#{NAME}.data"
34
26
  OUT_LIB_JS = "#{OUT_DIR}/#{NAME}lib.js"
27
+ OUT_FILES = [OUT_WASM, OUT_JS, OUT_DATA, OUT_LIB_JS]
35
28
 
36
29
 
37
30
  task :default => :build
38
31
 
39
- task :clean do
32
+ task :clean => 'test:clean' do
40
33
  Dir.chdir ROOT_DIR do
41
34
  sh %( rake clean )
42
35
  end
43
- sh %( rm -rf build rubies #{OUT_DIR} #{BUNDLE_DIR} #{DATA_DIR} )
36
+ sh %( rm -rf build rubies #{BUNDLE_DIR} #{DATA_DIR} #{OUT_DIR} )
44
37
  end
45
38
 
46
39
  task :clobber => :clean do
@@ -49,7 +42,19 @@ task :clobber => :clean do
49
42
  end
50
43
  end
51
44
 
52
- task :build => [OUT_WASM, OUT_DATA]
45
+ task :build => OUT_DATA
46
+
47
+ task :publish => :build do
48
+ File.write "#{OUT_DIR}/package.json", JSON.pretty_generate(
49
+ name: 'reight-wasm',
50
+ version: Reight::Extension.version,
51
+ description: 'Reight game engine WASM build',
52
+ files: OUT_FILES.map {File.basename _1},
53
+ repository: {type: 'git', url: 'git+https://github.com/xord/reight.git'},
54
+ license: 'MIT'
55
+ )
56
+ sh %( cd #{OUT_DIR} && npm publish --provenance )
57
+ end
53
58
 
54
59
  file OUT_DATA => OUT_WASM do
55
60
  emroot = `em-config EMSCRIPTEN_ROOT`.strip
@@ -69,28 +74,35 @@ end
69
74
  file OUT_WASM => [BUNDLE_DIR, OUT_DIR] + GEM_SRCS do
70
75
  sh %( rm -rf #{DATA_DIR} )
71
76
 
72
- GEMS.each do |gem|
73
- filter_file "#{ROOT_DIR}/#{gem}/#{gem}.gemspec" do |s|
74
- s.sub(/^(.*\.\s*extensions.*)$/) {$1.sub 'Rakefile', "ext/#{gem}/extconf.rb"}
77
+ backups = {}
78
+ begin
79
+ GEMS.each do |gem|
80
+ path = "#{ROOT_DIR}/#{gem}/#{gem}.gemspec"
81
+ filter_file path do |s|
82
+ backups[path] = s
83
+ s.sub(/^(.*\.\s*extensions.*)$/) {$1.sub 'Rakefile', "ext/#{gem}/extconf.rb"}
84
+ end
75
85
  end
76
- end
77
86
 
78
- ldflags = %W[
79
- -sASYNCIFY_STACK_SIZE=#{1024 * 1024 * 4}
80
- -sNO_DISABLE_EXCEPTION_CATCHING
81
- -sFORCE_FILESYSTEM
82
- -sUSE_SDL=2
83
- -sUSE_SDL_TTF=2
84
- -sALLOW_MEMORY_GROWTH=1
85
- -sINITIAL_MEMORY=#{1024 * 1024 * 64}
86
- -sEXPORTED_RUNTIME_METHODS=ccall,cwrap,UTF8ToString,stringToUTF8,FS
87
- -sASSERTIONS=1
88
- -fexceptions
89
- ].reject {_1 =~ /^\s*#/}
90
- envs = "RUBY_WASM_EMCC_LDFLAGS=' #{ldflags.join ' '}'"
91
- sysopts = '--log-level debug'
92
- opts = "--target wasm32-unknown-emscripten --dest_dir #{DATA_DIR} --remake -o #{OUT_JS}"
93
- sh %( #{envs} bundle exec rbwasm #{sysopts} build #{opts} )
87
+ ldflags = %W[
88
+ -sASYNCIFY_STACK_SIZE=#{1024 * 1024 * 4}
89
+ -sNO_DISABLE_EXCEPTION_CATCHING
90
+ -sFORCE_FILESYSTEM
91
+ -sUSE_SDL=2
92
+ -sUSE_SDL_TTF=2
93
+ -sALLOW_MEMORY_GROWTH=1
94
+ -sINITIAL_MEMORY=#{1024 * 1024 * 64}
95
+ -sEXPORTED_RUNTIME_METHODS=ccall,cwrap,UTF8ToString,stringToUTF8,FS
96
+ -sASSERTIONS=1
97
+ -fexceptions
98
+ ].reject {_1 =~ /^\s*#/}
99
+ envs = "RUBY_WASM_EMCC_LDFLAGS=' #{ldflags.join ' '}'"
100
+ sysopts = '--log-level debug'
101
+ opts = "--target wasm32-unknown-emscripten --dest_dir #{DATA_DIR} --remake -o #{OUT_JS}"
102
+ sh %( #{envs} bundle exec rbwasm #{sysopts} build #{opts} )
103
+ ensure
104
+ backups.each {|path, s| File.write path, s}
105
+ end
94
106
 
95
107
  roots = Dir.glob('rubies/ruby-*-wasm*-*-emscripten-full-*')
96
108
  .select {File.directory? _1}
@@ -104,3 +116,76 @@ end
104
116
 
105
117
  directory OUT_DIR
106
118
 
119
+
120
+ namespace :test do
121
+ template_dir = 'template'
122
+ test_dir = 'test'
123
+ main = "#{test_dir}/test.rb"
124
+ erbs = {
125
+ "#{test_dir}/index.html" => "#{template_dir}/index.html.erb"
126
+ }
127
+ wasm_files = OUT_FILES.each.with_object({}) {|out, hash|
128
+ hash["#{test_dir}/#{File.basename out}"] = out
129
+ }
130
+
131
+ task :clean do
132
+ sh %( rm -rf #{test_dir} )
133
+ end
134
+
135
+ task :serve => [main] + erbs.keys + wasm_files.keys do
136
+ require 'webrick'
137
+ WEBrick::HTTPServer.new(Port: 8080, DocumentRoot: test_dir).start
138
+ end
139
+
140
+ erbs.each do |out, erb|
141
+ base = '.'
142
+ main_rb = File.basename main
143
+ task out => [test_dir, erb] do
144
+ File.write out, ERB.new(File.read erb).result(binding)
145
+ end
146
+ end
147
+
148
+ wasm_files.each do |to, from|
149
+ task to => [test_dir, from] do
150
+ File.symlink "../#{from}", to unless File.symlink? to
151
+ end
152
+ end
153
+
154
+ file main => test_dir do
155
+ File.write main, <<~'END'
156
+ require 'rubysketch'
157
+ using RubySketch
158
+
159
+ setup do
160
+ size 640, 480
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 = []
168
+ end
169
+
170
+ draw do
171
+ background 20
172
+ fill 100
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
180
+ end
181
+
182
+ mousePressed do
183
+ s = createSprite mouseX, mouseY, 30, 30
184
+ s.dynamic = true
185
+ @sprites << s
186
+ end
187
+ END
188
+ end
189
+
190
+ directory test_dir
191
+ end
@@ -0,0 +1,49 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Reight</title>
6
+ <style>
7
+ body {margin: 0; background: #222; display: flex; justify-content: center; align-items: center; height: 100vh;}
8
+ canvas {background: #000;}
9
+ </style>
10
+ </head>
11
+ <body>
12
+ <canvas id="canvas"></canvas>
13
+
14
+ <script>
15
+ window.addEventListener('error', (e) => {
16
+ console.error('[window error]', e.message, e.error);
17
+ });
18
+ window.addEventListener('unhandledrejection', (e) => {
19
+ console.error('[unhandled rejection]', e.reason);
20
+ });
21
+ </script>
22
+ <script src="<%= base %>/reight.js"></script>
23
+ <script type="module">
24
+ const BASE = '<%= base %>';
25
+ const libRes = await fetch(`${BASE}/reightlib.js`);
26
+ const libBlob = new Blob([await libRes.text()], {type: 'application/javascript'});
27
+ const libUrl = URL.createObjectURL(libBlob);
28
+ const {loadReightLib} = await import(libUrl);
29
+
30
+ const srcRes = await fetch('<%= main_rb %>');
31
+ const srcText = await srcRes.text();
32
+
33
+ const RubyModule = {
34
+ canvas: document.getElementById('canvas'),
35
+ print: (s) => console.log('[ruby]', s),
36
+ printErr: (s) => console.error('[ruby err]', s),
37
+ onAbort: (s) => console.error('[abort]', s),
38
+ locateFile: (path) => `${BASE}/${path}`,
39
+ preRun: [(mod) => {
40
+ mod.FS.writeFile('/main.rb', new TextEncoder().encode(srcText));
41
+ }],
42
+ arguments: ['-e', 'load "/bundle/setup.rb"; load "/main.rb"'],
43
+ };
44
+ globalThis.__ruby_module = RubyModule;
45
+ loadReightLib();
46
+ Module(RubyModule);
47
+ </script>
48
+ </body>
49
+ </html>
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.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-05-16 00:00:00.000000000 Z
11
+ date: 2026-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -44,70 +44,70 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.3.13
47
+ version: 0.3.14
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.13
54
+ version: 0.3.14
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.13
61
+ version: 0.3.14
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.13
68
+ version: 0.3.14
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.0
75
+ version: 0.4.1
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.0
82
+ version: 0.4.1
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.2.0
89
+ version: 1.2.1
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.2.0
96
+ version: 1.2.1
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.8.0
103
+ version: 0.8.1
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.8.0
110
+ version: 0.8.1
111
111
  description: A Retro Game Engine for Ruby.
112
112
  email: xordog@gmail.com
113
113
  executables:
@@ -117,10 +117,10 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - ".github/PULL_REQUEST_TEMPLATE.md"
119
119
  - ".github/workflows/release-gem.yml"
120
+ - ".github/workflows/release-wasm.yml"
120
121
  - ".github/workflows/tag.yml"
121
122
  - ".github/workflows/test.yml"
122
123
  - ".github/workflows/utils.rb"
123
- - ".github/workflows/wasm.yml"
124
124
  - ".gitignore"
125
125
  - CLAUDE.md
126
126
  - CONTRIBUTING.md
@@ -187,6 +187,7 @@ files:
187
187
  - wasm/Gemfile
188
188
  - wasm/Gemfile.lock
189
189
  - wasm/Rakefile
190
+ - wasm/template/index.html.erb
190
191
  homepage: https://github.com/xord/reight
191
192
  licenses:
192
193
  - MIT