I'm having trouble with key management. Movement works fine but the shooting does stuff that I don't want to happen.
Every time I press the arrow keys to shoot it works fine but when I press a key to move the shooting stops and then continues shooting in the direction that I'm pressing.
void Player::HandleEvents() {
SDL_Event event;
const Uint8* keyboard_state_array = SDL_GetKeyboardState(NULL);
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
//Shooting
if ((keyboard_state_array[SDL_SCANCODE_UP])) {
shootDirectionY = -1;
}
else if ((keyboard_state_array[SDL_SCANCODE_DOWN])) {
shootDirectionY = 1;
}
else if ((keyboard_state_array[SDL_SCANCODE_LEFT])) {
shootDirectionX = -1;
}
else if ((keyboard_state_array[SDL_SCANCODE_RIGHT])) {
shootDirectionX = 1;
}
//Movement
//Horizontal and Vertical
if (keyboard_state_array[SDL_SCANCODE_W]) {
speedSenseX = 0;
speedSenseY = -1;
}
else if (keyboard_state_array[SDL_SCANCODE_S]) {
speedSenseX = 0;
speedSenseY = 1;
}
else if (keyboard_state_array[SDL_SCANCODE_A]) {
speedSenseX = -1;
speedSenseY = 0;
}
else if (keyboard_state_array[SDL_SCANCODE_D]) {
speedSenseX = 1;
speedSenseY = 0;
}
//Diagonals and AD WS cases
if (keyboard_state_array[SDL_SCANCODE_W] && keyboard_state_array[SDL_SCANCODE_D]) {
speedSenseX = 1;
speedSenseY = -1;
}
else if (keyboard_state_array[SDL_SCANCODE_W] && keyboard_state_array[SDL_SCANCODE_A]) {
speedSenseX = -1;
speedSenseY = -1;
}
else if (keyboard_state_array[SDL_SCANCODE_S] && keyboard_state_array[SDL_SCANCODE_D]) {
speedSenseX = 1;
speedSenseY = 1;
}
else if (keyboard_state_array[SDL_SCANCODE_S] && keyboard_state_array[SDL_SCANCODE_A]) {
speedSenseX = -1;
speedSenseY = 1;
}
if (keyboard_state_array[SDL_SCANCODE_S] && keyboard_state_array[SDL_SCANCODE_W]) {
speedSenseX = 0;
speedSenseY = 0;
}
else if (keyboard_state_array[SDL_SCANCODE_A] && keyboard_state_array[SDL_SCANCODE_D]) {
speedSenseX = 0;
speedSenseY = 0;
}
break;
case SDL_KEYUP:
//Handeling speeds
if (!keyboard_state_array[SDL_SCANCODE_W] && speedSenseY < 0) {
speedSenseY = 0;
}
if (!keyboard_state_array[SDL_SCANCODE_S] && speedSenseY > 0) {
speedSenseY = 0;
}
if (!keyboard_state_array[SDL_SCANCODE_A] && speedSenseX < 0) {
speedSenseX = 0;
}
if (!keyboard_state_array[SDL_SCANCODE_D] && speedSenseX > 0) {
speedSenseX = 0;
}
if (!keyboard_state_array[SDL_SCANCODE_W] && keyboard_state_array[SDL_SCANCODE_S]) {
speedSenseY = 1;
}
if (keyboard_state_array[SDL_SCANCODE_W] && !keyboard_state_array[SDL_SCANCODE_S]) {
speedSenseY = -1;
}
if (!keyboard_state_array[SDL_SCANCODE_A] && keyboard_state_array[SDL_SCANCODE_D]) {
speedSenseX = 1;
}
if (keyboard_state_array[SDL_SCANCODE_A] && !keyboard_state_array[SDL_SCANCODE_D]) {
speedSenseX = -1;
}
break;
}
}
}