00001
00014 #if !defined(PAD_INC)
00015 #define PAD_INC
00016
00017 #include <string>
00018 #include <sstream>
00019
00020
00026 class cPad {
00027 private:
00028 char axes[4];
00029 unsigned short buttons;
00030 unsigned short buttons_;
00031 void* playerdata;
00032 public:
00033
00039 enum Axes {
00040 AX_LR1, AX_UD1, AX_UD2, AX_LR2
00041 };
00042
00052 enum Buttons {
00053 BT_SQUARE, BT_DELTA, BT_CROSS, BT_CIRCLE,
00054 BT_L1, BT_L2, BT_R1, BT_R2,
00055 BT_SELECT, BT_START,
00056 BT_J1B, BT_J2B,
00057 BT_HU, BT_HD, BT_HL, BT_HR
00058 };
00059
00063 cPad() {
00064 buttons = 0;
00065 reset();
00066 }
00067
00075 void reset() {
00076 axes[0] = axes[1] = axes[2] = axes[3] = 0;
00077 buttons_ = buttons;
00078 buttons = 0;
00079 };
00080
00085 void setAxis(Axes axis, int value) {
00086 this->axes[axis] = (value < -127) ? -127 : (value > +127) ? +127 : value;
00087 };
00088
00094 void setAxis(Axes axis, float value) {
00095 this->axes[axis] = (char) (127.0f * ((value < -1.0f) ? -1.0f : (value > +1.0f) ? +1.0f : value));
00096 };
00097
00103 float getAxis(Axes axis) {
00104 return (((float) this->axes[axis]) / 127.0f);
00105 };
00106
00111 void setButton(Buttons button, bool enable) {
00112 if (enable) this->buttons |= (1UL << button);
00113 else this->buttons &= ~(1UL << button);
00114 };
00115
00121 int getButton(Buttons button) {
00122 if ((this->buttons & (1UL << button)) != 0) return 1;
00123 return 0;
00124 };
00125
00131 int getButtonEvent(Buttons button) {
00132 if ((this->buttons & (1UL << button)) != (this->buttons_ & (1UL << button))) return 1;
00133 return 0;
00134 };
00135
00139 std::string toString() {
00140 std::string div = "\n";
00141 std::stringstream s;
00142 s << "Pad {" << div
00143 << "J1(" << getAxis(AX_UD1) << ", " << getAxis(AX_LR1) << ")" << div
00144 << "J2(" << getAxis(AX_UD2) << ", " << getAxis(AX_LR2) << ")" << div
00145 << "ABXY(" << getButton(BT_SQUARE) << ", " << getButton(BT_DELTA) << ", " << getButton(BT_CROSS) << ", " << getButton(BT_CIRCLE) << ")" << div
00146 << "L1/R1(" << getButton(BT_L1) << ", " << getButton(BT_R1) << ")" << div
00147 << "L2/R2(" << getButton(BT_L2) << ", " << getButton(BT_R2) << ")" << div
00148 << "Sel/St(" << getButton(BT_SELECT) << ", " << getButton(BT_START) << ")" << div
00149 << "J1B/J2B(" << getButton(BT_J1B) << ", " << getButton(BT_J2B) << ")" << div
00150 << "UDLR-HUD(" << getButton(BT_HU) << ", " << getButton(BT_HD) << ", " << getButton(BT_HL) << ", " << getButton(BT_HR) << div
00151 << "}\n";
00152 return s.str();
00153 }
00154
00163 char* serialise(char *buffer) {
00164 int size = 8;
00165 memcpy(buffer, this, size);
00166 return (buffer + size);
00167 }
00168
00174 char* deserialise(char* buffer) {
00175 int size = 8;
00176 memcpy(this, buffer, size);
00177 return (buffer + size);
00178 }
00179 };
00180
00181 #endif