先日の投稿のあと、「あのプラグインで操作ができるんなら、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時半で眠い目こすりながらだったので、今朝起きてから「明らかにこれダメだろ」なところを修正してリビルド。無事に動いた。
結構やっつけに近い形で書いたコードなので、不具合とかあると思う。ソースは置いておくので、誰かちゃんときれいに作ってくれないかな。