AtsEXプラグイン開発 クイックスタート
お急ぎの方向けに、AtsEXプラグインの開発に必要な情報を最小限に絞って説明しています。
現時点ではAtsEXプラグインの文法のうち最も根幹となる部分のみの解説になります。より込み入った部分の仕様についてはSDKを参考にしてください。
INDEX
1. AtsEXプラグインの仕組み
2. プラグインアセンブリ (DLL) の開発①:基本文法
3. プラグインアセンブリ (DLL) の開発②:各種機能の概要と呼び出し方
執筆中……4. 開発したプラグインを実行させる方法
執筆中……1. AtsEXの仕組み
1-1. AtsEXプラグインの種類とその特徴
AtsEXプラグインは、その実行形態によって
- 車両プラグイン
- マッププラグイン
- 拡張機能
車両プラグイン
車両プラグインは、車両データに同梱するプラグインです。
形としては通常のBVEにおけるATSプラグインに近いと言えます。
マッププラグイン
マッププラグインは、路線データに同梱するプラグインです。
通常のBVEでは提供されていない、新しい形のプラグインになります。
拡張機能
拡張機能は、他の2種類のプラグインとは異なり読み込まれている車両、路線に関わらず常に読み込まれる仕様のプラグインです。
形としては入力デバイスプラグインに近いと言えます。
どの種類のAtsEXプラグインでも、AtsEXの一部機能が制限されるようなことはありません。
車両プラグインでも、マッププラグインでも、拡張機能でも、変わらずAtsEXの機能をフル活用することができます。
2. プラグインアセンブリ (DLL) の開発①:基本文法
2-1. 車両・マッププラグイン:メインクラスの定義例
以下に示すのが、最小構成のAtsEX車両・マッププラグインのコードです。
AtsEx.PluginHost
をインストールしておく必要があります。
車両プラグイン
マッププラグイン
2-2. 車両・マッププラグイン:クラス、属性などの解説
PluginBase抽象クラス
PluginBase
抽象クラスを継承したクラスがAtsEXプラグインのメインクラスとして認識される仕様ですが、
基本的には PluginBase
の派生である AssemblyPluginBase
抽象クラスを継承することになります。
PluginBase抽象クラス、AssemblyPluginBase抽象クラスの違い
AtsEXプラグインとして認識されるのはどちらの抽象クラスを継承した場合も同様なのですが、
AssemblyPluginBase
では、AtsEXプラグインの名前や説明、著作権表示等が AssemblyInfo.cs
で定義したアセンブリ情報を参照して自動で設定されます。
PluginType属性
AtsEXプラグインのメインクラスは、PluginBase
抽象クラスを継承することに加えて、PluginType
属性を付加することによってプラグインの種類を指定する必要があります。
Tickメソッドの戻り値について
車両プラグインの場合は VehiclePluginTickResult
型のインスタンス、マッププラグインの場合は MapPluginTickResult
型のインスタンスを返してください。
それぞれのプラグインの種類に向けた、AtsEX本体に情報を伝達するためのメンバーが定義されています。
VehiclePluginTickResult | ノッチ出力に介入ができます。機能は通常のATSプラグインにおける ATS_HANDLES 構造体と同等ですが、複雑な処理も簡単に実装できるようになっています。 |
MapPluginTickResult | 特になし (ver1.0時点) |
2-3. 拡張機能:メインクラスの定義例
以下に示すのが、最小構成のAtsEX拡張機能のコードです。
車両・マッププラグインでも必要だった要素に加えて、拡張機能の場合のみ必要となる要素が存在します。
2-4. 拡張機能:クラス、属性などの解説
PluginBase抽象クラス、PluginType属性
車両・マッププラグインでの解説を参照してください。
IExtensionインターフェイス
AtsEX拡張機能のメインクラスは、車両・マッププラグインの場合と同様に PluginBase
抽象クラスを継承し、PluginType
属性を付加することに加えて、
IExtension
インターフェイスを実装する必要があります。
IExtension
インターフェイスにはメンバーは何も定義されていません (ver1.0時点)。
あくまでもAtsEX本体の処理上の都合になりますが、ご理解ください。
ExtensionMainDisplayType属性 (任意)
拡張機能のメインクラスのインスタンスは他のプラグインから取得することができるのですが (詳しくは後述)、 その際に見える型を実際とは異なるクラス・インターフェイスへ置き換えることのできる機能です。
AtsEX拡張機能のメインクラスに ExtensionMainDisplayType
属性を付加し、そのパラメーターとして
IExtension
インターフェイスを実装しており、かつ- メインクラスの継承 (実装含む) 元である
例えば以下のコードでは、本来のメインクラスが
HogeExtension
クラスであるところを IHogeExtension
インターフェイスに置き換えています。
HideExtensionMain属性 (任意)
AtsEX拡張機能のメインクラスに HideExtensionMain
属性を付加すると、この拡張機能のメインクラスのインスタンスについて、他のプラグインからの取得が禁止されます。