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