JR東日本トレインシミュレータに体験版がでたみたいなので、せっかくだからKATOのEC-1で遊んでみた。
遊んでみたと言っても、JR東日本トレインシミュレータがEC-1に対応してるわけでもないので、「EC-1の入力を受け取って、キーボードを連打したことにして操作する」プログラムを作成。
EC-1の操作そのものはEC1ToBVETS作る過程で知ったので、C++でサクッと作成。
今回C++なのは、別に.Netのプログラムである必要がないからと、Win32APIを使うならなんだかんだでCかC++使ったほうが楽だから。
while(true) {
ec1.update();
EC1Notch notch = ec1.getNotch();
if (prev_notch != EC1Notch::Unknown && prev_notch != notch) {
if (notch == EC1Notch::EB) {
sendKey('1');
} else if (notch == EC1Notch::Off) {
// 位置リセットのためにaキー9連打(EBからでも切にできる)
for(UINT reset_count = 0; reset_count < 9; reset_count++) {
sendKey('A');
}
} else if(notch < prev_notch) {
int delta = static_cast<int>(prev_notch) - static_cast<int>(notch);
// ハンドル上げ
for(int count = 0; count < delta; count++) { sendKey('Q'); }
} else if (notch > prev_notch) {
// ハンドル下キー
int delta = static_cast<int>(notch) - static_cast<int>(prev_notch);
for(int count = 0; count < delta; count++) { sendKey('Z'); }
}
}
prev_notch = notch;
EC1Reverser reverser = ec1.getReverser();
if (prev_rev != reverser) {
switch (reverser) {
case EC1Reverser::Forward:
sendKey(VK_UP);
break;
case EC1Reverser::Off:
if (prev_rev == EC1Reverser::Forward) {
sendKey(VK_DOWN);
} else if (prev_rev == EC1Reverser::Back) {
sendKey(VK_UP);
}
break;
case EC1Reverser::Back:
sendKey(VK_DOWN);
break;
default:
break;
}
}
prev_rev = reverser;
Sleep(10);
}
無限ループしてEC-1から入力をもらいつつ、キー送信でJR東日本トレインシミュレータを操作。ただこれだけ。
一応EC-1に依存する部分はEC1クラスにまとめてあるので、ここもうちょっと弄ると、ほかのコントローラーにも対応できそう。あとこれはワンハンドルマスコン車のみ対応で、ツーハンドルマスコンの211系とかキハ54とかは全く想定されていない。
ソースコードはGitLabで公開