Thank you so much for the advice so far, you have really helped me out!
I’ve been able to get something basic working so far. Everything seems to work properly. Now I need to figure out how to implement deadzones and detection of fast stick movement in an elegant way. If you have any advice on that I would be open to hearing it. What I mean by fast stick movement is: in Super Smash Bros. games, if you smash the analog stick really fast in a direction, you’ll run instead of walk.
I also had to do something extremely annoying in my controller input Lua module to get it working the way I wanted. I used an index for the player number so I don’t have to make duplicate lists for every player number. The only problem is Lua seems to make me have to go through and initialize each level of the structure individually or else it would throw errors. I suppose it isn’t all that bad, it just seems strange like I am doing something wrong, even though it worked.
Here is what I had to do:
[CODE]local max_players = 4
for player_number = 1, max_players do
game_inputs[player_number] = {}
game_inputs[player_number].a = {}
game_inputs[player_number].b = {}
game_inputs[player_number].x = {}
game_inputs[player_number].y = {}
game_inputs[player_number].r = {}
game_inputs[player_number].l = {}
game_inputs[player_number].r_analog = {}
game_inputs[player_number].l_analog = {}
game_inputs[player_number].start = {}
game_inputs[player_number].back = {}
game_inputs[player_number].dpad_left = {}
game_inputs[player_number].dpad_down = {}
game_inputs[player_number].dpad_right = {}
game_inputs[player_number].dpad_up = {}
game_inputs[player_number].lstick_click = {}
game_inputs[player_number].lstick_left = {}
game_inputs[player_number].lstick_down = {}
game_inputs[player_number].lstick_right = {}
game_inputs[player_number].lstick_up = {}
game_inputs[player_number].rstick_click = {}
game_inputs[player_number].rstick_left = {}
game_inputs[player_number].rstick_down = {}
game_inputs[player_number].rstick_right = {}
game_inputs[player_number].rstick_up = {}
game_inputs[player_number].a.pressed = false
game_inputs[player_number].a.released = false
game_inputs[player_number].a.value = 0
game_inputs[player_number].b.pressed = false
game_inputs[player_number].b.released = false
game_inputs[player_number].b.value = 0
game_inputs[player_number].x.pressed = false
game_inputs[player_number].x.released = false
game_inputs[player_number].x.value = 0
game_inputs[player_number].y.pressed = false
game_inputs[player_number].y.released = false
game_inputs[player_number].y.value = 0
game_inputs[player_number].r.pressed = false
game_inputs[player_number].r.released = false
game_inputs[player_number].r.value = 0
game_inputs[player_number].l.pressed = false
game_inputs[player_number].l.released = false
game_inputs[player_number].l.value = 0
game_inputs[player_number].r_analog.pressed = false
game_inputs[player_number].r_analog.released = false
game_inputs[player_number].r_analog.value = 0.0
game_inputs[player_number].l_analog.pressed = false
game_inputs[player_number].l_analog.released = false
game_inputs[player_number].l_analog.value = 0.0
game_inputs[player_number].start.pressed = false
game_inputs[player_number].start.released = false
game_inputs[player_number].start.value = 0
game_inputs[player_number].back.pressed = false
game_inputs[player_number].back.released = false
game_inputs[player_number].back.value = 0
game_inputs[player_number].dpad_left.pressed = false
game_inputs[player_number].dpad_left.released = false
game_inputs[player_number].dpad_left.value = 0.
game_inputs[player_number].dpad_down.pressed = false
game_inputs[player_number].dpad_down.released = false
game_inputs[player_number].dpad_down.value = 0.
game_inputs[player_number].dpad_right.pressed = false
game_inputs[player_number].dpad_right.released = false
game_inputs[player_number].dpad_right.value = 0.
game_inputs[player_number].dpad_up.pressed = false
game_inputs[player_number].dpad_up.released = false
game_inputs[player_number].dpad_up.value = 0.
game_inputs[player_number].lstick_click.pressed = false
game_inputs[player_number].lstick_click.released = false
game_inputs[player_number].lstick_click.value = 0
game_inputs[player_number].lstick_left.pressed = false
game_inputs[player_number].lstick_left.released = false
game_inputs[player_number].lstick_left.value = 0.0
game_inputs[player_number].lstick_down.pressed = false
game_inputs[player_number].lstick_down.released = false
game_inputs[player_number].lstick_down.value = 0.0
game_inputs[player_number].lstick_right.pressed = false
game_inputs[player_number].lstick_right.released = false
game_inputs[player_number].lstick_right.value = 0.0
game_inputs[player_number].lstick_up.pressed = false
game_inputs[player_number].lstick_up.released = false
game_inputs[player_number].lstick_up.value = 0.0
game_inputs[player_number].rstick_click.pressed = false
game_inputs[player_number].rstick_click.released = false
game_inputs[player_number].rstick_click.value = 0
game_inputs[player_number].rstick_left.pressed = false
game_inputs[player_number].rstick_left.released = false
game_inputs[player_number].rstick_left.value = 0.0
game_inputs[player_number].rstick_down.pressed = false
game_inputs[player_number].rstick_down.released = false
game_inputs[player_number].rstick_down.value = 0.0
game_inputs[player_number].rstick_right.pressed = false
game_inputs[player_number].rstick_right.released = false
game_inputs[player_number].rstick_right.value = 0.0
game_inputs[player_number].rstick_up.pressed = false
game_inputs[player_number].rstick_up.released = false
game_inputs[player_number].rstick_up.value = 0.0
end[/CODE]