KATO EC-1でBVEをプレイできるようにしてみた

先日の投稿のあと、「あのプラグインで操作ができるんなら、EC-1用のプラグイン書いたらJoyToKey不要にできるんじゃね?」と思って書いてみた。

まぁ書いてみたと言っても、C#書いたのなんて10年近くぶりなので、まずはVisual Studioを入れて、試し書き。

EC-1からの入力を受けてコンソールに表示するプログラムを書いたんだけど、XInputはともかく、Vortice.DirectInputを使っても、どうやって取得したらいいのかわからない。というか見えてないっぽい。
winmm.dllのジョイスティック系関数だとEC-1が見えたのでそれを使うことにした。

ボタンの組み合わせは先日調べたまんまなので、dwButtonsのビットをチェックする形で実装。

switch (this.joyInfo.dwButtons)
{
    case (1 << 9): return Notch.EB;
    case (1 << 8): return Notch.B8;
    case (1 << 9 | 1 << 8): return Notch.B7;
    case (1 << 7): return Notch.B6;
    case (1 << 9 | 1 << 7): return Notch.B5;
    case (1 << 8 | 1 << 7): return Notch.B4;
    case (1 << 9 | 1 << 8 | 1 << 7): return Notch.B3;
    case (1 << 6): return Notch.B2;
    case (1 << 9 | 1 << 6): return Notch.B1;
    case (1 << 8 | 1 << 6): return Notch.Off;
    case (1 << 9 | 1 << 8 | 1 << 6): return Notch.P1;
    case (1 << 7 | 1 << 6): return Notch.P2;
    case (1 << 9 | 1 << 7 | 1 << 6): return Notch.P3;
    case (1 << 8 | 1 << 7 | 1 << 6): return Notch.P4;
    case (1 << 9 | 1 << 8 | 1 << 7 | 1 << 6): return Notch.P5;
    default: return Notch.Unknown;
}

逆転ハンドルはスティックとして見えるので、上にある(0)のときは「前進」、中立(32767)は「切」、それ以外は「後進」として実装。

if (this.joyInfo.dwYpos == 0)
{
    return Reverser.Forward;
}
else if (this.joyInfo.dwYpos == 32767)
{
    return Reverser.Off;
}
else
{
    return Reverser.Back;
}

BVEへ送る部分は「入力デバイスプラグイン サンプルプログラム」のサンプルを拾ってきて参考にして書いた。

これ書き上げたのが昨日の23時半で眠い目こすりながらだったので、今朝起きてから「明らかにこれダメだろ」なところを修正してリビルド。無事に動いた。

結構やっつけに近い形で書いたコードなので、不具合とかあると思う。ソースは置いておくので、誰かちゃんときれいに作ってくれないかな。

コメントを残す

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