Skip to content

Commit

Permalink
Linux: Fix input event loop.
Browse files Browse the repository at this point in the history
  • Loading branch information
xevz committed May 12, 2012
1 parent ce03fd2 commit 2981466
Showing 1 changed file with 56 additions and 50 deletions.
106 changes: 56 additions & 50 deletions engine/linux/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,15 @@ int quit = 0;

static void SetupMouse(void)
{
if (engine.sceneId == 0)
if (engine.sceneId == 0 || MENU_Get() == MENU_GAMEOVER)
{
SDL_WM_GrabInput(SDL_GRAB_OFF);
SDL_ShowCursor(SDL_ENABLE);
}
else
{
/*
SDL_WM_GrabInput(SDL_GRAB_ON);
SDL_ShowCursor(SDL_DISABLE);
*/
}
}

Expand All @@ -38,70 +36,78 @@ static void ReadInput(void)
SDL_Event sdlevent;
io_event_s event;

SDL_PollEvent(&sdlevent);

switch (sdlevent.type)
while (SDL_PollEvent(&sdlevent))
{
case SDL_KEYDOWN:

switch (sdlevent.key.keysym.sym) {
case SDLK_ESCAPE:
if (engine.requiredSceneId != 0 && engine.sceneId != 0)
{
MENU_Set(MENU_HOME);
engine.requiredSceneId = 0;
}
break;
}
break;

case SDL_MOUSEBUTTONDOWN:
event.type = IO_EVENT_BEGAN;
event.position[X] = sdlevent.button.x;
event.position[Y] = sdlevent.button.y;
break;

case SDL_MOUSEBUTTONUP:
event.type = IO_EVENT_ENDED;
event.position[X] = sdlevent.button.x;
event.position[Y] = sdlevent.button.y;
break;

case SDL_MOUSEMOTION:
event.type = IO_EVENT_MOVED;
event.position[X] = sdlevent.motion.x;
event.position[Y] = sdlevent.motion.y;
event.previousPosition[X] = sdlevent.motion.x - sdlevent.motion.xrel;
event.previousPosition[Y] = sdlevent.motion.y - sdlevent.motion.yrel;
break;

case SDL_QUIT:
quit = 1;
break;
switch (sdlevent.type)
{
case SDL_KEYDOWN:

switch (sdlevent.key.keysym.sym)
{
case SDLK_ESCAPE:
if (engine.requiredSceneId != 0 && engine.sceneId != 0)
{
MENU_Set(MENU_HOME);
engine.requiredSceneId = 0;
}
break;
}
break;

case SDL_MOUSEBUTTONDOWN:
event.type = IO_EVENT_BEGAN;
event.position[X] = sdlevent.button.x;
event.position[Y] = sdlevent.button.y;
break;

case SDL_MOUSEBUTTONUP:
event.type = IO_EVENT_ENDED;
event.position[X] = sdlevent.button.x;
event.position[Y] = sdlevent.button.y;
break;

case SDL_MOUSEMOTION:
event.type = IO_EVENT_MOVED;
event.position[X] = sdlevent.motion.x;
event.position[Y] = sdlevent.motion.y;
event.previousPosition[X] = sdlevent.motion.x - sdlevent.motion.xrel;
event.previousPosition[Y] = sdlevent.motion.y - sdlevent.motion.yrel;
break;

case SDL_QUIT:
quit = 1;
break;
default:
break;
}

IO_PushEvent(&event);
}

IO_PushEvent(&event);
}

int main(int argc, char *argv[]) {
int main(int argc, char *argv[])
{
int old_time;
int new_time;
int time_for_frame;
int sleep_time;
SDL_Surface *screen;
uchar engineParameters = 0;

engineParameters |= GL_11_RENDERER ;

setenv("RD","../..", 1);
setenv("WD","../..", 1);

SDL_Init(SDL_INIT_EVERYTHING);

SDL_WM_SetCaption("Shmup", NULL);

SDL_WM_GrabInput(SDL_GRAB_OFF);
SDL_ShowCursor(SDL_ENABLE);

screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, SDL_OPENGL | SDL_DOUBLEBUF);
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, SDL_OPENGL);

engineParameters |= GL_11_RENDERER ;

renderer.statsEnabled = 0;
renderer.materialQuality = MATERIAL_QUALITY_HIGH;
Expand All @@ -111,7 +117,7 @@ int main(int argc, char *argv[]) {

dEngine_Init();
renderer.statsEnabled = 0;
//renderer.props |= PROP_FOG;
renderer.props |= PROP_FOG;
engine.licenseType = LICENSE_FULL;

IO_Init();
Expand All @@ -120,7 +126,8 @@ int main(int argc, char *argv[]) {

old_time = SDL_GetTicks();

while (!quit) {
while (!quit)
{
SetupMouse();

ReadInput();
Expand All @@ -135,7 +142,6 @@ int main(int argc, char *argv[]) {

if (sleep_time > 0)
SDL_Delay(sleep_time);

}

SDL_Quit();
Expand Down

0 comments on commit 2981466

Please sign in to comment.