Exemplo n.º 1
0
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;
    }
}
Exemplo n.º 2
0
void GW_PlatformSDL::draw_flip()//int output_width, int output_height)
{
#ifdef GW_DEBUG
    GWDBG_OUTPUT("GW_PlatformSDL::draw_flip()");
#endif
    SDL_RenderPresent(renderer_);
}
Exemplo n.º 3
0
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_);
}
Exemplo n.º 4
0
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;
        }
    }
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
    }
}
Exemplo n.º 8
0
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;
}