Microsoft DirectX 8.0 (C++) |
条件とは、デバイス内の現在のセンサ値に反応して適用されるフォースのことである。すなわち、条件は、ジョイスティック ハンドルの位置または速度など、デバイスに関する情報を必要とする。
一般的に、条件はゲームやその他のアプリケーションにおける個別のイベントには関連付けられていない。条件は、フライト スティックの硬さや緩さ、または直進の位置に戻すハンドルの向きなどの状態を表現する。
条件は、定義されたマグニチュードを持たない。マグニチュードは、入力オブジェクトの動作と位置によって測定される。
Microsoft® DirectInput® は、次のような条件のエフェクトを定義する。
ほとんどのハードウェア デバイスでは、条件にエンベロープを適用できない。
条件には次のタイプのパラメータがある。
飽和をサポートしていないデバイスもある。
デッドバンドをサポートしていないデバイスもある。
条件に継続時間を設定することができる。しかし、継続時間を INFINITE (-1) に設定し、アプリケーションで特定のイベントに応答するときだけエフェクトを停止する方法が使用されることが多い。
条件を生成するには、IDirectInputDevice8::CreateEffect メソッドの rguid パラメータに、次に挙げる値のどれか 1 つを渡す。
DIEFFECTINFO 構造体のメンバ dwEffType (DIEFT_GETTYPE(dwEfftype)) の下位バイトが DIEFT_CONDITION に等しい場合は、IDirectInputDevice8::EnumEffects メソッドで取得したほかの任意の GUID を渡すことができる。この方法を使えば、業者が設計したハードウェア特有の条件を使用することができる。
条件のタイプ固有構造体は DICONDITION である。複数軸の条件では、1 つの軸に対して複数の構造体からなる配列を使用するか、または特定の方向での条件を定義する 1 つの構造体を使用することができる。どちらの場合でも、DIEFFECT 構造体の cbTypeSpecificParams メンバに、使用するバイト数を設定する必要がある。すなわち、sizeof(DICONDITION) * n を設定する必要がある。ここで n は使用する構造体の数を表す。1 つあるいは複数の構造体を使用する方法の詳細については、DICONDITION 構造体の説明を参照すること。
エフェクトの係数と飽和について正と負の両方がデバイスでサポートされているかどうかを確認するには、アプリケーションで IDirectInputDevice8::GetEffectInfo メソッドまたは IDirectInputDevice8::EnumEffects メソッドを呼び出し、DIEFFECTINFO 構造体の dwEffectType メンバを調べなければならない。エフェクトが DIEFT_POSNEGCOEFFICIENTS フラグを返さなければ、lNegativeCoefficient メンバの値は無視され、lPositiveCoefficient の値が軸全体に適用される。同様に、エフェクトが DIEFT_POSNEGSATURATION フラグを返さなければ、dwNegativeSaturation の値は無視され、dwPositiveSaturation の値が負の飽和レベルとして使用される。また、エフェクトが DIEFT_SATURATION フラグを返さなければ、dwPositiveSaturation と dwNegativeSaturation の両方の値が無視され、飽和は適用されない。
また、DIEFFECTINFO.dwEffectType に DIEFT_DEADBAND フラグが設定されているかどうかをチェックすることで、デッドバンドが条件に対してサポートされているかどうかを知ることができる。サポートされていない場合、DICONDITION 構造体の lDeadBand メンバの値は無視される。
係数には負数を設定することができる。こうすると、エフェクトは反対方向のフォースを生成する。たとえばスプリング エフェクトでは、係数に負数を設定すると、スプリング エフェクトはオフセット ポイントに向かって引っ張らずに、オフセット ポイントから離れる方向へ押すことになる。