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に丸めた上で正規化するようにしています。