214 lines
4.7 KiB
C++
214 lines
4.7 KiB
C++
// XMouse.h: interface for the CXMouse class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_XMOUSE_H__E79C3125_5BF0_499D_B76E_6C1070554E8F__INCLUDED_)
|
|
#define AFX_XMOUSE_H__E79C3125_5BF0_499D_B76E_6C1070554E8F__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include <IInput.h>
|
|
struct ITimer;
|
|
struct ILog;
|
|
|
|
#ifdef PS2
|
|
#include "Joystick.h"
|
|
#endif
|
|
|
|
struct ICVar;
|
|
|
|
#define XMOUSE_MAX_MOUSE_EVENTS 12 // e.g. mouse buttons, axis, ..
|
|
|
|
class CXMouse :
|
|
public IMouse
|
|
{
|
|
public:
|
|
CXMouse()
|
|
{
|
|
m_exmode=false;
|
|
m_pMouse = NULL;
|
|
m_kInertia=0;
|
|
m_fAccelerationScale=0.5f;
|
|
m_bAcceleration=false;
|
|
i_mouse_buffered = NULL;
|
|
}
|
|
virtual ~CXMouse(){
|
|
}
|
|
|
|
class CInput* m_pInput;
|
|
|
|
#ifdef WIN32
|
|
bool Init(ISystem *pSystem,LPDIRECTINPUT8 &g_pdi,HINSTANCE hinst,HWND hwnd,bool dinput);
|
|
#else
|
|
|
|
////////////////////////////////////////////////////
|
|
///////////////PS2 SPECIFIC INIT ///////////////////
|
|
////////////////////////////////////////////////////
|
|
#ifdef PS2
|
|
|
|
bool m_Initialized;
|
|
|
|
bool Init(ISystem *pSystem);
|
|
bool IsInit(){return m_Initialized;}
|
|
|
|
#endif
|
|
////////////////////////////////////////////////////
|
|
///////////////END PS2 SPECIFIC ////////////////////
|
|
////////////////////////////////////////////////////
|
|
|
|
#endif
|
|
|
|
void Shutdown();
|
|
void Update(bool bPrevFocus);
|
|
|
|
void ClearKeyState();
|
|
|
|
bool MouseDown(int p_numButton);
|
|
bool MousePressed(int p_numButton);
|
|
bool MouseDblClick(int p_numButton);
|
|
bool MouseReleased(int p_numButton);
|
|
bool GetOSKeyName(int nKey, wchar_t *szwKeyName, int iBufSize);
|
|
|
|
// int GetMouseWheelRotation(bool reset = true); // get wheel state for aplication
|
|
void SetMouseWheelRotation(int value); // set wheel state from app message loop
|
|
|
|
bool SetExclusive(bool value,void *hwnd=0);
|
|
|
|
inline float GetDeltaX() { return m_Deltas[0]*(m_fSensitivity*m_fSensitivityScale); }
|
|
inline float GetDeltaY() { return m_Deltas[1]*(m_fSensitivity*m_fSensitivityScale); }
|
|
inline float GetDeltaZ()
|
|
{
|
|
m_wheelChecked = true;
|
|
return m_Deltas[2]*(m_fSensitivity*m_fSensitivityScale);
|
|
}
|
|
|
|
void SetSensitvity(float fSensitivity)
|
|
{
|
|
if(fSensitivity>0)
|
|
m_fSensitivity=fSensitivity/100;
|
|
else
|
|
m_fSensitivity=0.0f;
|
|
}
|
|
float GetSensitvity()
|
|
{
|
|
return m_fSensitivity*100;
|
|
}
|
|
void SetSensitvityScale(float fSensScale)
|
|
{
|
|
m_fSensitivityScale=fSensScale;
|
|
}
|
|
float GetSensitvityScale()
|
|
{
|
|
return m_fSensitivityScale;
|
|
}
|
|
inline void SetInertia(float kinertia) { m_kInertia=kinertia; }
|
|
|
|
void SetVScreenX(float fX);
|
|
void SetVScreenY(float fY);
|
|
float GetVScreenX();
|
|
float GetVScreenY();
|
|
private:
|
|
bool Acquire();
|
|
bool UnAcquire();
|
|
int XKEY2IDX(int nKey);
|
|
|
|
void PostEvent( int key,SInputEvent::EType type,float value=0,unsigned int timestamp=0 );
|
|
|
|
//smooth movement & mouse accel
|
|
void CapDeltas(float cap);
|
|
void SmoothDeltas(float accel,float decel=0.0f);
|
|
|
|
#ifdef WIN32
|
|
LPDIRECTINPUTDEVICE8 m_pMouse;
|
|
#else
|
|
void * m_pMouse;
|
|
#endif
|
|
|
|
HINSTANCE m_hinst;
|
|
HWND m_hwnd;
|
|
|
|
#ifndef PS2
|
|
POINT m_previouspoint;
|
|
#endif
|
|
|
|
ICVar * i_mouse_buffered;
|
|
//! mouse accel cvars
|
|
ICVar * i_mouse_accel;
|
|
ICVar * i_mouse_accel_max;
|
|
//! mouse smooth cvar
|
|
ICVar * i_mouse_smooth;
|
|
//! mouse mirror cvar
|
|
ICVar * i_mouse_mirror;
|
|
|
|
float m_fDblClickTime;
|
|
|
|
float m_Deltas[5];
|
|
float m_OldDeltas[2];//!< just old x,y, to smooth movement.
|
|
|
|
float m_DeltasInertia[2];
|
|
float m_kInertia;
|
|
unsigned char m_Events[XMOUSE_MAX_MOUSE_EVENTS]; //!<
|
|
unsigned char m_oldEvents[XMOUSE_MAX_MOUSE_EVENTS]; //!<
|
|
float m_fLastRelease[XMOUSE_MAX_MOUSE_EVENTS]; //!<
|
|
bool m_bDblClick[XMOUSE_MAX_MOUSE_EVENTS]; //!<
|
|
|
|
bool m_exmode;
|
|
bool m_dinput;
|
|
bool m_wheelChecked;
|
|
|
|
float m_fVScreenX;
|
|
float m_fVScreenY;
|
|
|
|
ILog * m_pLog;
|
|
ITimer * m_pTimer;
|
|
ISystem * m_pSystem;
|
|
|
|
float m_fSensitivity;
|
|
float m_fSensitivityScale;
|
|
float m_fAccelerationScale;
|
|
bool m_bAcceleration;
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
//////////////PS2 SPECIFIC////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef PS2
|
|
|
|
int m_MousePort;
|
|
|
|
|
|
int XPos;
|
|
int YPos;
|
|
int XOldPos;
|
|
int YOldPos;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
//Used to simulate mouse input with pad (if needed)
|
|
void SetPad(CJoystick *pJoy){m_pJoy=pJoy;}
|
|
|
|
private:
|
|
|
|
//If no mouse connected, use pad to simulate it
|
|
CJoystick *m_pJoy;
|
|
|
|
#endif
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
//////////////END PS2 SPECIFIC////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
};
|
|
|
|
#endif // !defined(AFX_XMOUSE_H__E79C3125_5BF0_499D_B76E_6C1070554E8F__INCLUDED_)
|