マウスの遠隔操作:Fortniteタイプ
「Verethragna(ウルスラグナ) 0.10.2」で実装された新機能について4。
さて、前回の続きで。
既に「0.10.7」をリリースしておいてあれなんですが、FFXIVとApexはマウス同期機能(MouseSync)を使えばまあほぼほぼ対応できてると思うんですがFortniteがですねー、一味違うんですよ。
FFXIVとApexは前回の記事にも書きました通り、一定の位置でマウスカーソルの位置が固定されるんです。Apexは常に、FFXIVの場合はマウスボタンを押している間は固定とゆー感じで。
ところがFortniteの場合はですね、画面(ウィンドウ)の端に行くと固定はされるんです。そこまでは同じなんですが、例えばモニターが1920x1080の場合、Fortniteをフルスクリーンでプレイしますと、マウスカーソルを右端に持っているとX座標は1919で固定されるんですが、さらにマウスを右に移動するとそれを検知するんです。
どーゆーことかと言いますと、マウスカーソルの座標ではなく、マウスの移動量を検知している模様で。つまり、画面の端にマウスカーソルがあると座標上はそれ以上は移動をしないので、GetCursorPosの値はそのままだしWM_MOUSEMOVEは来ないし的な。この移動量を取得するにはマウスのデバイスの状態的な何かを取得する必要がありまして。標準のWindows APIでは取得は無理ぽいですへい。
とゆーことで、Verethragnaはクライアント側のマウスカーソルの絶対座標を基にサーバー側のマウスカーソルを移動させているので、現状ですと画面端までマウスカーソルを移動させるとそれ以上のマウスの移動量が取得できないのでFortniteのカメラ移動が途中で止まってしまうんですよね。残念です。
ここで賢明な方はお気づきになったかと思います。そう、Fortnite以外の場合も座標ではなく移動量なのではないかと。そうなんです、実際にFFXIVにおいてもマウスカーソルを画面端に固定(マウスボタンを押して)した場合は動かないんですね。FFXIVも移動量でしたか。てかもしかするとApexもそうなのかもなんですけどApexは画面の中心で固定されているので大丈夫なんですよね。
てなことで対応するにはマウスの移動量で処理しないといけないと思うんですけど、実は「0.10.7」では何とか勘とかマウスの移動量の取得自体はできてるので、いつの日か実装する日がくるかもしれませんてかオーダーメイドならいけるかもしれません的なところでこのシリーズを締めくくろーかと思います。
おわり。