この投稿では、Tiny-JS ライブラリを使用して C++ アプリケーションに JavaScript スクリプトのサポートを追加する方法について説明します。
Tiny-JS は、C++ に埋め込むためのライブラリであり、バインディング (スクリプトから C++ コードを呼び出す機能) のサポートとともに JavaScript コードの実行を提供します。
最初は、人気のあるライブラリである ChaiScript、Duktape、または connect Lua を使用したいと考えていましたが、依存関係や、さまざまなプラットフォームへの移植が困難になる可能性があるため、シンプルで最小限だが強力な MIT JS ライブラリを見つけることにしました。 JS はこれらの基準を満たしています。このライブラリの唯一の欠点は、作成者によるサポート/開発がないことですが、コードは非常にシンプルなので、必要に応じてサポートを引き継ぐことができます。
リポジトリから Tiny-JS をダウンロードします。
https://github.com/gfwilliams/tiny-js
次に、スクリプトを担当するコードに Tiny-JS ヘッダーを追加します。
#include "tiny-js/TinyJS.h"
#include "tiny-js/TinyJS_Functions.h"
TinyJS .cpp ファイルをビルド ステージに追加すると、スクリプトの読み込みと実行の作成を開始できます。
ライブラリの使用例はリポジトリで入手できます。
https://github.com/gfwilliams/tiny-js/blob/master/Script.cpp
https://github.com/gfwilliams/tiny-js/blob/wiki/CodeExamples.md
ハンドラー クラスの実装例は、SpaceJaguar プロジェクトにあります。
https://gitlab.com/demensdeum/space-jaguar-action-rpg/-/blob/master/project/src/Controllers/SpaceJaguarScriptController/SpaceJaguarScriptController.h
https://gitlab.com/demensdeum/space-jaguar-action-rpg/-/blob/master/project/src/Controllers/SpaceJaguarScriptController/SpaceJaguarScriptController.cpp
アプリケーションに追加されたゲーム スクリプトの例:
https://gitlab.com/demensdeum/space-jaguar-action-rpg/-/blob/master/project/resources/com.demensdeum.spacejaguaractionrpg.scripts.sceneController.js
ソース
https://github.com/gfwilliams/tiny-js
https://github.com/dbohdan/embedded-scripting-languages
https://github.com/AlexKotik/embeddable-scripting-languages
