void GW_PlatformSDL::finalize() { if (initialized_) { custom_finalize(); // set application icon plat_finish(); #ifndef GW_NO_SDL_TTF TTF_CloseFont(font_); TTF_Quit(); #endif #ifndef GW_NO_SDL_MIXER Mix_CloseAudio(); #endif SDL_Quit(); #ifdef GW_DEBUG GWDBG_OUTPUT("SDL: Finalize"); #endif initialized_=false; } }
void GW_PlatformSDL::draw_flip()//int output_width, int output_height) { #ifdef GW_DEBUG GWDBG_OUTPUT("GW_PlatformSDL::draw_flip()"); #endif SDL_RenderPresent(renderer_); }
void GW_PlatformSDL::draw_clear() { #ifdef GW_DEBUG GWDBG_OUTPUT("GW_PlatformSDL::draw_clear()"); #endif SDL_SetRenderDrawColor(renderer_, 0, 0, 0, 255); SDL_RenderClear(renderer_); }
void GW_GameEngine_VTech::Event(GW_Platform_Event *event) { if (event->id==GPE_KEYDOWN) { switch (event->data) { case GPK_GAMEA: #ifdef GW_DEBUG GWDBG_OUTPUT("GW_GameEngine_VTech::Event(GW_Platform_Event :: GPK_GAMEA)"); #endif if (GetMode()==MODE_OFF) TurnOn(); else if (GetMode()==MODE_IDLE) SetMode(MODE_TIME1); else SetMode(MODE_GAMEA); break; case GPK_GAMEB: #ifdef GW_DEBUG GWDBG_OUTPUT("GW_GameEngine_VTech::Event(GW_Platform_Event :: GPK_GAMEB)"); #endif if (GetMode()==MODE_IDLE) SetMode(MODE_TIME1); else SetMode(MODE_GAMEB); break; case GPK_TIME: #ifdef GW_DEBUG GWDBG_OUTPUT("GW_GameEngine_VTech::Event(GW_Platform_Event :: GPK_TIME)"); #endif if (GetMode()==MODE_TIME1) SetMode(MODE_TIME2); else if (GetMode()==MODE_TIME2) SetMode(MODE_ALARM); else if (GetMode()==MODE_ALARM) SetMode(MODE_CHRONO); else if (GetMode()==MODE_CHRONO) SetMode(MODE_DATE); else if (GetMode()==MODE_DATE||gameover_) SetMode(MODE_TIME1); break; } } }
bool GW_PlatformSDL::event(GW_Platform_GameType gametype, GW_Platform_Event *event) { #ifdef GW_DEBUG GWDBG_OUTPUT("GW_PlatformSDL::event(GW_Platform_GameType gametype, GW_Platform_Event *event)"); #endif SDL_Event sdlevent; while (true) { if (SDL_PollEvent(&sdlevent)) { if (process_event(gametype, &sdlevent, event)) return true; } else return false; } return false; }
bool GW_PlatformSDL::process_event(GW_Platform_GameType gametype, SDL_Event *sdlevent, GW_Platform_Event *event) { #ifdef GW_DEBUG GWDBG_LOG("gamewatch-event", "GW_PlatformSDL::process_event().type :: %u", sdlevent->type); #endif switch (sdlevent->type) { // QUIT case SDL_QUIT: event->id=GPE_QUIT; break; // Keypress case SDL_KEYDOWN: { event->id=GPE_KEYDOWN; #ifdef GW_DEBUG GWDBG_FOUTPUT("KEY: %d\n", sdlevent->key.keysym.sym); #endif switch (sdlevent->key.keysym.sym) { case SDLK_LEFT: event->data=GPK_LEFT; break; case SDLK_RIGHT: event->data=GPK_RIGHT; break; case SDLK_UP: event->data=GPK_UP; break; case SDLK_DOWN: event->data=GPK_DOWN; break; case SDLK_q: event->data=GPK_UPLEFT; break; case SDLK_a: event->data=GPK_DOWNLEFT; break; case SDLK_p: event->data=GPK_UPRIGHT; break; case SDLK_l: event->data=GPK_DOWNRIGHT; break; case SDLK_RETURN: event->data=GPK_TURNON; break; case SDLK_BACKSPACE: event->data=GPK_TURNOFF; break; case SDLK_ESCAPE: event->data=GPK_QUIT; break; case SDLK_1: event->data=GPK_GAMEA; break; case SDLK_2: event->data=GPK_GAMEB; break; case SDLK_3: event->data=GPK_TIME; break; case SDLK_PLUS: event->data=GPK_VOLUP; break; case SDLK_MINUS: event->data=GPK_VOLDOWN; break; case SDLK_7: event->data=GPK_ZOOM_NORMAL; break; case SDLK_8: event->data=GPK_ZOOM_DEVICE; break; case SDLK_9: event->data=GPK_ZOOM_GAME; break; default: return false; } } break; default: #ifdef GW_DEBUG GWDBG_OUTPUT("return false"); #endif return false; } #ifdef GW_DEBUG GWDBG_OUTPUT("return true"); #endif return true; }
void GW_PlatformSDL::initialize() { if (!initialized_) { GWDBG_OUTPUT("SDL: Initialize"); // initialize SDL video if ( SDL_Init( sdlinit(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER) ) < 0 ) throw GW_Exception(string("Unable to init SDL: "+string(SDL_GetError()))); #ifndef GW_NO_SDL_MIXER if ( Mix_OpenAudio(22050, AUDIO_S16SYS, 1, audiobufsize_get()) < 0) throw GW_Exception(string("Unable to init SDL_mixer: "+string(Mix_GetError()))); #endif #ifndef GW_NO_SDL_TTF if ( TTF_Init() < 0 ) throw GW_Exception(string("Unable to init SDL_ttf: "+string(TTF_GetError()))); #endif #ifndef GW_NO_SDL_MIXER Mix_AllocateChannels(6); sound_volume(75); #endif custom_initialize(); // make sure SDL cleans up before exit atexit(SDL_Quit); // set application icon plat_init(); // create a new window window_ = SDL_CreateWindow("Game & Watch simulator - by Hitnrun / ZsoltK & Madrigal", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width_, height_, fullscreen_ ? SDL_WINDOW_FULLSCREEN_DESKTOP : SDL_WINDOW_SHOWN); if ( !window_ ) throw GW_Exception(string("Unable to allocate game window: " + string(SDL_GetError()))); renderer_ = SDL_CreateRenderer(window_, -1, SDL_RENDERER_ACCELERATED); if ( !renderer_ ) throw GW_Exception(string("Unable to allocate renderer: " + string(SDL_GetError()))); // Let SDL & GPU do the scaling SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); SDL_RenderSetLogicalSize(renderer_, width_, height_); SDL_ShowCursor(SDL_DISABLE); #ifndef GW_NO_SDL_TTF // load font //font_=TTF_OpenFont( bf::path( bf::path(platformdata_get() ) / "andalemo.ttf" ).string().c_str(), fontsize_get() ); string pfont(platformdata_get() + "/" + "andalemo.ttf" ); font_=TTF_OpenFont( pfont.c_str(), fontsize_get() ); if (!font_) throw GW_Exception(string("Unable to load font: "+string(TTF_GetError()))); #endif initialized_=true; } }
int main(int argc, char** argv) #endif /* #else int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) #endif */ { string datapath; AnyOption *opt = new AnyOption(); opt->addUsage( "" ); opt->addUsage( "Usage: " ); opt->addUsage( "" ); opt->addUsage( " -h --help Prints this help " ); opt->addUsage( " -d --data-path /dir Data files path " ); opt->addUsage( "" ); opt->setFlag( "help", 'h' ); opt->setOption( "data-path", 'd' ); opt->processCommandArgs( argc, argv ); if( opt->getFlag( "help" ) || opt->getFlag( 'h' ) ) { GWDBG_OUTPUT("Usage") opt->printUsage(); delete opt; return 0; } if( opt->getValue( 'd' ) != NULL || opt->getValue( "data-size" ) != NULL ) datapath = opt->getValue('d'); delete opt; try { #ifdef GP2X GW_PlatformGP2X platform; #elif defined(GW_PLAT_PANDORA) GW_PlatformPandora platform; #elif defined(GW_PLAT_S60) GW_PlatformS60 platform; #elif defined(GW_PLAT_WIZ) GW_PlatformWIZ platform; #elif defined(GW_PLAT_ANDROID) GW_PlatformAndroid platform; #elif defined(GW_PLAT_IOS) GW_PlatformIOS platform; #else GW_PlatformSDL platform(640, 480); #endif if (!datapath.empty()) platform.datapath_set(datapath); platform.initialize(); GW_GameList gamelist(&platform); GW_Menu menu(&platform, &gamelist); menu.Run(); platform.finalize(); } catch (GW_Exception &e) { GWDBG_OUTPUT(e.what().c_str()) fprintf(stderr, "%s\n", e.what().c_str()); return 1; } return 0; }