POV

今日はあまりやる気が起きなかったので、悩む必要のない単純作業としてPOV入力への対応をやりました。
今日の差分
これで360コントローラの十字ボタンでも移動できるようになりました。


通常のジョイスティックの入力がX/Yの2軸で絶対座標を報告するのに対し、POV(Point Of View)は方向のみを報告するコントローラです。
DirectInputでは、

北から (ユーザーの正面側) 時計回りの実角度の 100 倍で表される。

となっているので、

float a = pov / 18000.0f * 3.1415927f;
float dx = std::sin(a);
float dy = std::cos(a);

として2軸のデータに変換しました。(北が0なのでsin/cosが逆)


なお、このままだと誤差で真下(dx=0,dy=-1)等が入力できなかったので、閾値以下の値は0に丸めた上で正規化するようにしています。