kairo-gokko (10-2) dxopal_sdl.rb を使う



前の記事に書いた dxopal_sdl.rb を使う形に書き換えます。


ここは上記の記事に書いた通り。

--- a/main.rb
+++ b/main.rb
@@ -1,4 +1,13 @@
-require 'dxopal'
+def browser?
+  Kernel.const_defined?(:Native)
+end
+
+if browser?
+  require "dxopal"
+else
+  require "./dxopal_sdl"
+end
+
 include DXOpal
 
 require_remote "./data.rb"

実行時に環境変数で切り替えるように run.sh を修正。

--- a/run.sh
+++ b/run.sh
@@ -7,4 +7,8 @@ bundle exec ruby gen_sound.rb \
 
 ruby preprocess.rb "$@" > data.rb
 
-bundle exec dxopal server
+if [ "$BROWSER" = "1" ]; then
+  bundle exec dxopal server
+else
+  bundle exec ruby main.rb
+fi

ブラウザで動かすときは BROWSER=1 ./run.sh ... のように実行します。

SDL版で動かすときは BROWSER=0 ./run.sh ... のように実行します。 BROWSER=1 でなければ何でもいいので環境変数自体を省略してもOK。


もう一箇所、JSON のパース部分が動かなくなるのでここも直します。

--- a/main.rb
+++ b/main.rb
@@ -18,7 +18,12 @@ require_remote "./view.rb"
 PPC = 30
 
 def parse_json(json)
-  Native(`JSON.parse(json)`)
+  if browser?
+    Native(`JSON.parse(json)`)
+  else
+    require "json"
+    JSON.parse(json)
+  end
 end

これでよし。 DXOpal 版と SDL 版が両方動くようになりました。