#include "jgame.h" #include "jdraw.h" #include "jinput.h" #include #include #include #ifdef MACOS_BUNDLE #include #endif namespace game { bool windowHasFocus = true; static bool (*loop)() = nullptr; static unsigned int ticks_per_frame = 1000/60; static std::map config; void setUpdateTicks(const int ticks) { ticks_per_frame = ticks; } void setState(bool (*loop)()) { game::loop = loop; } void setConfig(const char* key, const int value) { config[key] = value; } const int getConfig(const char* key) { return config[key]; } const uint32_t getTicks() { return SDL_GetTicks(); } } int main(int argc, char *argv[]) { #ifdef MACOS_BUNDLE char res_file[255] = ""; strcpy(res_file, dirname(argv[0])); strcat(res_file, "/../Resources/data.jf2"); file_setresourcefilename(res_file); #endif SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); game::windowHasFocus = true; game::init(); input::init(draw::getZoom()); static unsigned int current_ticks = SDL_GetTicks(); bool should_exit=false; SDL_Event e; while (!should_exit) { while(SDL_PollEvent(&e)) { if (e.type==SDL_EVENT_QUIT) { should_exit = true; break; } if (e.type==SDL_EVENT_KEY_DOWN) { input::updateKey(e.key.scancode); } if (e.type==SDL_EVENT_KEY_UP) { input::updateKeypressed(e.key.scancode); } if (e.type==SDL_EVENT_MOUSE_BUTTON_UP) { input::updateClk(e.button.button); } if (e.type==SDL_EVENT_MOUSE_WHEEL) { input::updateWheel(e.wheel.y); } if ( e.type == SDL_EVENT_WINDOW_FOCUS_GAINED ) { game::windowHasFocus = true; } if ( e.type == SDL_EVENT_WINDOW_FOCUS_LOST ) { game::windowHasFocus = false; } } if (SDL_GetTicks()-current_ticks >= game::ticks_per_frame) { if (game::loop) if (!game::loop()) should_exit = true; input::updateKey(SDL_SCANCODE_UNKNOWN); input::updateKeypressed(SDL_SCANCODE_UNKNOWN); input::updateClk(0); input::updateWheel(0); current_ticks = SDL_GetTicks(); } } return 0; }