Last active
November 5, 2020 09:54
-
-
Save kimsama/25415fd4cf055235493cef80d550d84f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct packet | |
{ | |
char name[16]; | |
unsigned short id; | |
char state_01; // 0: safety / 1: fire / 2: reload :==> safety / reload는 무시. | |
char state_02; // reserved. | |
unsigned short buttonState; // buttons | |
float thumb_x; // joystick x-axis | |
float thumb_y; // joystick y-axis | |
}; | |
#define WEAPON_FIRE 0x0001 // weapon trigger | |
#define BUTTON_IK 0x0001 // lock button | |
const int ButtonCount = 14; | |
const unsinged short controller::buttonInputID[buttonCount] = | |
{ | |
Button_A, // 0x0001 | |
Button_B, // 0x0002 | |
Button_C, // 0x0004 | |
Button_D, // 0x0008 | |
Button_E, // 0x0010 | |
Button_F, // 0x0020 | |
Button_G, // 0x0040 | |
Button_H, // 0x0080 | |
Button_I, // 0x0100 | |
Button_J, // 0x0200 | |
Button_K, // 0x1000 | |
Button_L, // 0x2000 | |
Button_M, // 0x4000 | |
Button_N // 0x8000 | |
}; | |
void controller::update(float deltaTime) | |
{ | |
... | |
// received packet from the gun controller. | |
struct packet recv_data; | |
unsigned int size = sizeof(packet); | |
memcpy(&recv_data, data, size); | |
switch (recv_data.state_01) | |
{ | |
case '0': // turn on the power button | |
_powerOn = true; | |
_enableIK = (XCONTROLLER_BUTTON_IK & recv_data.buttonState) ? true : false; | |
break; | |
case '1': // fire action | |
_weaponFire = (XCONTROLLER_WEAPON_FIRE & recv_data.buttonState) ? true : false; | |
break; | |
case '2': // lock button | |
_enableIK = (XCONTROLLER_BUTTON_IK & recv_data.buttonState) ? true : false; | |
break; | |
case '3': // button | |
{ | |
unsigned short buttonStates = recv_data.buttonStaste; | |
for (int i=0; i<buttonCount; ++i) | |
{ | |
// !!check whether the button is pressed or not!! | |
bool pressed = (butonStates & buttonInputID[i]) != 0; | |
setButtonPressed(i, pressed); | |
} | |
// thumbstick | |
_thumbstick_posx = recv_data.thumb_x; | |
_thumbstick_posy = recv_data.thumb_y; | |
} | |
break; | |
} | |
} | |
void controller::setButtonPressed( ButtonID buttonID, bool pressed ) | |
{ | |
if ( buttonID >= ButtonCount ) | |
return; | |
if ( !hasButton(buttonID) ) | |
return; | |
if ( _iButtonPressed[buttonID] == pressed ) | |
return; | |
_isButtonPressed[buttonID] = pressed; | |
// Notify | |
for ( Listeners::iterator itr=mListeners.begin(); itr!=mListeners.end(); ++itr ) | |
(*itr)->onComponentChanged( this, ComponentType_Button, buttonID ); | |
} | |
bool controller::isButtonPressed(ButtonID buttonID) | |
{ | |
return _isButtonPressed[buttonID]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.