00001
00013 #if !defined(PAD_INC)
00014 #define PAD_INC
00015
00016 #include <string>
00017
00018
00019
00020 #include <sstream>
00021
00022
00028 class cPad {
00029 private:
00030 char axes[4];
00031 unsigned short buttons;
00032 void* playerdata;
00033 public:
00034
00040 enum Axes {
00041 AX_LR1, AX_UD1, AX_UD2, AX_LR2
00042 };
00043
00053 enum Buttons {
00054 BT_SQUARE, BT_DELTA, BT_CROSS, BT_CIRCLE, BT_L1, BT_L2, BT_R1, BT_R2, BT_SELECT, BT_START, BT_J1B, BT_J2B, BT_HU, BT_HD, BT_HL, BT_HR
00055 };
00056
00060 cPad() {
00061 reset();
00062 }
00063
00071 void reset() {
00072 axes[0] = axes[1] = axes[2] = axes[3] = 0;
00073 buttons = 0;
00074 };
00075
00080 void setAxis(Axes axis, int value) {
00081 this->axes[axis] = (value < -127) ? -127 : (value > +127) ? +127 : value;
00082 };
00083
00089 void setAxis(Axes axis, float value) {
00090 this->axes[axis] = (char) (127.0f * ((value < -1.0f) ? -1.0f : (value > +1.0f) ? +1.0f : value));
00091 };
00092
00098 float getAxis(Axes axis) {
00099 return (((float) this->axes[axis]) / 127.0f);
00100 };
00101
00106 void setButton(Buttons button, bool enable) {
00107 if (enable) this->buttons |= (1UL << button);
00108 else this->buttons &= ~(1UL << button);
00109 };
00110
00116 int getButton(Buttons button) {
00117 if ((this->buttons & (1UL << button)) != 0) return 1;
00118 return 0;
00119 };
00120
00124 std::string toString() {
00125 std::string div = "\n";
00126 std::stringstream s;
00127 s << "Pad {" << div
00128 << "J1(" << getAxis(AX_UD1) << ", " << getAxis(AX_LR1) << ")" << div
00129 << "J2(" << getAxis(AX_UD2) << ", " << getAxis(AX_LR2) << ")" << div
00130 << "ABXY(" << getButton(BT_SQUARE) << ", " << getButton(BT_DELTA) << ", " << getButton(BT_CROSS) << ", " << getButton(BT_CIRCLE) << ")" << div
00131 << "L1/R1(" << getButton(BT_L1) << ", " << getButton(BT_R1) << ")" << div
00132 << "L2/R2(" << getButton(BT_L2) << ", " << getButton(BT_R2) << ")" << div
00133 << "Sel/St(" << getButton(BT_SELECT) << ", " << getButton(BT_START) << ")" << div
00134 << "J1B/J2B(" << getButton(BT_J1B) << ", " << getButton(BT_J2B) << ")" << div
00135 << "UDLR-HUD(" << getButton(BT_HU) << ", " << getButton(BT_HD) << ", " << getButton(BT_HL) << ", " << getButton(BT_HR) << div
00136 << "}\n";
00137 return s.str();
00138 }
00139
00148 char* serialise(char *buffer) {
00149 int size = 8;
00150 memcpy(buffer, this, size);
00151 return (buffer + size);
00152 }
00153
00159 char* deserialise(char* buffer) {
00160 int size = 8;
00161 memcpy(this, buffer, size);
00162 return (buffer + size);
00163 }
00164 };
00165
00166 #endif