Original Post
Hello all, In my programming, I have a nested switch statement that I want to simplify or get rid of. Now I didn't know whether to post this in this forum or in the "Alternative Game Libraries" forum (because the code is SDL), so I apologize if I messed up. The problem is that this code takes much too long to go through, for understandable reasons. What I'm trying to do is figure out how to streamline it or increase the performance while still accomplishing the same tasks. Here's the code:
void event_loop()
{
SDL_Event event;
while(!done && SDL_WaitEvent(&event))
{
switch (event.type)
{
case SDL_MOUSEBUTTONDOWN:
{
switch (event.button.button)
{
case SDL_BUTTON_LEFT:
{
int x_loc = event.button.x;
int y_loc = event.button.y;
fileout << "(" << x_loc << "," << y_loc << ")" << endl << flush;
break;
}
default:
{
break;
}
}
break;
}
case SDL_USEREVENT:
{
switch (event.user.code)
{
case RUN_GAME_LOOP:
{
if (!stop)
{
tile_down();
translate();
}
break;
}
default:
{
break;
}
}
break;
}
case SDL_QUIT:
{
done = true;
break;
}
case SDL_KEYDOWN:
{
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
{
done = true;
break;
}
case SDLK_DOWN:
{
if (!stop)
{
tile_down();
translate();
}
break;
}
case SDLK_UP:
{
if (!stop)
{
tile_rotate();
translate();
}
break;
}
case SDLK_LEFT:
{
if (!stop)
{
tile_left();
translate();
}
break;
}
case SDLK_RIGHT:
{
if (!stop)
{
tile_right();
translate();
}
break;
}
case SDLK_RETURN:
{
if (!stop)
{
while (collision_check())
{
tile_down();
}
translate();
}
break;
}
case SDLK_SPACE:
{
stop = !stop;
if(stop)
{
SDL_bool success;
success = SDL_RemoveTimer(timer);
if(!success)
{
exit(201);
}
}
if(!stop)
{
timer = SDL_AddTimer(timer_speed, game_timer, 0);
if(!timer)
{
exit(202);
}
}
break;
}
default: break;
}
}
default: break;
}
}
}