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
=> 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
[ 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
[ 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 のリソースファイルの生成を一緒に作ってみましょう。