#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); #ifdef DEBUG SDL_SetLogPriorities(SDL_LOG_PRIORITY_DEBUG); #endif SDL_LogInfo(SDL_LOG_CATEGORY_SYSTEM, "JAPI v%s\n", JAPI_VERSION); game::windowHasFocus = true; game::init(); input::init(); 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) { switch (e.key.scancode) { case SDL_SCANCODE_F1: draw::setZoom(draw::getZoom()-1); break; case SDL_SCANCODE_F2: draw::setZoom(draw::getZoom()+1); break; case SDL_SCANCODE_F3: draw::setFullscreen(!draw::getFullscreen()); break; case SDL_SCANCODE_F4: draw::toggleShader(); break; default: 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; }