Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of el17ajf by
Input/Input.cpp
- Committer:
- el17ajf
- Date:
- 2019-03-19
- Revision:
- 15:afeefa3ceb61
- Parent:
- 13:59e17cab320a
- Child:
- 16:3f84f2d7b910
File content as of revision 15:afeefa3ceb61:
#include "Input.h"
#include "Gamepad.h"
#include "mbed.h" // TODO DELETE
namespace Input {
enum State {RELEASED, RELEASED_FRAME, HIT_FRAME, HELD};
Gamepad * gamepad;
const int NUMBER_OF_BUTTONS = 4;
State states[4]; // NUM_OF_BS
int frame_hit[4] = {-99}; // NUM_OF_BS
int frame = 0;
const int bounce_frames = 3;
void updateButtonState(Button button, Gamepad::GamepadEvent event);
bool canBounce(Button button);
void init() {
gamepad = new Gamepad();
gamepad->init();
for (int i = 0; i < NUMBER_OF_BUTTONS; i++) {
states[i] = RELEASED;
}
}
void deinit() {
delete gamepad;
}
void update() {
frame++;
// update based on existing states
for (int i = 0; i < NUMBER_OF_BUTTONS; i++) {
if (states[i] == RELEASED_FRAME) {
states[i] = RELEASED;
}
if (states[i] == HIT_FRAME) {
states[i] = RELEASED_FRAME;
}
}
// update state to reflect events
updateButtonState(LEFT, Gamepad::A_PRESSED);
updateButtonState(RIGHT, Gamepad::Y_PRESSED);
updateButtonState(UP, Gamepad::X_PRESSED);
updateButtonState(DOWN, Gamepad::B_PRESSED);
}
bool buttonHit(Button button) {
return states[button] == HIT_FRAME;
}
bool buttonHeld(Button button) {
return states[button] == HIT_FRAME
|| states[button] == HELD;
}
void updateButtonState(Button button, Gamepad::GamepadEvent event) {
if (gamepad->check_event(event)) {
if (canBounce(button)) {
states[button] = HIT_FRAME;
frame_hit[button] = frame;
} else {
states[button] = HELD;
}
}
}
bool canBounce(Button button) {
if (frame > frame_hit[button] + bounce_frames) {
return true;
} else {
return false;
}
}
}
