Files
FC1/CryInput/Joystick.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

238 lines
4.2 KiB
C++

//////////////////////////////////////////////////////////////////////
//
// Crytek CryENGINE Source code
//
// File:Joystick.h
//
// History:
// -Jan 31,2001:Created by Marco Corbetta
//
//////////////////////////////////////////////////////////////////////
#ifndef JOYSTICK_H
#define JOYSTICK_H
#define JOY_DIR_UP 0
#define JOY_DIR_DOWN 1
#define JOY_DIR_LEFT 2
#define JOY_DIR_RIGHT 3
#define JOY_DIR_NONE -1
#define JOY_UPDATE_TIME 1.0f/10.0f //10 times for second
#include "Cry_Math.h"
#ifdef PS2
#include <libpad.h>
/////BUTTON'S ID FOR PS2
#define PS2_BUTTON_SQUARE 1
#define PS2_BUTTON_CROSS 2
#define PS2_BUTTON_TRIANGLE 3
#define PS2_BUTTON_CIRCLE 4
#define PS2_BUTTON_L1 5
#define PS2_BUTTON_L2 6
#define PS2_BUTTON_R1 7
#define PS2_BUTTON_R2 8
#define PS2_BUTTON_START 9
#define PS2_BUTTON_SELECT 10
#define PS2_DIR_LEFT 1
#define PS2_DIR_RIGHT 2
#define PS2_DIR_UP 3
#define PS2_DIR_DOWN 4
#endif
/*
===========================================
The Joystick interface Class
===========================================
*/
struct ILog;
//////////////////////////////////////////////////////////////////////
class CJoystick
{
public:
CJoystick();
~CJoystick();
bool Init(ILog *pLog);
void Update();
void ShutDown();
int GetNumButtons();
bool IsButtonPressed(int buttonnum);
int GetDir();
int GetHatDir();
// get analog direction (two analog sticks)
Vec3 GetAnalog1Dir(unsigned int joystickID) const;
Vec3 GetAnalog2Dir(unsigned int joystickID) const;
private:
bool m_initialized;
bool m_hatswitch;
int m_numbuttons;
float m_joytime;
unsigned char m_buttons[8];
unsigned char m_dirs[4];
unsigned char m_hatdirs[4];
unsigned int m_numjoysticks; //!< Number of available joysticks
// this is for returning analog controller directional input. Input is in the range -1..1 for the x and y axis. z unused
Vec3 *m_vAnalog1Dir;
Vec3 *m_vAnalog2Dir;
ILog *m_pLog;
/////////////////////////////////////////////////////////////////
///////////////PS2 SPECIFIC CODE ////////////////////////////////
/////////////////////////////////////////////////////////////////
#ifdef PS2
//PS2 INTERFACE
public:
bool ButtonPressed(int Type);
bool ButtonHasBeenPressed(int Type);
bool DigitalCrossDirection(int Type);
unsigned char LeftStickX();
unsigned char LeftStickY();
unsigned char RightStickX();
unsigned char RightStickY();
//PS2 "INTERNAL" UTILITY
private:
void GetAnalog(unsigned char *pData);
void GetDigital(unsigned char *pData);
void GetButton(unsigned char *pData);
//Convert the PS2 pad information in PC style format(used by the interface).
void ConvertPadInformation();
//The type of Joystick
int JoyType;
//For analogic stick
unsigned char m_RightX;
unsigned char m_RightY;
unsigned char m_LeftX;
unsigned char m_LeftY;
//For digital stick
bool m_Left;
bool m_Right;
bool m_Up;
bool m_Down;
//Digital button
bool m_L1;
bool m_L2;
bool m_R1;
bool m_R2;
bool m_Square;
bool m_Circle;
bool m_Triangle;
bool m_Cross;
bool m_Start;
bool m_Select;
bool m_TriggerL;
bool m_TriggerR;
bool m_old_L1;
bool m_old_L2;
bool m_old_R1;
bool m_old_R2;
bool m_old_Square;
bool m_old_Circle;
bool m_old_Triangle;
bool m_old_Cross;
bool m_old_Start;
bool m_old_Select;
bool m_old_TriggerL;
bool m_old_TriggerR;
//USED TO SIMULATE MOUSE/////////////////
float m_fMouseScreenX;
float m_fMouseScreenY;
float m_fMouseDeltaX;
float m_fMouseDeltaY;
public:
float GetVScreenX();
float GetVScreenY();
float GetDeltaX();
float GetDeltaY();
void SetScreenX(float x){m_MouseScreenX=x;}
void SetScreenY(float y){m_MouseScreenY=y;}
//END MOUSE SIMULATION //////////////////
///USED TO SIMULATE THE KEYBOARD ////////
bool KeyDown(int p_key);
bool KeyPressed(int p_key);
////////////////////////////////////////
bool HasControl;
bool HasMovControl(){return HasControl;}
#endif
/////////////////////////////////////////////////////////////////
///////////////END PS2 SPECIFIC CODE ////////////////////////////
/////////////////////////////////////////////////////////////////
};
#endif