私はメインループのあるゲームを持っています-各ループで、ゲーム内のすべてのNPCを呼び出します-> ProcessAI()でアクションを実行します。これはサーバーであるため、ProcessAIの呼び出しは、クライアントゲームのようにすべてのフレームで実行されるわけではありません。また、シングルスレッドです。
今、私はluabindを使用してluaでC ++コードベースを拡張したいと思いました(多分、ブーストオーバーヘッドがあっても)。だから私は私のNPCクラスのいくつかの関数をLUAに公開します。
たとえば、アクタースクリプト(より洗練された動作をするボスバトル)を作成したかったのですが、c ++ ProcessAI関数でイベントが発生するたびに、これを特定のNPCの対応するluaスクリプトに委任します。
私はboss.luaスクリプトで次のようなものを想像しました
function OnEngageCombat(NPC)
NPC:say ("Some taunts...")
ScheduleEvent(CastEvilSpell,/*time*/2000,/*numExecutions*/1,)
end
function CastEvilSpell(NPC)
NPC:CastSpell("someSpell")
end
ただし、これを行う方法がわかりません。ScheduleEventはLuaにエクスポートされたC ++関数である必要がありますが、これを使用してNPC(ボス)のオブジェクト参照を保持し、そのスクリプトで関数を呼び出すための最良のアプローチは何でしょうか。約2秒後?
さらに、この遅延実行(NPCが相互に対話できるようにしたい)とともに、私の現在のアイデアは、特別なNPCごとにアクター動作スクリプトを用意することです。
今私が想像したのは、2人のNPC間の会話を開始することです。
function DoGossip(NPC)
// check if NPC1 is close to NPC2
if NPC:DistanceToNpc("SomeGuy") < 10 then
StartConversation1()
end
function StartConversation1(NPC)
NPC:Say("Hello ...")
// wait a moment now trigger NPC2 to reply
????
end
基本的に-NPC2の動作スクリプトであるluascriptBに存在するluascriptAから関数を呼び出すにはどうすればよいですか。良いデザインは何でしょうか?
ありがとう