BveTs
ATSプラグインを初めて作る方に少しでも参考になればと思います。
->DXDynamicTexture(C#)の使い方
->C#で作るATSプラグイン
->AtsEXを使ったプラグインを作成する方法 new!(23/02/23)
解説してほしい所があればDM等でご連絡ください
随時更新していきます
twitter:@Tn_E235
こちらのサイトにて画像付きで解説されています。
以下、自分用メモです。
以下のファイルを削除します。
ファイルを削除した状態でビルドするとエラーが出るので、エラーを解消していきます。
基本的に赤線が表示されている箇所を削除すればOKです。
ここの部分を削除するとマスコンの状態が反映されません。
お疲れ様です。これでビルドして成功すれば完了です。
64bitでビルドしたプラグインを単体で使用する際に、Bve本体が落ちる現象が発生します。
今回使用しているテンプレートは、とてもふるーいので、以下の関数を追加します。
atsplugin.hの最下部に追加
Ats.cppの最下部に追加
Ats.defの最下部に追加
あれ、DetailManagerってLoad/Dispose無くても動くんだっけ
— あすくとついでに846人のきつね (@AskED757001) July 13, 2020
Elaps関数
内のpanel配列
に値(整数型)を入れることでパネル出力されます。
panel
配列の要素数はになっていて、要素番号がパネルインデックスに対応しています。
例えば、ats0の画像を表示させたい場合、
とすることで、出力に対応した画像が表示されます。
これができれば何でもできます(何でもできるとは言っていない)
Elaps関数
内のsound
配列に値(整数型)を入れることでパネル出力されます。
sound
配列の要素数はになっていて、要素番号がサウンドインデックスに対応しています。
例えば、ats0の音声を再生させたい場合、
とします。再生開始の次フレーム以降は、
とします。わからんと思うけど、がんばれ。イメージとしてはこんな感じ。
地上子(Beacon)を通過すると、SetBeaconData
関数が呼ばれます。
ATS_BEACONDATAから以下の情報がとれます。
取れる情報 | 型 | 説明 |
---|---|---|
Type | int | 地上子番号 |
Signal | int | セクションに対応する信号番号 |
Distance | float | 対応閉塞までの閉塞距離 |
Optional | int | 地上子の第3引数(sendData) |
地上子構文:distance;Beacon.put(type,section,sendData);
Typeで条件分岐させて処理すればOKです。かんたんですね。
地上子で小数の値を入れるとintになる?(切り捨て?)
ATS_BEACONDATAは構造体なので
な感じで情報がとれます
※beaconDataはsetBeaconData関数の引数
地上子を踏んだ順番(記述順)に読み込まれます
保安装置キーで設定されたキーが押下されたときKeyUp
関数、離されたときKeyDown
関数が呼ばれます。引数で押されたキー番号が入ってくるので、条件分岐させて処理してください。
一定時間押下すると長押しとして処理されます。(毎フレーム呼ばれる、だぶん)
種類 | 番号 | 保安装置キー | キーボード |
---|---|---|---|
ATS_KEY_S | 0 | S Key | Space |
ATS_KEY_A1 | 1 | A1 Key | Insert |
ATS_KEY_A2 | 2 | A2 Key | Delete |
ATS_KEY_B1 | 3 | B1 Key | Home |
ATS_KEY_B2 | 4 | B2 Key | End |
ATS_KEY_C1 | 5 | C1 Key | PageUp |
ATS_KEY_C2 | 6 | C2 Key | PageDown |
ATS_KEY_D | 7 | D Key | 2 |
ATS_KEY_E | 8 | E Key | 3 |
ATS_KEY_F | 9 | F Key | 4 |
ATS_KEY_G | 10 | G Key | 5 |
ATS_KEY_H | 11 | H Key | 6 |
ATS_KEY_I | 12 | I Key | 7 |
ATS_KEY_J | 13 | J Key | 8 |
ATS_KEY_K | 14 | K Key | 9 |
ATS_KEY_L | 15 | L Key | 0 |
まだini使ってんのかって誰かに言われた記憶
インポートかなんか生成された.hファイルを取り込む
ソリューションなんたらで新しいファイル作ってコピペしても良い(ボクはこっち派)
inimoniで生成されたヘッダファイルがiniRead.hの場合
Ats.dllまでのパスを取得してゴニョゴニョ…
iniファイルの設定例
PANELセクションのindex0の値を取得する
inimoniでdouble型を指定すると,ただしく扱われないらしいので以下の方法で修正する.
修正方法はこちら
神的な解説はこちら
時間があったら実装してみる
→した
とりあえず簡単なソースを必要な部分だけ載せておきます。
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>ATSPI制作Tips:日付を跨ぐデータはvehicleState.Timeはそのまま積算されるので時刻を表示する場合は86400000で割った余りの値を使うとよい
— CT (@ct_813) July 12, 2020
引数
まずはじめに,デバッガーの設定を行ってください.
Ats.dll
をデバッグ用の車両に組み込みますデバッグは大変…がんばろう
小ネタ
— 停P@R (@stop_pattern) July 21, 2020
dllの出力先をデバックしたい車両にするっていうのが常套手段
でも個人的には出力先はそのままdll本体だけシンボリックリンクを張るのがおススメ
私の環境ではBveTs5.7ではデバッグができませんでした(謎)
Bvets6.0RCではデバッグができました
メイン関数
Atsプラグインのバージョンを返す関数。何に使うのかは知らない。
車両データが読み込まれたときに呼ばれる関数。
初期化時に呼ばれる関数。シナリオの読み込み、始発駅に戻る際に呼ばれるが、駅ジャンプでは呼ばれない。
毎フレーム呼ばれる関数。
力行段数が変化したときに呼ばれる関数。
制動段数が変化したときに呼ばれる関数。
レバーサーが変化したときに呼ばれる関数。
キーが押されたときに呼ばれる関数。
キーを離したときに呼ばれる関数。
警笛を押したときに呼ばれる関数。
ドアが開いたときに呼ばれる関数。
ドアが閉まったときに呼ばれる関数。
現在の閉塞の信号現示が変化したときに呼ばれる関数。
地上子を踏んだ時に呼ばれる関数。
プラグインが本体に読み込まれたときに呼ばれる関数。
プラグインが本体から解放されたときに呼ばれる関数。