C++ Lua 統合
この文書では、Cataclysm: Bright Nights における Lua 統合の実装詳細を説明します。
BN はスクリプトの実行に Lua 5.3.6 を使用し、C++ 側のバインディングには sol2 v3.3.0 を使用しています。
C++ の構成
Lua ソースファイル
ビルド設定を簡単にし、移植性を高めるため、Lua 5.3.6 のソースコードを src/lua/ ディレクトリーに同梱しています。ビルドシステムがそれをコンパイルし、ゲーム実行ファイルとテスト用ライブラリーにリンクします。
Sol2 ソースファイル
Sol2 は簡単に同梱できます。src/sol/ に sol2 v3.3.0 の単一ヘッダー amalgamated 版があり、必要な場所でインクルードします。ヘッダーはかなり大きいため、インクルードするソースファイルは少ないほどよいでしょう。
sol/config.hpp- 設定ヘッダー。いくつかのオプションがここで定義されています。sol/forward.hpp- 前方宣言。sol/sol.hppの代わりにゲームのヘッダーからインクルードすべき軽量なヘッダーです。sol/sol.hpp- sol2 のメインヘッダー。非常に大きいため、ゲームのヘッダーからのインクルードは避けてください。
ゲームのソースファイル
Lua に関係するゲームのソースファイルにはすべて catalua 接頭辞が付いています。
新しいバインディングを追加する場合は、src/catalua_bindings.cpp にある既存の例を確認し、Sol2 ドキュメントの関連部分を読んでください。
catalua.h(およびcatalua.cpp)- Lua のメインインターフェース。コードベースのほとんどがインクルードする唯一のヘッダーで、公開インターフェースを提供します。catalua_sol.hおよびcatalua_sol_fwd.h- コンパイル用のカスタムプラグマを備えたsol/sol.hppとsol/forward.hppのラッパーです。catalua_bindings*- ゲームの Lua バインディングはここにあります。座標バインディング(catalua_bindings_coords*.cpp、catalua_coord.h)は特に複雑です。Lua 側の API と設計上の理由についてはcoordinates.mdを参照してください。catalua_console.h(.cpp)- ゲーム内 Lua コンソール。catalua_impl.h(.cpp)-catalua.h(.cpp)の実装詳細。catalua_iuse_actor.h(.cpp)- Lua 駆動のiuse_actor。catalua_log.h(.cpp)- コンソール用のインメモリーロギング。catalua_luna.h- 自動ドキュメント生成機能を備えたユーザータイプ登録インターフェース、通称luna。catalua_luna_doc.h-lunaで登録されるか、ドキュメント生成器に公開される型の一覧。catalua_readonly.h(.cpp)- Lua テーブルを読み取り専用としてマークする関数。catalua_serde.h(.cpp)- Lua テーブルと JSON の間の(逆)シリアライズ。catalua_type_operators.h-string_id型のバインディング実装を補助するマクロ。