Refactor input polling
This commit is contained in:
49
src/game.c
49
src/game.c
@@ -1,6 +1,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include "SDL2/SDL.h"
|
||||
#include "SDL2/SDL_timer.h"
|
||||
#include "GL/glew.h"
|
||||
#include "SDL2/SDL_opengl.h"
|
||||
#include "game.h"
|
||||
@@ -31,55 +32,9 @@ GameState *Game_New()
|
||||
return gs;
|
||||
}
|
||||
|
||||
static void HandleKeyDown(GameState *gs, SDL_KeyCode sym)
|
||||
{
|
||||
switch (sym)
|
||||
{
|
||||
case SDLK_ESCAPE:
|
||||
gs->running = false;
|
||||
break;
|
||||
case SDLK_BACKQUOTE:
|
||||
SDL_bool currentMode = SDL_GetRelativeMouseMode();
|
||||
SDL_SetRelativeMouseMode(currentMode == SDL_FALSE ? SDL_TRUE : SDL_FALSE);
|
||||
break;
|
||||
case SDLK_F11:
|
||||
{
|
||||
Uint32 windowFlags = SDL_GetWindowFlags(gs->window);
|
||||
if ((windowFlags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) windowFlags = 0;
|
||||
else windowFlags = SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||
SDL_SetWindowFullscreen(gs->window, windowFlags);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void HandleKeyUp(GameState *gs, SDL_KeyCode sym)
|
||||
{
|
||||
}
|
||||
|
||||
void Game_Update(GameState *gs)
|
||||
{
|
||||
SDL_Event sdlEvent;
|
||||
|
||||
while (SDL_PollEvent(&sdlEvent))
|
||||
{
|
||||
switch (sdlEvent.type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
printf("Event: SDL_QUIT\n");
|
||||
gs->running = false;
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
if (sdlEvent.key.repeat == 0)
|
||||
{
|
||||
HandleKeyDown(gs, sdlEvent.key.keysym.sym);
|
||||
}
|
||||
break;
|
||||
case SDL_KEYUP:
|
||||
HandleKeyUp(gs, sdlEvent.key.keysym.sym);
|
||||
break;
|
||||
}
|
||||
}
|
||||
SDL_Delay(100);
|
||||
}
|
||||
|
||||
void Game_Destroy(GameState *gs)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef struct
|
||||
|
||||
54
src/input.c
Normal file
54
src/input.c
Normal file
@@ -0,0 +1,54 @@
|
||||
#include "SDL2/SDL.h"
|
||||
#include "input.h"
|
||||
#include "game.h"
|
||||
|
||||
static void HandleKeyDown(GameState *gs, SDL_KeyCode sym)
|
||||
{
|
||||
switch (sym)
|
||||
{
|
||||
case SDLK_ESCAPE:
|
||||
gs->running = false;
|
||||
break;
|
||||
case SDLK_BACKQUOTE:
|
||||
SDL_bool currentMode = SDL_GetRelativeMouseMode();
|
||||
SDL_SetRelativeMouseMode(currentMode == SDL_FALSE ? SDL_TRUE : SDL_FALSE);
|
||||
break;
|
||||
case SDLK_F11:
|
||||
{
|
||||
Uint32 windowFlags = SDL_GetWindowFlags(gs->window);
|
||||
if ((windowFlags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) windowFlags = 0;
|
||||
else windowFlags = SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||
SDL_SetWindowFullscreen(gs->window, windowFlags);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void HandleKeyUp(GameState *gs, SDL_KeyCode sym)
|
||||
{
|
||||
}
|
||||
|
||||
void Input_Poll(GameState *gs)
|
||||
{
|
||||
SDL_Event sdlEvent;
|
||||
|
||||
while (SDL_PollEvent(&sdlEvent))
|
||||
{
|
||||
switch (sdlEvent.type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
printf("Event: SDL_QUIT\n");
|
||||
gs->running = false;
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
if (sdlEvent.key.repeat == 0)
|
||||
{
|
||||
HandleKeyDown(gs, sdlEvent.key.keysym.sym);
|
||||
}
|
||||
break;
|
||||
case SDL_KEYUP:
|
||||
HandleKeyUp(gs, sdlEvent.key.keysym.sym);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
5
src/input.h
Normal file
5
src/input.h
Normal file
@@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include "game.h"
|
||||
|
||||
void Input_Poll(GameState *gs);
|
||||
@@ -1,7 +1,7 @@
|
||||
#include <stdio.h>
|
||||
#include "SDL2/SDL.h"
|
||||
#include "SDL2/SDL_timer.h"
|
||||
#include "game.h"
|
||||
#include "input.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
@@ -16,8 +16,8 @@ int main(int argc, char* argv[])
|
||||
|
||||
while (gs->running)
|
||||
{
|
||||
Input_Poll(gs);
|
||||
Game_Update(gs);
|
||||
SDL_Delay(100);
|
||||
}
|
||||
|
||||
printf("Shutting down...\n");
|
||||
|
||||
Reference in New Issue
Block a user