1.マップファイル
Beacon.Put(type, section, sendData);
type : 地上子種類 (整数)
section : 対応する閉塞の相対インデックス
sendData: プラグインに送る値 (整数)
- -1:信号値が0の閉塞インデックス 0:自列車のいる閉塞 1:次の閉塞 2…
- 相対インデックスが-1の場合には先行列車の設定が必要っぽい。
- 相対インデックスが-1、0の場合は、その信号値は必ず停止現示になる。
- 相対インデックス0を除く、自列車より後ろの閉塞はすべて進行現示の扱いになるっぽい。
- プラグインには絶対インデックスに変換されて信号値が渡される。
- 存在しない閉塞を指定するとプラグインが意図しない挙動をする可能性がある。
※SendDataについて
- 値域は-2147483648 ~ 2147483647
- 10進数で表記すること。2進数表記や16進数表記はエラーになる。
- その代わりに、BVEでサポートされている演算は記述可能 (例:Beacon.Put(60, 1, 4+256);)
2.プラグイン
地上子を通過するとSetBeaconDataが呼ばれる
進行方向順、同一距離程の場合は記載順に呼ばれる
void SetBeaconData(AtsBeaconData beaconData)
beaconData : 地上子情報の構造体
・float Distance : 対応する閉塞インデックスまでの距離
・int Optional : 地上子付加情報 (BeaconのSendData)
・int Signal : 対応する閉塞インデックスの信号値
・int Type : 地上子種類
※Typeについて
公式のATSプラグイン(C++)のテンプレートではTypeは0~255で定義されているが、実際はint型なので256以上も可能。
※Distanceについて
出力値を見た限りでは、対応する閉塞の距離程 - BVE内部の現在距離程(通常は次のElapseイベントで渡される距離程)と思われる。
PCでの演算の宿命だが、距離程に小数が含まれていると誤差が発生する。(いまのところ最大約30cmの誤差を確認)
※Beacon.Putで指定したインデックスの閉塞が存在しない場合
Distance=0, Signal=0が渡される。