AtsEXプラグイン開発 クイックスタート

お急ぎの方向けに、AtsEXプラグインの開発に必要な情報を最小限に絞って説明しています。
現時点ではAtsEXプラグインの文法のうち最も根幹となる部分のみの解説になります。より込み入った部分の仕様についてはSDKを参考にしてください。

前提として、C#の言語仕様をある程度理解している必要があります。

INDEX

1. AtsEXプラグインの仕組み

2. プラグインアセンブリ (DLL) の開発①:基本文法

3. プラグインアセンブリ (DLL) の開発②:各種機能の概要と呼び出し方

執筆中……

4. 開発したプラグインを実行させる方法

執筆中……

1. AtsEXの仕組み

1-1. AtsEXプラグインの種類とその特徴

AtsEXプラグインは、その実行形態によって

これら3種類に分けることができます。

車両プラグイン

車両プラグインは、車両データに同梱するプラグインです。
形としては通常のBVEにおけるATSプラグインに近いと言えます。

マッププラグイン

マッププラグインは、路線データに同梱するプラグインです。
通常のBVEでは提供されていない、新しい形のプラグインになります。

拡張機能

拡張機能は、他の2種類のプラグインとは異なり読み込まれている車両、路線に関わらず常に読み込まれる仕様のプラグインです。
形としては入力デバイスプラグインに近いと言えます。

どの種類のAtsEXプラグインでも、AtsEXの一部機能が制限されるようなことはありません
車両プラグインでも、マッププラグインでも、拡張機能でも、変わらずAtsEXの機能をフル活用することができます。

2. プラグインアセンブリ (DLL) の開発①:基本文法

2-1. 車両・マッププラグイン:メインクラスの定義例

以下に示すのが、最小構成のAtsEX車両・マッププラグインのコードです。

以下のコードをビルドするには、NuGetから 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 属性を付加し、そのパラメーターとして

ようなインターフェイスまたはクラスを指定します。
例えば以下のコードでは、本来のメインクラスが HogeExtension クラスであるところを IHogeExtension インターフェイスに置き換えています。

HideExtensionMain属性 (任意)

AtsEX拡張機能のメインクラスに HideExtensionMain 属性を付加すると、この拡張機能のメインクラスのインスタンスについて、他のプラグインからの取得が禁止されます

3. プラグインアセンブリ (DLL) の開発②:各種機能の概要と呼び出し方

執筆中……

4. 開発したプラグインを実行させる方法

執筆中……