Stingray Editor には、プロジェクト データ、Stingray エンジン、オペレーティング システムの操作に役立つ関数を提供する、複数の JavaScript サービスが含まれています。Stingray Editor に組み込まれた標準機能のほとんどは、ユーザ インタフェースでユーザによって要求される編集タスクを実行するために、これらのサービスを利用しています。また、ユーザのカスタム プラグインでこれらと同じサービスを利用することができます。
JavaScript モジュール内のすべてのエディタの標準サービスは、editor/core/js/services にあります。たとえば、次のような特に便利な機能がいくつかあります。
asset-service は、保存、移動、名前変更、依存関係の処理など、アセットを管理する関数を提供します。
engine-service は、Stingray エンジンのインスタンスを直接操作するのに役立ちます。エディタが内部で実行するインスタンスとその他のリモートで接続されたエンジンの両方に対応します。たとえば、sendToEditors() 関数を、エンジンの Lua 環境で実行する Lua スクリプトを送信したり、リソースのコンパイルを要求したり、イベントを受け取ることなどに使用できます。
file-system-service は、プロジェクトがマウントされているローカル ファイル システムを操作するのに役立ちます。ファイルをリストしたり、SJSON データを読み取りや書き込みしたり、パスが存在することを確認できます。
host-service はオペレーティング システムと連携して、クリップボードのサポートや、ファイルを開いたり保存したりする場合に使用する標準ウィンドウを提供します。
settings-service は、ユーザの Stingray 設定内でデータの読み取りや書き込みをします。異なるセッションで、ユーザ プリファレンスなど一部の情報を同じにする必要がある場合は、このサービスを使用してデータを保存および取得することができます。
さらに多くのサービスがあります。現在、オートデスクではこれらのサービスによって公開されるすべての関数の完全なリファレンスをまとめる作業を行っています。その間、プラグイン内で使用できる関数を見つける最適な方法は、ソース コード ファイルを参照することです。
プラグインの JavaScript コードでサービスを使用するには、サービスの JavaScript モジュール 「インクルード」する必要があります。これは、require 関数の呼び出し、またはユーザ独自のモジュールを定義するために使用する define の呼び出しで実行します。
たとえば、次のカスタム アクションでは、require への呼び出しを使用します。require への最初のパラメータには、ホスト サービス モジュール(それが定義された JavaScript ファイル)がインクルードされています。2 番目のパラメータは、すぐに実行される関数です。この関数内で、ホスト サービスには、ユーザが関数のパラメータで割り当てた名前でアクセスできます。これは、プラグインの action 拡張機能に見つけることができるような、小さな定義済みのコード ブロック内で JavaScript リソースを使用できるようにするのに便利な方法です。
extensions = { actions = [ { name = "launch-website" type = "js" script = """ require(['services/host-service'], function (hostService) { hostService.openUrl("http://www.stingrayengine.com"); }); """ } ] }
ユーザ独自の JavaScript モジュール定義する場合(たとえば、カスタム パネルが付属する .js ファイル内で)、上記の require 呼び出しとまったく同じ方法で、ユーザのモジュールの define 呼び出し内にサービスのモジュールをインクルードできます。このサービスは、ユーザのモジュールの範囲内でその名前によって使用できるようになります。したがって、次の例に示すように、そのモジュール内で作成した任意の関数で呼び出すことができます。
define(['services/host-service'], function (hostService) { "use strict"; var exports = {} exports.openMyFavoriteUrl = function() { hostService.openUrl("http://www.stingrayengine.com") } return exports; });
エディタ サービスによって提供される関数のほとんどは、非同期であることに注意してください。関数呼び出しからの戻り値を使用する必要がある場合は、then() メソッドを使用して、最初の関数が完了した後に、次のコードが評価されることを確認する必要があります。詳細については、「プラグインの開発に関するヒント」を参照してください。