@@ -9,7 +9,7 @@ libcommon_a_SOURCES = \ | |||||
joystick.cpp joystick.h asset.cpp asset.h ticker.cpp ticker.h | joystick.cpp joystick.h asset.cpp asset.h ticker.cpp ticker.h | ||||
libcommon_a_CXXFLAGS = `pkg-config --cflags sdl gl SDL_image` | libcommon_a_CXXFLAGS = `pkg-config --cflags sdl gl SDL_image` | ||||
test_map_SOURCES = test-map.cpp sdlvideo.cpp sdlvideo.h | |||||
test_map_SOURCES = test-map.cpp sdlvideo.cpp sdlvideo.h sdlinput.cpp sdlinput.h | |||||
test_map_CXXFLAGS = `pkg-config --cflags sdl gl SDL_image` | test_map_CXXFLAGS = `pkg-config --cflags sdl gl SDL_image` | ||||
test_map_LDADD = libcommon.a | test_map_LDADD = libcommon.a | ||||
test_map_LDFLAGS = `pkg-config --libs sdl gl SDL_image` | test_map_LDFLAGS = `pkg-config --libs sdl gl SDL_image` | ||||
@@ -0,0 +1,77 @@ | |||||
// | |||||
// Deus Hax (working title) | |||||
// Copyright (c) 2010 Sam Hocevar <sam@hocevar.net> | |||||
// | |||||
#if defined HAVE_CONFIG_H | |||||
# include "config.h" | |||||
#endif | |||||
#include <SDL.h> | |||||
#include "sdlinput.h" | |||||
/* | |||||
* SDL Input implementation class | |||||
*/ | |||||
class SdlInputData | |||||
{ | |||||
friend class SdlInput; | |||||
private: | |||||
Game *game; | |||||
}; | |||||
/* | |||||
* Public SdlInput class | |||||
*/ | |||||
SdlInput::SdlInput(Game *game) | |||||
{ | |||||
data = new SdlInputData(); | |||||
data->game = game; | |||||
} | |||||
Asset::Group SdlInput::GetGroup() | |||||
{ | |||||
return GROUP_BEFORE; | |||||
} | |||||
void SdlInput::TickGame(float delta_time) | |||||
{ | |||||
Asset::TickGame(delta_time); | |||||
if (data->game->Finished()) | |||||
destroy = 1; | |||||
/* Handle mouse input */ | |||||
int mx, my; | |||||
SDL_GetMouseState(&mx, &my); | |||||
data->game->SetMouse(mx * (640 - 32) / 640, my * (480 - 32) / 480); | |||||
/* Handle keyboard and WM input */ | |||||
SDL_Event event; | |||||
while (SDL_PollEvent(&event)) | |||||
{ | |||||
if (event.type == SDL_QUIT) | |||||
data->game->Quit(); | |||||
if (event.type == SDL_KEYDOWN) | |||||
{ | |||||
if (event.key.keysym.sym == SDLK_ESCAPE) | |||||
data->game->Quit(); | |||||
#if 0 | |||||
else if (event.key.keysym.sym == SDLK_RETURN) | |||||
video->FullScreen(); | |||||
#endif | |||||
} | |||||
} | |||||
} | |||||
SdlInput::~SdlInput() | |||||
{ | |||||
delete data; | |||||
} | |||||
@@ -0,0 +1,34 @@ | |||||
// | |||||
// Deus Hax (working title) | |||||
// Copyright (c) 2010 Sam Hocevar <sam@hocevar.net> | |||||
// | |||||
// | |||||
// The SdlInput class | |||||
// ------------------ | |||||
// | |||||
#if !defined __DH_SDLINPUT_H__ | |||||
#define __DH_SDLINPUT_H__ | |||||
#include "asset.h" | |||||
#include "game.h" | |||||
class SdlInputData; | |||||
class SdlInput : public Asset | |||||
{ | |||||
public: | |||||
SdlInput(Game *game); | |||||
virtual ~SdlInput(); | |||||
protected: | |||||
virtual Group GetGroup(); | |||||
virtual void TickGame(float delta_time); | |||||
private: | |||||
SdlInputData *data; | |||||
}; | |||||
#endif // __DH_SDLINPUT_H__ | |||||
@@ -13,6 +13,7 @@ | |||||
#include <SDL.h> | #include <SDL.h> | ||||
#include "sdlvideo.h" | #include "sdlvideo.h" | ||||
#include "sdlinput.h" | |||||
#include "game.h" | #include "game.h" | ||||
#include "ticker.h" | #include "ticker.h" | ||||
@@ -21,34 +22,17 @@ int main(int argc, char **argv) | |||||
Video *video = new SdlVideo("Deus Hax", 640, 480); | Video *video = new SdlVideo("Deus Hax", 640, 480); | ||||
Game *game = new Game("maps/testmap.tmx"); | Game *game = new Game("maps/testmap.tmx"); | ||||
/* Register the input driver */ | |||||
new SdlInput(game); | |||||
while (!game->Finished()) | while (!game->Finished()) | ||||
{ | { | ||||
/* Test stuff */ | |||||
int mx, my; | |||||
SDL_GetMouseState(&mx, &my); | |||||
game->SetMouse(mx * (640 - 32) / 640, my * (480 - 32) / 480); | |||||
Ticker::TickGame(33.33333f); | Ticker::TickGame(33.33333f); | ||||
video->PreRender(); | video->PreRender(); | ||||
Ticker::TickRender(33.33333f); | Ticker::TickRender(33.33333f); | ||||
game->Render(); | game->Render(); | ||||
video->PostRender(33.33333f); | video->PostRender(33.33333f); | ||||
/* This could go in a separate function */ | |||||
SDL_Event event; | |||||
while (SDL_PollEvent(&event)) | |||||
{ | |||||
if (event.type == SDL_QUIT) | |||||
game->Quit(); | |||||
if (event.type == SDL_KEYDOWN) | |||||
{ | |||||
if (event.key.keysym.sym == SDLK_RETURN) | |||||
video->FullScreen(); | |||||
else if (event.key.keysym.sym == SDLK_ESCAPE) | |||||
game->Quit(); | |||||
} | |||||
} | |||||
} | } | ||||
delete game; | delete game; | ||||