Skip to content
Snippets Groups Projects
Commit 8f2ee2b5 authored by Veda Heard's avatar Veda Heard :desktop:
Browse files

Add support for detecting button pressed, might have an issue with...

Add support for detecting button pressed, might have an issue with double-detecting button state changes
parent 6a773e7e
No related branches found
No related tags found
No related merge requests found
local lwiiuse = require "lwiiuse"
local wiimotes = lwiiuse.init(1):find(5):connect()
print(getmetatable(wiimotes).__name)
local wiimote = lwiiuse.getWiimote(wiimotes, 1)
print(getmetatable(wiimotes).__name, getmetatable(wiimote).__name)
wiimote:setLeds("23")
print(getmetatable(wiimotes).__name, getmetatable(wiimote).__name)
repeat
print(getmetatable(wiimotes).__name, getmetatable(wiimote).__name)
lwiiuse.update(wiimotes)
until wiimote:isButtonHeld("abudlr-+12h")
until wiimote:isButtonDown("abudlr-+12h")
wiimote:setRumble(true)
wiimote:setLeds("14")
repeat
wiimotes:update()
until wiimote:isButtonHeld("abudlr-+12h")
until wiimote:isButtonUp("abudlr-+12h")
wiimote:setRumble(false)
wiimote:setLeds("")
......@@ -111,53 +111,61 @@ static int lwiiuse_set_rumble(lua_State * L) {
return 1;
}
#define UPDATE_BUTTON(button1, button2) wm->held.button1 = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_##button2); \
wm->down.button1 = IS_JUST_PRESSED(wm->wm, WIIMOTE_BUTTON_##button2); \
wm->up.button1 = IS_RELEASED(wm->wm, WIIMOTE_BUTTON_##button2); \
static int lwiiuse_update(lua_State * L) {
lWiimotes * wiimotes = checkWiimotes(L, 1);
wiiuse_poll(wiimotes->wiimotes, wiimotes->maxWiimotes);
for (int i = 0; i < wiimotes->maxWiimotes; i++) {
lWiimote * wm = wiimotes->lwiimotes[i];
wm->held.a = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_A);
// printf("Pressed: %d\n", wm->held.a);
wm->held.b = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_B);
wm->held.up = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_UP);
wm->held.down = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_DOWN);
wm->held.left = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_LEFT);
wm->held.right = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_RIGHT);
wm->held.minus = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_MINUS);
wm->held.plus = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_PLUS);
wm->held.one = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_ONE);
wm->held.two = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_TWO);
wm->held.home = IS_PRESSED(wm->wm, WIIMOTE_BUTTON_HOME);
UPDATE_BUTTON(a, A);
UPDATE_BUTTON(b, B);
UPDATE_BUTTON(up, UP);
UPDATE_BUTTON(down, DOWN);
UPDATE_BUTTON(left, LEFT);
UPDATE_BUTTON(right, RIGHT);
UPDATE_BUTTON(minus, MINUS);
UPDATE_BUTTON(plus, PLUS);
UPDATE_BUTTON(one, ONE);
UPDATE_BUTTON(two, TWO);
UPDATE_BUTTON(home, HOME);
}
return 1;
}
static int lwiiuse_isButtonHeld(lua_State * L) {
size_t len;
lWiimote * wm = checkWiimote(L, 1);
const char * inputs = luaL_tolstring(L, 2, &len);
lua_pop(L, 1);
bool pressed = false;
for (size_t i = 0; i < len; i++) {
switch(inputs[i] > 64 && inputs[i] < 91 ? inputs[i]+32 : inputs[i]) {
case 'a': pressed = pressed | wm->held.a; break;
case 'b': pressed = pressed | wm->held.b; break;
case 'u': pressed = pressed | wm->held.up; break;
case 'd': pressed = pressed | wm->held.down; break;
case 'l': pressed = pressed | wm->held.left; break;
case 'r': pressed = pressed | wm->held.right; break;
case '-': pressed = pressed | wm->held.minus; break;
case '+': pressed = pressed | wm->held.plus; break;
case '1': pressed = pressed | wm->held.one; break;
case '2': pressed = pressed | wm->held.two; break;
case 'h': pressed = pressed | wm->held.home; break;
}
}
lua_pushboolean(L, pressed);
return 1;
#define DECLAIR_BUTTON_FUNCTION(funcName, structName) \
static int lwiiuse_isButton##funcName(lua_State * L) { \
size_t len; \
lWiimote * wm = checkWiimote(L, 1); \
const char * inputs = luaL_tolstring(L, 2, &len); \
lua_pop(L, 1); \
bool pressed = false; \
for (size_t i = 0; i < len; i++) { \
switch(inputs[i] > 64 && inputs[i] < 91 ? inputs[i]+32 : inputs[i]) { \
case 'a': pressed = pressed | wm->structName.a; break; \
case 'b': pressed = pressed | wm->structName.b; break; \
case 'u': pressed = pressed | wm->structName.up; break; \
case 'd': pressed = pressed | wm->structName.down; break; \
case 'l': pressed = pressed | wm->structName.left; break; \
case 'r': pressed = pressed | wm->structName.right; break; \
case '-': pressed = pressed | wm->structName.minus; break; \
case '+': pressed = pressed | wm->structName.plus; break; \
case '1': pressed = pressed | wm->structName.one; break; \
case '2': pressed = pressed | wm->structName.two; break; \
case 'h': pressed = pressed | wm->structName.home; break; \
} \
} \
lua_pushboolean(L, pressed); \
return 1; \
}
DECLAIR_BUTTON_FUNCTION(Held, held)
DECLAIR_BUTTON_FUNCTION(Down, down)
DECLAIR_BUTTON_FUNCTION(Up, up)
static const struct luaL_Reg lwiiuse_list[] = {
{"init", lwiiuse_init},
{"find", lwiiuse_find},
......@@ -167,8 +175,8 @@ static const struct luaL_Reg lwiiuse_list[] = {
{"setRumble", lwiiuse_set_rumble},
{"update", lwiiuse_update},
{"isButtonHeld", lwiiuse_isButtonHeld},
// {"isButtonDown", lwiiuse_isButtonDown},
// {"isButtonUp", lwiiuse_isButtonUp},
{"isButtonDown", lwiiuse_isButtonDown},
{"isButtonUp", lwiiuse_isButtonUp},
{NULL, NULL}
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment