メインコンテンツまでスキップ

addons/redscribe/mrblib を使う

前章では、一から DSL を作成しましたが、自分で一から作成しなくても汎用的なものは予め addons/redscribe/mrblib フォルダに用意しています。

代表的なものをいくつか紹介します。

coroutine

Fiber を使用するための DSL です。

  • ___? は、単純に Fiber.yield を呼ぶエイリアスです。
  • ___ は、Fiber を再開した際の値を取得するメソッドです。
require 'addons/redscribe/mrblib/coroutine'

coroutine 'Foo' do
while ___?
emit! :given, ___
end
emit! :finished, true
end
  • Fiber を開始するには、start メソッドを呼びます。
  • resume メソッドで Fiber を再開します。
start :all

resume 'Foo'
resume 'Foo', 'bar'
resume 'Foo', false
Output
=> true

[ given ] signal emitted: true
[ given ] signal emitted: "bar"
[ finished ] signal emitted: true

実装の詳細は、addons/redscribe/mrblib/coroutine.rb を参照してください。

coroutine.rb を使うことで、例えば、会話ダイアログが作成できます。 https://github.com/tkmfujise/ReDScribe/blob/main/doc/examples/4_coroutine.md

actor

アクターを作成するための DSL です。

  • --> {} で、アクターが実行する処理を書きます。
  • :key --> {} で、:key を受け取った際のアクターの処理を書きます。
require 'addons/redscribe/mrblib/actor'

actor 'Counter' do
@count = 0
--> { @count += 1 }
:reset --> { @count = 0 }
end
  • アクターを実行するには、tick メソッドを実行します。
  • アクターにメッセージを伝えるには、tell メソッドを実行します。
tick
tick
tick

tell 'Counter', :reset
tick
Output
[ Counter ] signal emitted: { &"name": "Counter", &"count": 1 }
[ Counter ] signal emitted: { &"name": "Counter", &"count": 2 }
[ Counter ] signal emitted: { &"name": "Counter", &"count": 3 }

[ Counter ] signal emitted: { &"name": "Counter", &"count": 1 }

実装の詳細は、addons/redscribe/mrblib/actor.rb を参照してください。

actor.rb を使うことで、例えば、レース要素のあるミニゲームを作成できます。 https://github.com/tkmfujise/ReDScribe/blob/main/doc/examples/3_actor.md

resource

リソースを作成するための DSL です。

  • resource :key で、単一のリソースのスキーマを定義します。
  • resources :key => :keys で、複数存在するリソースのスキーマを定義します。
require 'addons/redscribe/mrblib/resource'

resource :character do
resources :skill => :skills
end
  • スキーマで定義した名前と同名のメソッドをブロック付きで実行することでシグナルを発行します。
character 'Alice' do
job :magician

skill 'Fire' do
damage 2
end

skill 'Care' do
restore 3
end
end
Output
[ character ] signal emitted: {
&"job": &"magician",
&"name": "Alice",
&"skills":
{ &"damage": 2, &"name": "Fire" },
{ &"restore": 3, &"name": "Care" }
]
}

実装の詳細は、addons/redscribe/mrblib/resource.rb を参照してください。

resource.rb を使うことで、例えば、DSL から Godot のリソースファイルを生成できます。 https://github.com/tkmfujise/ReDScribe/blob/main/doc/examples/2_resource_generator.md

その他

他にも addons/redscribe/mrblib には、

  • math
  • shell

などがあります。

詳細は、下記を参照してください。 https://github.com/tkmfujise/ReDScribe/blob/main/doc/addons/mrblib.md

次の章では、resource.rb を使って、Godot のリソースファイルの生成を一緒に作ってみましょう。