JR東日本トレインシミュレータの体験版で遊んでみた

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で公開

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です