예제 #1
1
파일: main.c 프로젝트: pikhq/cmako
static void init_sdl()
{
	SDL_putenv("SDL_NOMOUSE=1");
	SDL_putenv("SDL_VIDEO_CENTERED=1");

	SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_NOPARACHUTE);
	atexit(SDL_Quit);
	signal(SIGINT, SIG_DFL);
	SDL_EnableUNICODE(1);
	SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);

	SDL_AudioSpec desired = {.freq = 8000, .format = AUDIO_U8, .channels = 1, .callback = snd_callback, .samples=128};
	if(SDL_OpenAudio(&desired, NULL)) {
		fprintf(stderr, "%s\n", SDL_GetError());
		sound_playing = -1;
	}

	SDL_initFramerate(&fps);
	SDL_setFramerate(&fps, 60);

	inited_sdl = 1;
}

static void button_change(int up, SDLKey keysym)
{
	const uint32_t key_map[SDLK_LAST] = {
		[SDLK_LEFT] = KEY_LF,
		[SDLK_RIGHT] = KEY_RT,
		[SDLK_UP] = KEY_UP,
		[SDLK_DOWN] = KEY_DN,
		[SDLK_RETURN] = KEY_A,
		[SDLK_SPACE] = KEY_A,
		[SDLK_z] = KEY_A,
		[SDLK_x] = KEY_B,
		[SDLK_LSHIFT] = KEY_B,
		[SDLK_RSHIFT] = KEY_A
	};

	/* Don't invoke undefined behavior if they've added keysyms
	 * since this was compiled.
	 */
	if(keysym > SDLK_LAST)
		return;
	
	if(!key_map[keysym])
		return;

	if(up) {
		buttons &= ~key_map[keysym];
	} else {
		buttons |= key_map[keysym];
	}
}
예제 #2
0
void initSDL()
{
	SDL_DisplayMode video_info;
	int init_flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK;

	if(SDL_Init(init_flags) < 0)
	{
		printf("SDL Failed to Init!!!! (%s)\n", SDL_GetError());
		borExit(0);
	}
	SDL_ShowCursor(SDL_DISABLE);
	atexit(SDL_Quit);

#ifdef LOADGL
	if(SDL_GL_LoadLibrary(NULL) < 0)
	{
		printf("Warning: couldn't load OpenGL library (%s)\n", SDL_GetError());
	}
#endif

	SDL_GetCurrentDisplayMode(0, &video_info);
	nativeWidth = video_info.w;
	nativeHeight = video_info.h;
	printf("debug:nativeWidth, nativeHeight, bpp, Hz  %d, %d, %d, %d\n", nativeWidth, nativeHeight, SDL_BITSPERPIXEL(video_info.format), video_info.refresh_rate);

	SDL_initFramerate(&framerate_manager);
	SDL_setFramerate(&framerate_manager, 200);
}
예제 #3
0
파일: simulation.c 프로젝트: Vinc41/cublife
void initSimulation (Simulation* sim)
{
    //initialisation de la simulation
    sim->sdlInitialisee = false;
    sim->simulationLancee = false;
    sim->map.largeur_map = NB_CASE_LARGEUR_DEFAUT;
    sim->map.hauteur_map = NB_CASE_HAUTEUR_DEFAUT;
    sim->genererNouvelleMap=1;
    sim->genererPosEspeces=1;
    sim->map.mapInitialisee=0;
    sim->nomSimulation=(char*)malloc(TAILLE_MAX*sizeof(char));
    strcpy(sim->nomSimulation,"nouvelle simulation");

    //initialisation de la generation aleatoire
    srand(time(NULL));

    //initialisation de SDL_framerate qui gere le fps
    SDL_Init(SDL_INIT_TIMER         // pour SDL_framerate
            |SDL_INIT_NOPARACHUTE); // pour mieux débugger, à enlever si besoin
    SDL_initFramerate(&(sim->fps));
    SDL_setFramerate((&sim->fps), 30);

    //évite le problème d'affichage de la première ligne // @fixme: aucun printf ne marche sur windows, les g_print non plus (à vérifier)
    printf("\n");
}
예제 #4
0
void Draw(SDL_Surface *screen)
{
 int i,rate,x,y,dx,dy,r,g,b;
 FPSmanager fpsm;
 
 /* Initialize variables */
 srand(time(NULL));
 i=0;
 x=screen->w/2;
 y=screen->h/2;
 dx=7;
 dy=5;
 r=g=b=255;
  
 SDL_initFramerate(&fpsm);

 while (1) {
  
  /* Set/switch framerate */
  i -= 1;
  if (i<0) {
   /* Set new rate */
   rate=5+5*(rand() % 10);
   SDL_setFramerate(&fpsm,rate);
   printf ("\nFramerate set to %i Hz ...\n\n",rate);
   /* New timeout */
   i=2*rate;
   /* New Color */
   r=rand() & 255;
   g=rand() & 255;
   b=rand() & 255;
  }

  HandleEvent();
  
  /* Black screen */
  ClearScreen(screen);

  /* Move */
  x += dx;
  y += dy;
  
  /* Reflect */
  if ((x<0) || (x>screen->w)) { dx=-dx; }
  if ((y<0) || (y>screen->h)) { dy=-dy; }

  /* Draw */
  filledCircleRGBA (screen,x,y,30,r,g,b,255);
  circleRGBA(screen,x,y,30,255,255,255,255);
    
  /* Display by flipping screens */
  SDL_UpdateRect(screen,0,0,0,0);

  /* Delay to fix rate */                   
  SDL_framerateDelay(&fpsm);  
 }
}
예제 #5
0
파일: main.c 프로젝트: Cpasjuste/pgui
int main(int argc, char *argv[])
{

	int gui_done = 0;
	scroll_count = 800;
	selected_menu = ROMS;
	alpha_up = 1;
	alpha = 0;
	mouse_y_pos = 120;
	selected_option_item = 0;

	if(!cfg_read("config.txt"))
	{
		printf("Fail => cfg_read()\n");
		exit(0);
	}

	if(!gui_init_sdl())
	{
		printf("Fail => gui_init_sdl()\n");
		exit(0);
	}

	emu_config_init();
	
	gui_load();

	strncpy(now_path, config->roms_path, MAXPATH);
	filer_read_dir(now_path);

	SDL_initFramerate( &sixteen );
	SDL_setFramerate( &sixteen, 65 );

	while(!gui_done)
	{
		handle_mouse();

		while( SDL_PollEvent( &event ) )
		{	
			switch(event.type)
			{
				case SDL_QUIT:
				{
					gui_clean();
					free(emu);
					exit(0);
				}
				break;
			}
		}
		gui_draw();
		SDL_Flip(myscreen);
		SDL_framerateDelay( &sixteen );
	}
	return 0;
}
void FPSWrapper::initialize(FPSmanager& fpsManager_){
	SDL_initFramerate(&fpsManager_);

	const int framerateIsSet = SDL_setFramerate(&fpsManager_, Configuration::getMaxFramerate());
	if(framerateIsSet == 0){
		Logger::log("Successfully started the framerate manager.");
	}
	else{
		Logger::warning("Failed to start the framerate manager.");
	}
}
int initViewer(char* resolution, void(*drawingProcedure)(SDL_Surface*,int,int,void*), char isFullscreen) {

    const SDL_VideoInfo *info;
    Uint8  video_bpp;
    Uint32 videoflags;

    /* Initialize SDL */
    if(SDL_Init(SDL_INIT_VIDEO) < 0) {
        fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
        return -1;
    }

    atexit(SDL_Quit);

    putenv("SDL_VIDEO_WINDOW_POS=center");

    /* Alpha blending doesn't work well at 8-bit color */
    info = SDL_GetVideoInfo();

    if(info->vfmt->BitsPerPixel > 8)
        video_bpp = info->vfmt->BitsPerPixel;
    else
        video_bpp = 16;

    videoflags = SDL_HWSURFACE | SDL_SRCALPHA | SDL_RESIZABLE | SDL_DOUBLEBUF;

    if(isFullscreen)
        videoflags |= SDL_FULLSCREEN;

    /* Set 640x480 video mode */
    screenWidth = atoi(strtok(resolution, "x"));
    screenHeight = atoi(strtok(NULL, "x"));
    if((screen=SDL_SetVideoMode(screenWidth,screenHeight,video_bpp,videoflags)) == NULL) {
        fprintf(stderr, "Couldn't set %ix%i video mode: %s\n",screenWidth, screenHeight,SDL_GetError());
        return -1;
    }

    /* Use alpha blending */
    SDL_SetAlpha(screen, SDL_SRCALPHA, 0);

    /* Set title for window */
    SDL_WM_SetCaption("Double Cart Pole Viewer","Double Cart Pole Viewer");

    SDL_initFramerate(&fpsm);

    SDL_setFramerate(&fpsm, 1.0 / timeStep);

    algorithm_drawingProcedure = drawingProcedure;

    return 0;

}
예제 #8
0
int main(int argc, char* argv[])
{
    FPSmanager framerate_manager;

    (void)argc;
    (void)argv;

    if (SDL_Init(SDL_INIT_EVERYTHING) < 0) return 1;

    SDL_initFramerate(&framerate_manager);
    SDL_setFramerate(&framerate_manager, 60);
    SDL_framerateDelay(&framerate_manager);

    SDL_Quit();
    return 0;
}
예제 #9
0
/*!
\brief Delay execution to maintain a constant framerate and calculate fps.

Generate a delay to accomodate currently set framerate. Call once in the
graphics/rendering loop. If the computer cannot keep up with the rate (i.e.
drawing too slow), the delay is zero and the delay interpolation is reset.

\param manager Pointer to the framerate manager.

\return The time that passed since the last call to the function in ms. May return 0.
*/
Uint32 SDL_framerateDelay(FPSmanager * manager)
{
	Uint32 current_ticks;
	Uint32 target_ticks;
	Uint32 the_delay;
	Uint32 time_passed = 0;

	/*
	* No manager, no delay
	*/
	if (manager == NULL) {
		return 0;
	}

	/*
	* Initialize uninitialized manager 
	*/
	if (manager->baseticks == 0) {
		SDL_initFramerate(manager);
	}

	/*
	* Next frame 
	*/
	manager->framecount++;

	/*
	* Get/calc ticks 
	*/
	current_ticks = _getTicks();
	time_passed = current_ticks - manager->lastticks;
	manager->lastticks = current_ticks;
	target_ticks = manager->baseticks + (Uint32) ((float) manager->framecount * manager->rateticks);

	if (current_ticks <= target_ticks) {
		the_delay = target_ticks - current_ticks;
		SDL_Delay(the_delay);
	} else {
		manager->framecount = 0;
		manager->baseticks = _getTicks();
	}

	return time_passed;
}
예제 #10
0
Display::Display(){

	if (SDL_Init(SDL_INIT_VIDEO) == -1)
	{
	cout << "Erreur d'initialisation de SDL_Init\n";
    	exit(EXIT_FAILURE);
	}

	if(TTF_Init() == -1)
	{
	cout << "Erreur d'initialisation de TTF_Init : \n"<< TTF_GetError();
    	exit(EXIT_FAILURE);
	}
	SDL_initFramerate(&manager);
		//t0 = SDL_LoadBMP("watter.bmp");
		//t1 = SDL_LoadBMP("sand.bmp");
		//t2 = SDL_LoadBMP("mountain.bmp");
		//t3 = SDL_LoadBMP("grass.bmp");
}
예제 #11
0
/*!
\brief Delay execution to maintain a constant framerate and calculate fps.

Generate a delay to accomodate currently set framerate. Call once in the
graphics/rendering loop. If the computer cannot keep up with the rate (i.e.
drawing too slow), the delay is zero and the delay interpolation is reset.

\param manager Pointer to the framerate manager.
*/
void SDL_framerateDelay(FPSmanager * manager)
{
    Uint32 current_ticks;
    Uint32 target_ticks;
    Uint32 the_delay;

    /*
    * No manager, no delay
    */
    if (manager == NULL)
        return;

    /*
    * Initialize uninitialized manager
    */
    if (manager->lastticks == 0)
        SDL_initFramerate(manager);

    /*
    * Next frame
    */
    manager->framecount++;

    /*
    * Get/calc ticks
    */
    current_ticks = SDL_GetTicks();
    target_ticks = manager->lastticks + (Uint32) ((float) manager->framecount * manager->rateticks);

    if (current_ticks <= target_ticks)
    {
        the_delay = target_ticks - current_ticks;
        SDL_Delay(the_delay);
    }
    else
    {
        manager->framecount = 0;
        manager->lastticks = SDL_GetTicks();
    }
}
예제 #12
0
int sdl_init( void ) {
	int mode = SDL_SWSURFACE|SDL_OPENGL;
	const struct config *config = config_get();
	
	if( SDL_Init(SDL_INIT_EVERYTHING) < 0 ) {
		fprintf(stderr, "Error: Unable to initialise SDL: %s\n", SDL_GetError());
		return 1;
	}
	SDL_ShowCursor(SDL_DISABLE);
	memcpy( &saved_video, SDL_GetVideoInfo(), sizeof(SDL_VideoInfo) );
	SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
	if( config->iface.full_screen )
		mode |= SDL_FULLSCREEN;
	screen = SDL_SetVideoMode( config->iface.screen_width, config->iface.screen_height, SDL_SCREEN_BPP, mode );
	if( screen == NULL ) {
		fprintf(stderr, "Error: Unable to set video mode: %s\n", SDL_GetError());
		return 1;
	}
	SDL_initFramerate( &manager );
	
	frame_rate = config->iface.frame_rate;
	if( frame_rate < 0 ) {
		frame_rate = 0;
		fprintf( stderr, "Warning: Negative frame rate, setting to 0 (unlimited)\n" );
	}
	if( frame_rate > MAX_FRAME_RATE ) {
		frame_rate = MAX_FRAME_RATE;
		fprintf( stderr, "Warning: Frame rate above maximum allowed (%d) setting to maximum\n", MAX_FRAME_RATE );
	}
	if( frame_rate ) {
		SDL_setFramerate( &manager, frame_rate );
	}
	SDL_WM_SetCaption( title, NULL );
	
	return 0;
}
예제 #13
0
파일: media.c 프로젝트: yin-nadie/wodox
/*----------------------------------------------------------------------------
 * Initialize
 *----------------------------------------------------------------------------*/
int
media_init(void)
{
    if (SDL_Init(SDL_INIT_VIDEO)) {
        fprintf(stderr, "%s\n", SDL_GetError());
        exit(0);
    }

    // Initialize window and load all graphics. Exit on failure (we need all 
    // graphics to play).

    if ((media.canvas = SDL_SetVideoMode(800, 600, 16, SDL_DOUBLEBUF)) == NULL) {
        fprintf(stderr, "%s\n", SDL_GetError());
        exit(0);
    }

    media.surface_title = load_texture("title.png");
    media.surface_frame = load_texture("frame.png");
    media.surface_objects = load_texture("objects.png");
    media.surface_effects = load_texture("effects.png");
    media.surface_manual = load_texture("manual.png");
    media.surface_properties = load_texture("properties.png");
    media.surface_circle = load_texture("circle.png");

    if ((media.surface_background =
         SDL_CreateRGBSurface(SDL_SWSURFACE, media.canvas->w, media.canvas->h + 4,
                              media.canvas->format->BitsPerPixel,
                              media.canvas->format->Rmask, media.canvas->format->Gmask,
                              media.canvas->format->Bmask,
                              media.canvas->format->Amask)) == NULL) {
        fprintf(stderr, "%s\n", SDL_GetError());
        exit(0);
    }

    SDL_Surface *tmp;
    SDL_Rect dst;

    tmp = load_texture("background.png");

    for (dst.x = 0; dst.x < media.surface_background->w; dst.x += tmp->w)
        for (dst.y = 0; dst.y < media.surface_background->h; dst.y += tmp->h) {
            SDL_BlitSurface(tmp, NULL, media.surface_background, &dst);
        }

    SDL_FreeSurface(tmp);

    // Initialize and load true type fonts. Exit on failure.

    if (TTF_Init()) {
        fprintf(stderr, "%s\n", TTF_GetError());
        exit(0);
    }

    media.font_small = load_font("underwood_champion.ttf", 16);
    media.font_normal = load_font("underwood_champion.ttf", 18);
    media.font_large = load_font("underwood_champion.ttf", 30);
    media.font_input = load_font("underwood_champion.ttf", 26);
    media.font_equation = load_font("underwood_champion.ttf", 20);
    media.font_button = load_font("j_d_handcrafted.ttf", 22);

    media.surface_hforhelp =
        TTF_RenderUTF8_Blended(media.font_normal, lang.hforhelp, color_white);

    // Initialize audio if wanted and load all samples. Disable audio on failure
    // (audio is not indispensable)

    if (media.enable_audio) {
        if (SDL_InitSubSystem(SDL_INIT_AUDIO)) {
            fprintf(stderr, "%s\n", SDL_GetError());
            media.enable_audio = 0;
        } else if (Mix_OpenAudio(22050, AUDIO_S16SYS, 2, 1024)) {
            fprintf(stderr, "%s\n", Mix_GetError());
            media.enable_audio = 0;
        } else {
            media.chunk_press = load_sample("press.wav");
            media.chunk_release = load_sample("release.wav");
            media.chunk_open = load_sample("open.wav");
            media.chunk_fail = load_sample("fail.wav");
            media.chunk_wodox = load_sample("wodox.wav");
            media.chunk_keystroke = load_sample("typewriter.wav");
            media.chunk_marker = load_sample("marker01.wav");
        }
    }
    // Give the window a name.

    SDL_WM_SetCaption("Wodox", "wodox");

    // Initialize frame rate control.

    SDL_initFramerate(&media.fpsmanager);
    SDL_setFramerate(&media.fpsmanager, 30);

    // Most of the time keyrepeat is set to true.

    SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,
                        SDL_DEFAULT_REPEAT_INTERVAL);

    return 0;
}
예제 #14
0
void Draw(SDL_Surface *screen)
{
	int i,rate,x,y,dx,dy;
	int psize = NUM_POINTS; 
	double sin_start = 0;
	double sin_amp = 100;
	Sint16 polygon_x[NUM_POINTS], polygon_y[NUM_POINTS];
	Sint16 polygon_alpha_x[4], polygon_alpha_y[4];
	SDL_Surface *texture;
	SDL_Surface *texture_alpha;
	FPSmanager fpsm;
	int width_half = screen->w/2;
	int height_half = screen->h/2;

	/* Load texture surfaces */
	texture = SDL_LoadBMP("texture.bmp");
	texture_alpha = SDL_LoadBMP("texture_alpha.bmp");
	SDL_SetAlpha(texture_alpha, SDL_SRCALPHA, 128);

	/* Initialize variables */
	srand((int)time(NULL));
	i=0;
	x=width_half;
	y=height_half;
	dx=7;
	dy=5;

	/* Initialize Framerate manager */  
	SDL_initFramerate(&fpsm);

	/* Polygon for blended texture */
	polygon_alpha_x[0]= 0;
	polygon_alpha_y[0]= 0;
	polygon_alpha_x[1]= width_half;
	polygon_alpha_y[1]= 0;
	polygon_alpha_x[2]= screen->w*2 / 3;
	polygon_alpha_y[2]= screen->h;
	polygon_alpha_x[3]= 0;
	polygon_alpha_y[3]= screen->h;

	/* Set/switch framerate */
	rate=25;
	SDL_setFramerate(&fpsm,rate);

	/* Drawing loop */
	while (1) {

		/* Generate wave polygon */
		sin_start++;
		polygon_x[0]= 0;
		polygon_y[0]= screen->h;
		polygon_x[1]= 0;
		polygon_y[1]= height_half;    
		for (i=2; i < psize -2 ; i++){
			polygon_x[i]= (screen->w  * (i-2)) / (psize -5) ;
			polygon_y[i]= (Sint16)(sin(sin_start/100) * 200) + height_half - (Sint16)(sin((i + sin_start) / 20) * sin_amp);
		}

		polygon_x[psize-2]= screen->w;
		polygon_y[psize-2]= height_half;
		polygon_x[psize-1]= screen->w;
		polygon_y[psize-1]= screen->h;

		/* Event handler */
		HandleEvent();

		/* Black screen */
		ClearScreen(screen);

		/* Move */
		x += dx;
		y += dy;

		/* Reflect */
		if ((x<0) || (x>screen->w)) { dx=-dx; }
		if ((y<0) || (y>screen->h)) { dy=-dy; }

		/* Draw */
		texturedPolygon(screen,polygon_x,polygon_y,psize,texture, -(screen->w  * (Sint16)(sin_start-2)) / (psize - 5), -(Sint16)(sin(sin_start/100) * 200));
		texturedPolygon(screen,polygon_alpha_x,polygon_alpha_y,4,texture_alpha,(Sint16)sin_start,-(Sint16)sin_start);

		/* Display by flipping screens */
		SDL_Flip(screen);

		/* Delay to fix rate */                   
		SDL_framerateDelay(&fpsm);  
	}
}
예제 #15
0
int main(int argc, char *argv[])
{
	int i;
	SDL_Event event;
	Uint32 then, now, frames;
	FPSmanager fpsm;

	/* Initialize test framework */
	state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
	if (!state) {
		return 1;
	}

    SDL_Log("SDL2_gfx %i.%i.%i: testframerate", SDL2_GFXPRIMITIVES_MAJOR, SDL2_GFXPRIMITIVES_MINOR, SDL2_GFXPRIMITIVES_MICRO);
    SDL_Log("Platform: %s", SDL_GetPlatform());

	for (i = 1; i < argc;) {
		int consumed;

		consumed = SDLTest_CommonArg(state, i);
		if (consumed == 0) {
                   consumed = -1;
                   if (SDL_strcasecmp(argv[i], "--x") == 0) {
                      if (argv[i + 1]) {
						  x = SDL_atoi(argv[i + 1]);
                         if (x < 0) x = 0;
                         if (x >= WIDTH) x = WIDTH - 1;
                         consumed = 2;
                      }
				   }
                   else if (SDL_strcasecmp(argv[i], "--y") == 0) {
                      if (argv[i + 1]) {
                         y = SDL_atoi(argv[i + 1]);
                         if (y < 0) y = 0;
                         if (y >= HEIGHT) y = HEIGHT - 1;
                         consumed = 2;
                      }
                   }
                }
                
		if (consumed < 0) {
			SDL_Log("Usage: %s %s [--x #] [--y #]\n",
				argv[0], SDLTest_CommonUsage(state));
			return 1;
		}
		i += consumed;
	}
	if (!SDLTest_CommonInit(state)) {
		return 2;
	}

	/* Create the windows and initialize the renderers */
	for (i = 0; i < state->num_windows; ++i) {
		SDL_Renderer *renderer = state->renderers[i];
                SDL_RendererInfo info;
                SDL_GetRendererInfo(state->renderers[i], &info);		                
                SDL_Log("Renderer %i: %s %s", i, info.name, (info.flags | SDL_RENDERER_ACCELERATED) ? "(Accelerated)" : "");		
		SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
		SDL_RenderClear(renderer);
	}

	/* Initialize random number generator */
	srand((unsigned int)time(NULL));

	/* Create common message buffer */
	messageText = (char *)SDL_malloc(1024);
	if (messageText == NULL) {
		return -1;
	}

	/* Initialize framerate manager */
	SDL_initFramerate(&fpsm);

	/* Main render loop */
	frames = 0;
	then = SDL_GetTicks();
	done = 0;
	while (!done) {
		/* Check for events */
		++frames;
		while (SDL_PollEvent(&event) && !done) {
			SDLTest_CommonEvent(state, &event, &done);
		}

        /* Do all the drawing work */
		Draw(state->renderers[0], &fpsm);
	}

	/* Print out some timing information */
	now = SDL_GetTicks();
	if (now > then) {
		double fps = ((double) frames * 1000) / (now - then);
		SDL_Log("%2.2f frames per second\n", fps);
	}

	/* Free common message buffer */
	if (messageText) {
		free(messageText);
	}

	/* Shutdown SDL */
	SDLTest_CommonQuit(state);

	return 0;
}
예제 #16
0
void CShooterGame::Initialize()
{
    // Must call base class initializations first
    CGame::Initialize();

    #ifdef DEBUG
    cout << "CShooterGame::Initialize() called" << endl;
    #endif

    auto& renderer = CSingleton<CRenderer>::Instance();

    SDL_WM_SetCaption("Space Attackers!", "Space Attackers!");

    auto screen = renderer->GetScreen();
    m_iScreenW = screen->w;
    m_iScreenH = screen->h;

    // Create global mutex using Factory pattern
    {
        // Prepare Mutex singleton for access from multiple threads at the same time
        MutexFactory::Instance()->Initialize( RESOURCE::MUTEX_MAINAPP );
    }

    // Prepare rand() for multithreaded execution
    {
        CSingleton<CRandom>::Instance()->nextNumber();
    }

    // Load window icon using Factory pattern
    {
        ImageColorkeyFactory::Instance()->Get( RESOURCE::WINDOW_ICON )->Load( "Assets/Icon/icon.bmp" );
        ImageColorkeyFactory::Instance()->Get( RESOURCE::WINDOW_ICON )->SetColorKeyRGB( 0, 255, 255 );
        SDL_WM_SetIcon( ImageColorkeyFactory::Instance()->Get( RESOURCE::WINDOW_ICON )->GetSurface(), 0 );
    }

    // Load sprites using Factory pattern
    {
        ImageAlphaFactory::Instance()->Get( RESOURCE::PLAYER_PLANE )->Load( "Assets/Sprites/player_plane.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::PLAYER_PLANE_HIT )->Load( "Assets/Sprites/player_plane_hit.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::PLAYER_PLANE_SHADOW )->Load( "Assets/Sprites/player_plane_shadow_0.5x.png" );
        AnimationFactory::Instance()->Get( RESOURCE::PLAYER_PLANE )->LoadAnimation( "Assets/Sprites/player_plane.anim" );
        AnimationFactory::Instance()->Get( RESOURCE::PLAYER_PLANE_SHADOW )->LoadAnimation( "Assets/Sprites/player_plane_shadow_0.5x.anim" );

        ImageAlphaFactory::Instance()->Get( RESOURCE::PLAYER_PROJECTILE )->Load( "Assets/Sprites/plasma_up_yellow.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::PLAYER_PROJECTILE_GUIDED )->Load( "Assets/Sprites/plasma_ball_blue.png" );

        ImageAlphaFactory::Instance()->Get( RESOURCE::ENEMY_PROJECTILE_SLOW )->Load( "Assets/Sprites/plasma_ball_green.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::ENEMY_PROJECTILE_FAST )->Load( "Assets/Sprites/plasma_ball_red.png" );

        ImageAlphaFactory::Instance()->Get( RESOURCE::ENEMY_PLANE_GREEN )->Load( "Assets/Sprites/plane_green_down.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::ENEMY_PLANE_RED )->Load( "Assets/Sprites/plane_red_down.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::ENEMY_PLANE_GREEN_HIT )->Load( "Assets/Sprites/plane_green_down_hit.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::ENEMY_PLANE_RED_HIT )->Load( "Assets/Sprites/plane_red_down_hit.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::ENEMY_PLANE_SHADOW )->Load( "Assets/Sprites/plane_down_shadow_0.5x.png" );

        ImageAlphaFactory::Instance()->Get( RESOURCE::EXPLOSION )->Load( "Assets/Sprites/explosion.png" );
        AnimationFactory::Instance()->Get( RESOURCE::EXPLOSION )->LoadAnimation( "Assets/Sprites/explosion.anim" );
    }

    // Create interpolation sets for intro screen and level start message
    {
        auto& introOverTime = InterpolationSetFactory::Instance()->Get( RESOURCE::IS_INTRO_SHOW );
        introOverTime->AddValue( 0.0f, 0 );
        introOverTime->AddValue( 0.5f, 255, Math::Interpolation::easeOutCirc<float,float> );
        introOverTime->AddValue( 3.5f, 255 );
        introOverTime->AddValue( 5.0f, 0, Math::Interpolation::easeInCirc<float,float> );

        auto& levelStartOverTime = InterpolationSetFactory::Instance()->Get( RESOURCE::IS_LEVEL_START );
        levelStartOverTime->AddValue( 0.0f, m_iScreenH );
        levelStartOverTime->AddValue( 1.5f, m_iScreenH/2 - 32, Math::Interpolation::easeOutCirc<float,float> );
        levelStartOverTime->AddValue( 3.5f, m_iScreenH/2 - 32 );
        levelStartOverTime->AddValue( 5.0f, -64, Math::Interpolation::easeInCirc<float,float> );

    }

    // Load menu sprites using Factory pattern
    {
        ImageAlphaFactory::Instance()->Get( RESOURCE::MENU_TEXT )->Load( "Assets/Menu/texts.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::MENU_TEXT_SELECTED )->Load( "Assets/Menu/texts_selected.png" );
        AnimationFactory::Instance()->Get( RESOURCE::MENU_TEXT )->LoadAnimation( "Assets/Menu/texts.anim" );
    }

    // load backgrounds using Factory pattern
    {
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_INTRO )->Load( "Assets/Backgrounds/intro_screen.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_TITLE )->Load( "Assets/Backgrounds/title_screen.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_DEATH )->Load( "Assets/Backgrounds/death.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_HELP1 )->Load( "Assets/Backgrounds/help1.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_HELP2 )->Load( "Assets/Backgrounds/help2.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_MOONSURFACE )->Load( "Assets/Backgrounds/moon.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_CLOUDS1 )->Load( "Assets/Backgrounds/clouds1_tr50.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_CLOUDS2 )->Load( "Assets/Backgrounds/clouds2_tr50.png" );
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_MOONSURFACE )->SetAlpha(255);
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_CLOUDS1 )->SetAlpha(0);
        ImageAlphaFactory::Instance()->Get( RESOURCE::BACKGROUND_CLOUDS2 )->SetAlpha(0);
        // Create layers and set the bitmaps
        ScrollingBackgroundFactory::Instance()->Get( RESOURCE::SCROLLING_MOONSURFACE )->Initialize(1);
        ScrollingBackgroundFactory::Instance()->Get( RESOURCE::SCROLLING_CLOUDS )->Initialize(2);

        auto& moonSurfaceLayer = ScrollingBackgroundFactory::Instance()->Get( RESOURCE::SCROLLING_MOONSURFACE );
        moonSurfaceLayer->SetLayer( 0, RESOURCE::BACKGROUND_MOONSURFACE );
        moonSurfaceLayer->SetLayerSpeed( 0, 8, 8 );    // 1:15 movement speed
        moonSurfaceLayer->SetSpeed( 0, -250 );

        auto& cloudsLayers = ScrollingBackgroundFactory::Instance()->Get( RESOURCE::SCROLLING_CLOUDS );
        cloudsLayers->SetLayer( 0, RESOURCE::BACKGROUND_CLOUDS1 );
        cloudsLayers->SetLayer( 1, RESOURCE::BACKGROUND_CLOUDS2 );
        cloudsLayers->SetLayerSpeed( 0, 4, 4 );     // 1:7 movement speed
        cloudsLayers->SetLayerSpeed( 1, 1, 1 );     // 1:1 movement speed
        cloudsLayers->SetSpeed( 0, -250 );
    }

    // Load fonts using Factory pattern
    {
        FontFactory::Instance()->Get( RESOURCE::FONT_INFO )->Load( "Assets/Fonts/failed.ttf", 24 );
        FontFactory::Instance()->Get( RESOURCE::FONT_SCORE )->Load( "Assets/Fonts/digital-7_mono.ttf", 32 );
        FontFactory::Instance()->Get( RESOURCE::FONT_SMALL )->Load( "Assets/Fonts/ProFontWindows.ttf", 9 );
        FontFactory::Instance()->Get( RESOURCE::FONT_MENU )->Load( "Assets/Fonts/impact.ttf", 35 );
    }

    // Load sounds using Factory pattern
    {
        SoundFactory::Instance()->Get( RESOURCE::SOUND_INTRO_AMIGADISKFX )->Load( "Assets/Sounds/intro_disksound.ogg" );
        SoundFactory::Instance()->Get( RESOURCE::SOUND_PLAYER_FIRE )->Load( "Assets/Sounds/laser.ogg" );
        SoundFactory::Instance()->Get( RESOURCE::SOUND_ENEMY_FIRE )->Load( "Assets/Sounds/machinegun2.ogg" );
        SoundFactory::Instance()->Get( RESOURCE::SOUND_EXPLOSION1 )->Load( "Assets/Sounds/explosion_1.ogg" );
        SoundFactory::Instance()->Get( RESOURCE::SOUND_EXPLOSION2 )->Load( "Assets/Sounds/explosion_2.ogg" );
    }

    // Preload musics using Factory pattern
    {
        MusicFactory::Instance()->Get( RESOURCE::MUSIC_SPLASH )->Load( "Assets/Musics/cdk_-_Song_Of_Peace.ogg" );
        MusicFactory::Instance()->Get( RESOURCE::MUSIC_INGAME )->Load( "Assets/Musics/Astroboy_Sprung-160.ogg" );
        MusicFactory::Instance()->Get( RESOURCE::MUSIC_GAMEOVER )->Load( "Assets/Musics/Syenta_-_Cytheres_Reves_(Cytheres_Dreams)_2.ogg" );
    }

    // Create texts using Factory pattern
    {
        auto& fontSmall = FontFactory::Instance()->Get( RESOURCE::FONT_SMALL );
        auto& fontInfo = FontFactory::Instance()->Get( RESOURCE::FONT_INFO );
        auto& fontMenu = FontFactory::Instance()->Get( RESOURCE::FONT_MENU );
        TextFactory::Instance()->Get( RESOURCE::TEXT_BETA_BUILD_NOTE )->Create( fontSmall, "Space Attackers : Beta build, not for distribution! // Programming by Mika Luoma-aho <*****@*****.**>", 80, 128, 75, 64 );
        TextFactory::Instance()->Get( RESOURCE::TEXT_STARTGAME )->Create( fontInfo, "< Press space to start a new game or ESC to quit >" );
        TextFactory::Instance()->Get( RESOURCE::TEXT_SPACE_TO_CONTINUE )->Create( fontInfo, "< Press space to continue >" );
        TextFactory::Instance()->Get( RESOURCE::TEXT_ENTER_TO_CONTINUE )->Create( fontInfo, "< Press enter to continue >" );
        TextFactory::Instance()->Get( RESOURCE::TEXT_HIGHSCORES )->Create( fontMenu, "< HI-SCORES >" );
        TextFactory::Instance()->Get( RESOURCE::TEXT_LEVEL_STARTING )->Create( fontMenu, "Get ready for" );
        TextFactory::Instance()->Get( RESOURCE::TEXT_GAMEOVER_SCORE )->Create( fontMenu, "SCORE" );
        TextFactory::Instance()->Get( RESOURCE::TEXT_GAMEOVER_ENTERYOURNAME )->Create( fontMenu, "ENTER YOUR NAME", 255, 220, 100 );
        TextFactory::Instance()->Get( RESOURCE::TEXT_GAMEOVER_NAME )->Create( fontMenu, "" );
        TextFactory::Instance()->Get( RESOURCE::TEXT_GAMEOVER_NAME_PROMPT )->Create( fontMenu, "_" /*«*/ );
    }

    // Create particle effects
    {
        // Create Explosion
        {
            auto& velocityOverTime = InterpolationSetFactory::Instance()->Get( RESOURCE::IS_EXPLOSION_VELOCITY );
            velocityOverTime->AddValue( 0.0f, 20.0f );
            velocityOverTime->AddValue( 0.7f, 10.5f, Math::Interpolation::easeOutCirc<float,float> );

            auto& alphaOverTime = InterpolationSetFactory::Instance()->Get( RESOURCE::IS_EXPLOSION_ALPHA );
            alphaOverTime->AddValue( 0.0f, 1.0f );
            alphaOverTime->AddValue( 1.0f, 0.0f, Math::Interpolation::linearTween<float,float> );

            auto& sizeOverTime = InterpolationSetFactory::Instance()->Get( RESOURCE::IS_EXPLOSION_SIZE );
            sizeOverTime->AddValue( 0.0f, 3.0f );
            sizeOverTime->AddValue( 1.0f, 1.0f, Math::Interpolation::linearTween<float,float> );

            // Flame colors
            // http://kuler.adobe.com/#themeID/177302
            //
            Math::Colors::HSV h1, h2, h3, h4, h5;
            h1 = { 41, 0.84f, 1.0f };
            h2 = { 43, 0.70f, 1.0f };
            h3 = { 63, 0.37f, 0.97f };
            h4 = { 30, 0.85f, 1.0f };
            h5 = { 17, 0.95f, 0.73f };

            auto& colorOverTime = SDLColorInterpolationSetFactory::Instance()->Get( RESOURCE::IS_EXPLOSION_COLOR );
            colorOverTime->AddValue( 0.0f, Math::Colors::HSV2SDLColor(h1) );
            colorOverTime->AddValue( 0.2f, Math::Colors::HSV2SDLColor(h2) );
            colorOverTime->AddValue( 0.4f, Math::Colors::HSV2SDLColor(h3) );
            colorOverTime->AddValue( 0.6f, Math::Colors::HSV2SDLColor(h4) );
            colorOverTime->AddValue( 0.8f, Math::Colors::HSV2SDLColor(h5) );

            // Set parameters
            auto& psExplosion = ExplosionSystemFactory::Instance()->Get( RESOURCE::PS_EXPLOSION );

            psExplosion->Initialize( 500 );
            psExplosion->SetVelocityOverTime( RESOURCE::IS_EXPLOSION_VELOCITY );
            psExplosion->SetAlphaOverTime( RESOURCE::IS_EXPLOSION_ALPHA );
            psExplosion->SetColorOverTime( RESOURCE::IS_EXPLOSION_COLOR );
            psExplosion->SetSizeOverTime( RESOURCE::IS_EXPLOSION_SIZE );
            psExplosion->SetPrimitiveType( 2 );
            psExplosion->SetTrails( false );
        }

        // Create Smoke
        {
            auto& velocityOverTime = InterpolationSetFactory::Instance()->Get( RESOURCE::IS_SMOKE_VELOCITY );
            velocityOverTime->AddValue( 0.0f, 15.0f );
            velocityOverTime->AddValue( 1.0f, 0.0f, Math::Interpolation::linearTween<float,float> );

            auto& alphaOverTime = InterpolationSetFactory::Instance()->Get( RESOURCE::IS_SMOKE_ALPHA );
            alphaOverTime->AddValue( 0.0f, 0.5f );
            alphaOverTime->AddValue( 1.0f, 0.1f, Math::Interpolation::easeInCirc<float,float> );

            auto& sizeOverTime = InterpolationSetFactory::Instance()->Get( RESOURCE::IS_SMOKE_SIZE );
            sizeOverTime->AddValue( 0.0f, 1.0f );
            sizeOverTime->AddValue( 1.0f, 3.0f, Math::Interpolation::linearTween<float,float> );

            // Smoke colors
            // http://kuler.adobe.com/#themeID/1262268
            //
            Math::Colors::HSV h1, h2, h3, h4;
            h1 = { 226, 0.25f, 0.16f };
            h2 = { 235, 0.07f, 0.34f };
            h3 = { 40, 0.08f, 0.41f };
            h4 = { 43, 0.15f, 0.53f };

            auto& colorOverTime = SDLColorInterpolationSetFactory::Instance()->Get( RESOURCE::IS_SMOKE_COLOR );
            colorOverTime->AddValue( 0.0f, Math::Colors::HSV2SDLColor(h1) );
            colorOverTime->AddValue( 0.3f, Math::Colors::HSV2SDLColor(h2) );
            colorOverTime->AddValue( 0.6f, Math::Colors::HSV2SDLColor(h3) );
            colorOverTime->AddValue( 1.0f, Math::Colors::HSV2SDLColor(h4) );

            // Set parameters
            auto& psSmoke = SmokeSystemFactory::Instance()->Get( RESOURCE::PS_SMOKE );

            psSmoke->Initialize( 300 );
            psSmoke->SetVelocityOverTime( RESOURCE::IS_SMOKE_VELOCITY );
            psSmoke->SetAlphaOverTime( RESOURCE::IS_SMOKE_ALPHA );
            psSmoke->SetColorOverTime( RESOURCE::IS_SMOKE_COLOR );
            psSmoke->SetSizeOverTime( RESOURCE::IS_SMOKE_SIZE );
            psSmoke->SetPrimitiveType( 2 );
            psSmoke->SetTrails( false );
        }
    }

    // Create explosion thread to be used in highscore screen
    {
        ExplosionThreadFactory::Instance()->Get( RESOURCE::THREAD_EXPLOSION )->SetExplosion( RESOURCE::PS_EXPLOSION );
    }

    // Create note
    {
        auto& noteText = TextFactory::Instance()->Get( RESOURCE::TEXT_BETA_BUILD_NOTE );
        m_noteImgWidth = noteText->GetSurface()->w;
    }

    // Load scenes into memory and set first scene as running
    {
        unique_ptr<CScene> SplashScene = unique_ptr<SceneSplashScreen>(new SceneSplashScreen);
        unique_ptr<CScene> Level1Scene = unique_ptr<SceneLevel>(new SceneLevel);
        unique_ptr<CScene> GameOverScene = unique_ptr<SceneGameOver>(new SceneGameOver);
        unique_ptr<CScene> HighscoresScene = unique_ptr<SceneHighscores>(new SceneHighscores);
        unique_ptr<CScene> HelpScene = unique_ptr<SceneHelp>(new SceneHelp);

        // Add scenes (order is also the render order!)
        AddScene( SCENE_0_Intro, SplashScene );
        AddScene( SCENE_1_Game, Level1Scene );
        AddScene( SCENE_2_GameOver, GameOverScene );
        AddScene( SCENE_3_Highscores, HighscoresScene );
        AddScene( SCENE_4_Help, HelpScene );
    }

    // Load and run the first scene
    //#ifdef DEBUG_SCENE1
    //LoadAndRunScene( SCENE_1_Game );
    //SetState( (int)STATE::GAME );
    auto& properties = CSingleton<CProperties>::Instance();
    #ifdef DEBUG_GAMEOVER
    properties->Property( "Player", "Name" ) = (std::string)"";
    properties->Property( "Player", "Score" ) = static_cast<int>(1234567);
    properties->Property( "Player", "Fired" ) = static_cast<int>(1000);
    properties->Property( "Player", "Kills" ) = static_cast<int>(20);
    properties->Property( "Player", "Accuracy" ) = static_cast<int>(98);
    properties->Property( "Player", "Level" ) = static_cast<int>(27);
    LoadAndRunScene( SCENE_2_GameOver );
    SetState( (int)STATE::GAME_OVER );
    #else
    properties->Property( "Player", "Name" ) = (std::string)"";
    LoadAndRunScene( SCENE_0_Intro );
    SetState( (int)STATE::SPLASH_SCREEN );
    #endif

    // Default to 60fps
    SDL_initFramerate( &m_fpsManager );
    SDL_setFramerate( &m_fpsManager, 60 );

    // Initialize state handlers
    InitHandlers();
}
예제 #17
0
	bool Initialize (int w, int h, bool fullScreen, System::State* StartingState, int FrameRate, std::string windowTitle, std::string iconFile){
	
	    // Initiate SDL
	    if ( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0 ){
			fprintf( stderr, "Video query failed: %s\n", SDL_GetError());
			exit(1);
	        return false;
		}
	    
	    atexit(SDL_Quit); // At quit, destroy SDL
		
		int flags;
		if(fullScreen)
			flags = SDL_HWSURFACE | SDL_HWACCEL | SDL_DOUBLEBUF | SDL_FULLSCREEN;
		else
			flags = SDL_HWSURFACE | SDL_HWACCEL | SDL_DOUBLEBUF;

		Screen = SDL_SetVideoMode(w, h, 32, flags);
		if(Screen == NULL){
			fprintf( stderr, "Video mode set failed: %s\nWidth(%d), Height(%d)\n", SDL_GetError(), w, h);
			exit(1);
			return false;
		}

		/*
	    // Set up the window and video mode
	    if(fullScreen)
	        Screen = SDL_SetVideoMode(w,h,32,SDL_OPENGL|SDL_HWSURFACE|SDL_NOFRAME|SDL_DOUBLEBUF|SDL_FULLSCREEN|SDL_OPENGL);
	    else
	        Screen = SDL_SetVideoMode(w,h,32,SDL_OPENGL|SDL_HWSURFACE|SDL_NOFRAME|SDL_DOUBLEBUF|SDL_OPENGL);
	    if ( Screen == NULL )
	        return false;
		*/





		
	    
		// Set the caption of the window
		SDL_WM_SetCaption(windowTitle.c_str(), NULL);
		
		// Set the window icon
		if(iconFile != ""){
			SDL_Surface* WindowIcon = IMG_Load(iconFile.c_str());
			if(WindowIcon){
				SDL_SetColorKey(WindowIcon, SDL_SRCCOLORKEY, 
					SDL_MapRGB(WindowIcon->format, 255, 0, 255));
				SDL_WM_SetIcon(WindowIcon, NULL);
				SDL_FreeSurface(WindowIcon);
			} else {
				fprintf( stderr, "Error loading window icon file \"%s\"\n", iconFile.c_str());
			}
		}

		// Input
		System::Input::Initialize();

		// Math
		System::Math::Initialize();

		// Text
		if(System::Text::Initialize() == false){
			fprintf( stderr, "Error initializing text\n");
		}
		

		// Framerate
		SDL_initFramerate(&fpsm);
		if(FrameRate < 0) FrameRate = 1;
		SDL_setFramerate(&fpsm, FrameRate);
	    
	    // Default values
	    Width = w;
	    Height = h;
		Title = windowTitle;
		SetState(StartingState);
		Going = true;
	    
	    return true;
	}
예제 #18
0
파일: fps.c 프로젝트: TroyShaw/troykanoid
void fps_init(int hz)
{
	fpsHz = hz;
	SDL_initFramerate(&fpsManager);
	fps_sethz(hz);
}
예제 #19
0
파일: client.cpp 프로젝트: atheros/mana
Client::Client(const Options &options):
    mOptions(options),
    mGame(0),
    mCurrentDialog(0),
    mQuitDialog(0),
    mDesktop(0),
    mSetupButton(0),
    mState(STATE_CHOOSE_SERVER),
    mOldState(STATE_START),
    mStateAfterOkDialog(mState),
    mIcon(0),
    mLogicCounterId(0),
    mSecondsCounterId(0),
    mLimitFps(false)
{
    assert(!mInstance);
    mInstance = this;

    logger = new Logger;

    // Set default values for configuration files
    branding.setDefaultValues(getBrandingDefaults());
    paths.setDefaultValues(getPathsDefaults());
    config.setDefaultValues(getConfigDefaults());

    // Load branding information
    if (!options.brandingPath.empty())
    {
        branding.init(options.brandingPath);
    }

    initRootDir();
    initHomeDir();
    initConfiguration();

    chatLogger = new ChatLogger;
    if (options.chatLogDir.empty())
        chatLogger->setLogDir(mLocalDataDir + std::string("/logs/"));
    else
        chatLogger->setLogDir(options.chatLogDir);

    // Configure logger
    logger->setLogFile(mLocalDataDir + std::string("/mana.log"));
    logger->setLogToStandardOut(config.getBoolValue("logToStandardOut"));

    // Log the mana version
    logger->log("Mana %s", FULL_VERSION);

    initScreenshotDir();

    // Initialize SDL
    logger->log("Initializing SDL...");
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
    {
        logger->error(strprintf("Could not initialize SDL: %s",
                      SDL_GetError()));
    }
    atexit(SDL_Quit);

    SDL_EnableUNICODE(1);
    SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);

    SDL_WM_SetCaption(branding.getValue("appName", "Mana").c_str(), NULL);

    ResourceManager *resman = ResourceManager::getInstance();

    if (!resman->setWriteDir(mLocalDataDir))
    {
        logger->error(strprintf("%s couldn't be set as home directory! "
                                "Exiting.", mLocalDataDir.c_str()));
    }

    Image::SDLsetEnableAlphaCache(config.getValue("alphaCache", true));

#if defined __APPLE__
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
    char path[PATH_MAX];
    if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path,
                                          PATH_MAX))
    {
        fprintf(stderr, "Can't find Resources directory\n");
    }
    CFRelease(resourcesURL);
    strncat(path, "/data", PATH_MAX - 1);
    resman->addToSearchPath(path, false);
    mPackageDir = path;
#else
    resman->addToSearchPath(PKG_DATADIR "data", false);
    mPackageDir = PKG_DATADIR "data";
#endif

    resman->addToSearchPath("data", false);

    // Add branding/data to PhysFS search path
    if (!options.brandingPath.empty())
    {
        std::string path = options.brandingPath;

        // Strip blah.mana from the path
#ifdef _WIN32
        int loc1 = path.find_last_of('/');
        int loc2 = path.find_last_of('\\');
        int loc = std::max(loc1, loc2);
#else
        int loc = path.find_last_of('/');
#endif
        if (loc > 0)
            resman->addToSearchPath(path.substr(0, loc + 1) + "data", false);
    }

    // Add the main data directories to our PhysicsFS search path
    if (!options.dataPath.empty())
        resman->addToSearchPath(options.dataPath, false);

    // Add the local data directory to PhysicsFS search path
    resman->addToSearchPath(mLocalDataDir, false);

    std::string iconFile = branding.getValue("appIcon", "icons/mana");
#ifdef _WIN32
    iconFile += ".ico";
#else
    iconFile += ".png";
#endif
    iconFile = resman->getPath(iconFile);
    logger->log("Loading icon from file: %s", iconFile.c_str());
#ifdef _WIN32
    static SDL_SysWMinfo pInfo;
    SDL_GetWMInfo(&pInfo);
    // Attempt to load icon from .ico file
    HICON icon = (HICON) LoadImage(NULL,
                                   iconFile.c_str(),
                                   IMAGE_ICON, 64, 64, LR_LOADFROMFILE);
    // If it's failing, we load the default resource file.
    if (!icon)
        icon = LoadIcon(GetModuleHandle(NULL), "A");

    if (icon)
        SetClassLong(pInfo.window, GCL_HICON, (LONG) icon);
#else
    mIcon = IMG_Load(iconFile.c_str());
    if (mIcon)
    {
        SDL_SetAlpha(mIcon, SDL_SRCALPHA, SDL_ALPHA_OPAQUE);
        SDL_WM_SetIcon(mIcon, NULL);
    }
#endif

    bool useOpenGL = !mOptions.noOpenGL && (config.getValue("opengl", 1) == 1);

    // Set up the transparency option for low CPU when not using OpenGL.
    if (!useOpenGL && (config.getValue("disableTransparency", 0) == 1))
        Image::SDLdisableTransparency();

#ifdef USE_OPENGL

    // Setup image loading for the right image format
    Image::setLoadAsOpenGL(useOpenGL);

    // Create the graphics context
    graphics = useOpenGL ? new OpenGLGraphics : new Graphics;
#else
    // Create the graphics context
    graphics = new Graphics;
#endif

    const int width = config.getIntValue("screenwidth");
    const int height = config.getIntValue("screenheight");
    const int bpp = 0;
    const bool fullscreen = config.getBoolValue("screen");
    const bool hwaccel = config.getBoolValue("hwaccel");

    // Try to set the desired video mode
    if (!graphics->setVideoMode(width, height, bpp, fullscreen, hwaccel))
    {
        logger->error(strprintf("Couldn't set %dx%dx%d video mode: %s",
            width, height, bpp, SDL_GetError()));
    }

    // Initialize for drawing
    graphics->_beginDraw();

    Theme::prepareThemePath();

    // Initialize the item and emote shortcuts.
    itemShortcut = new ItemShortcut;
    emoteShortcut = new EmoteShortcut;

    gui = new Gui(graphics);

    // Initialize sound engine
    try
    {
        if (config.getBoolValue("sound"))
            sound.init();

        sound.setSfxVolume(config.getIntValue("sfxVolume"));
        sound.setNotificationsVolume(config.getIntValue("notificationsVolume"));
        sound.setMusicVolume(config.getIntValue("musicVolume"));
    }
    catch (const char *err)
    {
        mState = STATE_ERROR;
        errorMessage = err;
        logger->log("Warning: %s", err);
    }

    // Initialize keyboard
    keyboard.init();

    // Initialise player relations
    player_relations.init();

    userPalette = new UserPalette;
    setupWindow = new Setup;

    sound.playMusic(branding.getStringValue("loginMusic"));

    // Initialize default server
    mCurrentServer.hostname = options.serverName;
    mCurrentServer.port = options.serverPort;
    loginData.username = options.username;
    loginData.password = options.password;
    loginData.remember = config.getBoolValue("remember");
    loginData.registerLogin = false;

    if (mCurrentServer.hostname.empty())
        mCurrentServer.hostname = branding.getValue("defaultServer","").c_str();

    if (mCurrentServer.port == 0)
    {
        mCurrentServer.port = (short) branding.getValue("defaultPort",
                                                                  DEFAULT_PORT);
        mCurrentServer.type = ServerInfo::parseType(
                           branding.getValue("defaultServerType", "tmwathena"));
    }

    if (chatLogger)
        chatLogger->setServerName(mCurrentServer.hostname);

    if (loginData.username.empty() && loginData.remember)
        loginData.username = config.getStringValue("username");

    if (mState != STATE_ERROR)
        mState = STATE_CHOOSE_SERVER;

    // Initialize logic and seconds counters
    tick_time = 0;
    mLogicCounterId = SDL_AddTimer(MILLISECONDS_IN_A_TICK, nextTick, NULL);
    mSecondsCounterId = SDL_AddTimer(1000, nextSecond, NULL);

    // Initialize frame limiting
    SDL_initFramerate(&mFpsManager);

    listen(Event::ConfigChannel);

    //TODO: fix having to fake a option changed event
    Event fakeevent(Event::ConfigOptionChanged);
    fakeevent.setString("option", "fpslimit");
    event(Event::ConfigChannel, fakeevent);

    // Initialize PlayerInfo
    PlayerInfo::init();
}
void Draw(SDL_Surface *screen)
{
	int rate,x,y,s;
	SDL_Rect dest,clip;
	SDL_Surface *texture_image;
	SDL_Surface *texture_target1;
	SDL_Surface *texture_target2;
	FPSmanager fpsm;
	Uint32 rmask, gmask, bmask, amask;
	int width_half = screen->w/2;
	int height_half = screen->h/2;
	Uint32 text_color = 0xffffffff;

	/* Define masks for 32bit surface */
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
	rmask = 0xff000000;
	gmask = 0x00ff0000;
	bmask = 0x0000ff00;
	amask = 0x000000ff;
#else 
	rmask = 0x000000ff;
	gmask = 0x0000ff00;
	bmask = 0x00ff0000;
	amask = 0xff000000;                               
#endif

	/* Create semi-transparent textured surface */
	s=64;
	texture_image = SDL_DisplayFormatAlpha(SDL_CreateRGBSurface(SDL_SWSURFACE, s, s, 32, rmask, gmask, bmask, amask));
	/* Add some color */
	boxRGBA(texture_image, 0,  0, s/2, s/2, 255, 0, 0, 255); 
	boxRGBA(texture_image, s/2, 0, s, s/2, 0, 255, 0, 255); 
	boxRGBA(texture_image, 0, s/2, s/2, s, 0, 0, 255, 255); 
	boxRGBA(texture_image, s/2, s/2, s, s, 255, 255, 255, 255);  
	/* Make 75%-transparent */
	SDL_gfxSetAlpha(texture_image, 96);
	/* Set alpha channel use to per-pixel blending */
	SDL_SetAlpha(texture_image, SDL_SRCALPHA, 255);

	/* Create an all transparent surface */
	texture_target1 = SDL_DisplayFormatAlpha(SDL_CreateRGBSurface(SDL_SWSURFACE, 256, 256, 32, rmask, gmask, bmask, amask));
	/* Make 75%-transparent */
	SDL_gfxSetAlpha(texture_target1, 64);
	/* Set alpha channel use to per-pixel blending */
	SDL_SetAlpha(texture_target1, SDL_SRCALPHA, 255);

	/* Create an all transparent surface (2) */
	texture_target2 = SDL_DisplayFormatAlpha(SDL_CreateRGBSurface(SDL_SWSURFACE, 256, 256, 32, rmask, gmask, bmask, amask));
	/* Make 75%-transparent */
	SDL_gfxSetAlpha(texture_target2, 64);
	/* Set alpha channel use to per-pixel blending */
	SDL_SetAlpha(texture_target2, SDL_SRCALPHA, 255);

	/* Define clipping region for left box */
	clip.x = width_half-256-10 ;
	clip.y = height_half-256/2 ;
	clip.w = 256;
	clip.h = 256;

	/* Initialize Framerate manager */  
	SDL_initFramerate(&fpsm);

	/* Set/switch framerate */
	rate=5;
	SDL_setFramerate(&fpsm,rate);

	/* --- Drawing loop */
	while (1) {

		/* Event handler */
		HandleEvent();

		/* Black screen */
		ClearScreen(screen);

		/* Random position of new texture */
		x=(rand() % (256+2*s))-s;
		y=(rand() % (256+2*s))-s;

		/* Same for comparison texture */
		dest.x = x;
		dest.y = y;
		dest.w = texture_image->w;
		dest.h = texture_image->h;
		SDL_BlitSurface(texture_image, NULL, texture_target1, &dest);

		/* Blit image into the target using custom Blit function. */
		dest.x = x;
		dest.y = y;
		dest.w = texture_image->w;
		dest.h = texture_image->h;
		SDL_gfxBlitRGBA(texture_image, NULL, texture_target2, &dest);

		/* Draw comparison target on screen (left) */
		dest.x = width_half-256-10;
		dest.y = height_half-256/2;
		dest.w = 256;
		dest.h = 256;
		SDL_BlitSurface(texture_target1, NULL, screen, &dest);

		/* Draw combiner target on screen (right) */
		dest.x = width_half+10;
		dest.y = height_half-256/2;
		dest.w = 256;
		dest.h = 256;
		SDL_BlitSurface(texture_target2, NULL, screen, &dest);

		/* Draw some frames with titles */
		rectangleColor(screen, width_half-256-10-1, height_half-256/2-1, width_half-256-10-1+257, height_half-256/2-1+257,  text_color);
		rectangleColor(screen, width_half+10-1, height_half-256/2-1, width_half+10-1+257, height_half-256/2-1+257, text_color);
		stringColor(screen, width_half-256-10-1, height_half-256/2-1-36, "     SDL Standard Blitter     ", text_color);
		stringColor(screen, width_half-256-10-1, height_half-256/2-1-24, "Image    --sdlBlit-->  Target1", text_color);
		stringColor(screen, width_half-256-10-1, height_half-256/2-1-12, "Target1  --sdlBlit-->  Screen", text_color);
		stringColor(screen, width_half+10-1, height_half-256/2-1-36, " SDL_gfx Compositing Blitter", text_color);  
		stringColor(screen, width_half+10-1, height_half-256/2-1-24, "Image    --gfxBlit-->  Target2", text_color);  
		stringColor(screen, width_half+10-1, height_half-256/2-1-12, "Target2  --sdlBlit-->  Screen", text_color);  

		stringColor(screen, width_half-256-10-1, height_half-256/2-1-60, "gfxBlitRGBA Demo: Target1/2 A=64 (25%), Image A=96 (37%)", text_color);  

		/* Display by flipping screens */
		SDL_Flip(screen);

		/* Delay to fix rate */                   
		SDL_framerateDelay(&fpsm);  
	}
}
예제 #21
0
파일: main.cpp 프로젝트: python50/pong
int main(){
    //config_manager config("data/settings.sqlite");
	//config.set_setting_int("int", "Settings",100);
    //cout << config.get_setting_int("int", "Settings") << "\n";

    new message_log(MESSAGE_EVENT,"WWSiGE Loading");

    game_engine * engine=new game_engine();

    if (! engine->load(640,480,0))
    {
        new message_log(MESSAGE_FATAL_ERROR,"WWSiGE Failed To Load Necessary Resources, Quitting ...");
        return 100;
    }

    new message_log(MESSAGE_EVENT,"WWSiGE Started");

    FPSmanager manager;
    SDL_initFramerate(&manager);
    SDL_setFramerate(&manager, 30);

    uint32_t last_tick=0;
    char counter=0;
    float fps=0;
    float fps_average=0;
    bool run=1;

    while (run)
    {
        last_tick=SDL_GetTicks();
        run=engine->update();
        SDL_framerateDelay(&manager);
        fps=SDL_GetTicks()-last_tick;
        fps/=1000;
        fps=1/fps;
        fps_average=(fps_average+fps)/2;

        counter++;

        if (counter > 59)
        {
            counter=0;
			new message_log("FPS" ,"%f (%f)", fps_average, fps);
        }

        controller * fps_text = engine->get_object("fps-text");
        if (fps_text==NULL)
        {
            fps_text=new text(engine,"fps-text",625,0,"jura_medium-12","",BLIT_ABSOLUTE);
            engine->add_object(fps_text);
            int value=0xFF;
            engine->get_object("fps-text")->set("font_green",value);
        }

        string text=convert_int_string(fps_average);
        fps_text->set("text",text);

    }

    new message_log(MESSAGE_EVENT,"WWSiGE Closed");

    return 0;
}
예제 #22
0
파일: output.c 프로젝트: bgheneti/beat-off
void output_run(void* args)
{
    FPSmanager fps_manager;
    unsigned char frame[4096];

    SDL_initFramerate(&fps_manager);
    SDL_setFramerate(&fps_manager, 100);
    stat_ops = 100;

    output_running = 1;   
    unsigned int last_tick = SDL_GetTicks();

    while(output_running)
    {
        mbeat_t tb = timebase_get();

        update_patterns(tb);
        update_signals(tb);

        for(int i=0; i<n_output_strips; i++)
        {
            if(!output_strips[i].bus)
                continue;

            output_to_buffer(&output_strips[i], output_buffers[i]);

            float energy = 0.;
            float scalar = 1.0;
            for(int k = 0; k < output_strips[i].length; k++){
                energy += output_buffers[i][k].r;
                energy += output_buffers[i][k].g;
                energy += output_buffers[i][k].b;
            }
            scalar = output_strips[i].length * config.output.max_energy / energy * 255.;
            if(scalar > 255.)
                scalar = 255.;

            int j = 0;
            for(int k = 0; k < output_strips[i].length; k++){
                frame[j++] = output_buffers[i][k].r * scalar;
                frame[j++] = output_buffers[i][k].g * scalar;
                frame[j++] = output_buffers[i][k].b * scalar;
            }

            if(output_on_flux && (output_strips[i].bus & OUTPUT_FLUX))
                output_flux_push(&output_strips[i], frame, j);
        }
        SDL_framerateDelay(&fps_manager);
        //stat_ops = SDL_getFramerate(&fps_manager);
        stat_ops = 0.8 * stat_ops + 0.2 * (1000. / (SDL_GetTicks() - last_tick));
        last_tick = SDL_GetTicks();
    }

    for(int i=0; i<n_output_strips; i++)
    {
        free(output_buffers[i]);
    }

    free(output_buffers);

    if(output_on_flux)
        output_flux_del();
}
예제 #23
0
/// \brief Main program function
///
/// This function does very little on its own. It manages some output to
/// player's console, directs subsystems to initialize themselves and makes
/// choice of rendering engine. Then it runs the main game loop, processing
/// events and sending them further into the game.
int main(int argc, char *argv[])
{

    #if !defined(WIN32) && !defined(__APPLE__)
    #ifdef _GLIBCXX_DEBUG
	/*#if __WORDSIZE != 64*/

    /* Install our signal handler */
    struct sigaction sa;

    sa.sa_sigaction = /*(void *)*/crashhndl;
    sigemptyset (&sa.sa_mask);
    sa.sa_flags = SA_RESTART | SA_SIGINFO;

    sigaction(SIGSEGV, &sa, NULL);
    sigaction(SIGFPE, &sa, NULL);
    /*#endif*/
	#endif
    #endif



#ifdef WIN32
	WORD wVersionRequested;
	WSADATA wsaData;
	wVersionRequested = MAKEWORD( 2, 2 );

	if(WSAStartup(wVersionRequested, &wsaData) != 0){
		DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Winsock startup failed!!");
		return -1;
	}

	if((LOBYTE(wsaData.wVersion) != 2) || (HIBYTE(wsaData.wVersion) != 2)){
		WSACleanup( );
		DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "No Winsock 2.2 found!");
		return -1;
	}

#endif

	//setenv("SDL_VIDEODRIVER", "aalib", 0);
	//setenv("AAOPTS","-width 200 -height 70 -dim -reverse -bold -normal -boldfont  -eight -extended ",0);
	//setenv("AAFont","-*-fixed-bold-*-*-*-*-55-*-*-*-*-*-*",0);
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, PRODUCTLONG "\n");
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "================================\n");
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "version " PRODUCTVERSION "\n");
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "compiled on " __DATE__ " " __TIME__ "\n");
#ifdef BUILDVERSION
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "build %s\n", BUILDVERSION);
#endif
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, " This is free software: you are free to change and redistribute it.\n"
		" There is NO WARRANTY, to the extent permitted by law. \n"
		" Review LICENSE in " PRODUCTSHORT " distribution for details.\n");


    yatc_fopen_init(argv[0]);



	options.Load();
	MAXFPS = options.maxfps;



#if HAVE_LIBINTL_H
    // set up i18n stuff
    if(options.lang.size())
    {
        std::string l("LANG=");
        l+=options.lang;
        putenv((char*)l.c_str());
    }
    setlocale( LC_ALL, "");//options.lang.c_str() );
    setlocale( LC_NUMERIC, "C");
    #if !BAZEL_BUILD
    bindtextdomain( "yatc", "./translations" );
    #else
    bindtextdomain( "yatc", (yatc_path_to_binary() + "yatc.runfiles/yatc/translations").c_str());
    #endif
    textdomain( "yatc" );
    bind_textdomain_codeset("yatc","windows-1252");
#endif

	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Checking graphics files existence...\n");
	checkFiles();
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "All graphics files were found.\n");


	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Initializing windowing...\n");

	if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0){
		std::stringstream out;
		out << "Couldn't initialize SDL: " << SDL_GetError() << std::endl;
		DEBUGPRINT(DEBUGPRINT_ERROR, DEBUGPRINT_LEVEL_OBLIGATORY, out.str().c_str());

		NativeGUIError(out.str().c_str(), PRODUCTSHORT " Fatal Error");
		exit(1);
	}

    // We are no longer dependant on .dat for this!
    // ivucica asks: nate, not dependant for what? why is this removed?
    // because of .ico? disagree.
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Loading data...\n");
	if(!Objects::getInstance()->loadDat("Tibia.dat")){
		DEBUGPRINT(DEBUGPRINT_ERROR, DEBUGPRINT_LEVEL_OBLIGATORY, gettext("Loading data file failed!"));
		std::string forreplace = gettext("Loading the data file '$$FILENAME$$' has failed.\nPlease place '$$FILENAME$$' in the same folder as $$PRODUCTSHORT$$.\n");
		forreplace = str_replace("$$FILENAME$$", "Tibia.dat", forreplace);
		forreplace = str_replace("$$PRODUCTSHORT$$", PRODUCTSHORT, forreplace);
		NativeGUIError(forreplace.c_str(), str_replace("$$PRODUCTSHORT$$", PRODUCTSHORT, gettext("$$PRODUCTSHORT$$ Fatal Error")).c_str());
		exit(1);
	}


	setIcon(); // must be called prior to first call to SDL_SetVideoMode() (currently done in engine)

	SDL_EnableKeyRepeat(200, 50);
	SDL_EnableUNICODE(1);

	try{
	    g_engine = NULL; // set to null, in case anything that happens inside engine constructor wants to know we're just constructing
		switch(options.engine){
			#ifdef USE_OPENGL
			case ENGINE_OPENGL:
				g_engine = new EngineGL;
				break;
			#endif

			default:
				DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_WARNING, "Unknown engine was selected. Falling back to SDL.");
				options.engine = ENGINE_SDL;
			case ENGINE_SDL:
				g_engine = new EngineSDL;
				break;
		}

		if(!g_engine->isSupported()){
			DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_WARNING, "The selected graphics engine is not supported. Falling back to SDL.");
			delete g_engine;
			g_engine = NULL; // set to null, in case anything that happens inside engine constructor wants to know we're just constructing
			options.engine = ENGINE_SDL;
			g_engine = new EngineSDL;
		}

		// NOTE (nfries88): Make sure the window is sized as per the options
		int w = MAX(options.w, 656);
		int h = MAX(options.h, 352+options.consoleh);
		g_engine->doResize(w, h);


		DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Loading skin...\n");
		g_skin.loadSkin();
		DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Skin has been loaded\n");


		DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Constructing gamemode...\n");
		resetDefaultCursor();
		if (argc == 1)
		{
		    g_game = new GM_MainMenu();
            //g_game = new GM_Debug(); // ivucica: this is for testing -- choice should be a cmd line option
		} else
		{
		    g_game = new GM_MainMenu();
            ProtocolGame* protocol = ProtocolConfig::createGameProtocol(854,"","","",false);
            g_connection = new ConnectionReplay(argv[1], protocol);
            if (argc==3)
            {
                sscanf(argv[2], "%f", &g_replayspeed);
            }

		}


        DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Initializing framerate manager...\n");
        SDL_initFramerate(&g_fpsmgr);
        SDL_setFramerate(&g_fpsmgr,MAXFPS);


		DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Running\n");
        g_running = true;

        #ifdef WIN32
        SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
        #endif

		SDL_Event event;
		while(g_running){

            //g_engine->fpsMutexLock();

            //int beginticks = SDL_GetTicks();
            g_engine->performFpsCalc();

			//first process sdl events
			while(SDL_PollEvent(&event)){
				switch (event.type){
					case SDL_VIDEORESIZE:
						g_engine->doResize(event.resize.w, event.resize.h);
						g_game->doResize(event.resize.w, event.resize.h);
						break;

					case SDL_QUIT:
						g_game->onExitAttempt();
						break;

					case SDL_KEYDOWN:
						onKeyDown(event);
						break;
                    case SDL_KEYUP:
                        if((event.key.keysym.sym == SDLK_LSUPER)
                          || (event.key.keysym.sym == SDLK_RSUPER))
                            superkey_state = false;
                        break;

					case SDL_MOUSEBUTTONUP:
					case SDL_MOUSEBUTTONDOWN:
						#ifdef WINCE
						if (ptrx < 5 && ptry < 5)
							SDL_WM_IconifyWindow(); // appears to crash the application?! ah nevermind
						#endif
						g_game->mouseEvent(event);
						break;

					case SDL_MOUSEMOTION:
						ptrx = event.motion.x;
						ptry = event.motion.y;
						g_game->mouseEvent(event);
						break;
					default:
						break;
				}
			}
			//update current frame time
			g_frameDiff = SDL_GetTicks() - g_frameTime;
			g_frameTime = SDL_GetTicks();


            if (MAXFPS) {
                SDL_framerateDelay(&g_fpsmgr);

            }

			//check connection
			if(g_connection){
				g_connection->executeNetwork();
			}

            if (!(SDL_GetAppState() & SDL_APPACTIVE)) {// if the application is minimized
                #ifdef WIN32
                Sleep(100); // sleep a while, and don't paint
                #else
                usleep(100 * 1000);
                #endif
            } else { //otherwise update scene
                g_game->updateScene();
                g_engine->Flip();
            }
			g_frames ++;


			//g_engine->fpsMutexUnlock();

		}
	}
	catch(std::string errtext){
		DEBUGPRINT(DEBUGPRINT_ERROR, DEBUGPRINT_LEVEL_OBLIGATORY, "%s", errtext.c_str());
	}

	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Game over\n");

	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Terminating protocol connection from main...\n");
	delete g_connection;
	g_connection = NULL;
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Destroying map...\n");
	Map::getInstance().clear();
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Destroying creature cache...\n");
	Creatures::getInstance().clear();
	Creatures::destroyInstance();
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Destroying inventory...\n");
	Inventory::getInstance().clear();

	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Unloading data...\n");
	Objects::getInstance()->unloadDat();
    Objects::destroyInstance();

    DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Unloading skin...\n");
	g_skin.unloadSkin();


	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Saving options...\n");
	options.Save();
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Finishing engine...\n");
	delete g_engine;
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Ending game...\n");
	delete g_game;
	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Shutting down SDL...\n");
	SDL_Quit();

#ifdef WIN32
	WSACleanup();
#endif

	DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Thanks for playing!\n");

	return 0;
}
예제 #24
0
void * hax_sdl_main(void *configuration) {

    hax_thread_config_t * hax_configs = (hax_thread_config_t *) configuration;
    hax_general_settings_t * hax_user_settings = &hax_configs->user_settings;
    hax_sdl_data * hax_sound_data = (hax_sdl_data *) hax_configs->data_zone;

    printf("[SDL] Thread Start!\n");

    FPSmanager hax_fps;
    float displ = 0;

    SDL_initFramerate(&hax_fps);
    SDL_setFramerate(&hax_fps, 60);

    // SDL video initialisation
    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
        printf( "Unable to init SDL: %s\n", SDL_GetError() );
        pthread_exit((void *) 1);
    }

    atexit(SDL_Quit);

    SDL_Surface* screen = SDL_SetVideoMode(hax_user_settings->window_w,
                                           hax_user_settings->window_h, 32,
                                           SDL_HWSURFACE|SDL_DOUBLEBUF);

    if ( !screen ) {
        printf("Unable to set %i x %i video: %s\n", hax_user_settings->window_w,
                hax_user_settings->window_h, SDL_GetError());
        pthread_exit((void *) 1);
    }

    printf("[SDL] Waiting to start...\n");
    fflush(stdout);
    std::cout.flush();

    hax_configs->timer->start();

    printf("[SDL] Firing Loop!\n");
    fflush(stdout);
    std::cout.flush();
    while (*hax_user_settings->message) {
        hax_configs->timer->wait_next_activation();
        hax_configs->timer->stat_execution_start();

        // We catch an SDL signal
        SDL_Event event;
        while (SDL_PollEvent(&event)) {
            // If there was any signal
            switch (event.type) {
                // We exit if the window is closed
            case SDL_QUIT:
                *hax_user_settings->message = false;
                break;

                // We also check for keypresses
            case SDL_KEYDOWN: {
                // Then we exit if ESCAPE is pressed
                if (event.key.keysym.sym == SDLK_ESCAPE)
                    *hax_user_settings->message = false;
                break;
            }
            }
        } // end of message processing

        // At first we clear the screen
        SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));


        vlineColor(screen, screen->w / 2, 0, screen->h, 0xffffffff);


        printf("[SDL] Requiring Locks!\n");
        fflush(stdout);
        std::cout.flush();

        // Here we lock the data and then plot amplitude and spectrums
        hax_sound_data->lock_data();
        printf("[SDL] Plotting Sound Data!\n");
        fflush(stdout);
        std::cout.flush();
        draw_sound(screen, hax_sound_data->get_frames(), hax_sound_data->get_left_sound_channel(),
                   hax_sound_data->get_right_sound_channel(), (screen->h)/7, (screen->h)/7, 0xff00ffff);

        draw_real_spectrum(screen, hax_sound_data->get_frames(), hax_sound_data->get_right_spectrum(),
                           (screen->h*7)/14, ((screen->h)/14), (char *)"Right", 0x00ffffff );

        draw_imaginary_spectrum(screen, hax_sound_data->get_frames(),
                                hax_sound_data->get_right_spectrum(), (screen->h*9)/14, ((screen->h)/14),
                                (char *)"Right", 0x00ffffff );

        draw_real_spectrum(screen, hax_sound_data->get_frames(), hax_sound_data->get_left_spectrum(),
                           (screen->h*11)/14, ((screen->h)/14), (char *)"Left", 0x00ffffff);

        draw_imaginary_spectrum(screen, hax_sound_data->get_frames(),
                                hax_sound_data->get_left_spectrum(), (screen->h*13)/14, ((screen->h)/14),
                                (char *)"Left", 0x00ffffff );

        printf("[SDL] Releasing Locks!\n");
        fflush(stdout);
        std::cout.flush();
        hax_sound_data->unlock_data();

        // Finally, we update the screen
        SDL_Flip(screen);


        displ ++;
        hax_configs->timer->stat_update();
    }

    printf("Exited cleanly\n");

    //  Printing Thread Statistics
    hax_configs->timer->stats_print();
    pthread_exit((void *) 0);
}
예제 #25
0
파일: main.cpp 프로젝트: emericg/MapMe_v1
/*!
 * \fn int main (int argc, char **argv)
 * \param argc Number of arguments.
 * \param argv Arguments.
 * \return Return the program state at exit: 0 if everything is fine, 1 if an error occur.
 *
 * Main function of MapMe.
 * Start the programme, initialize libraries, then start game pipe, wich contain menu and game.
 */
int main(int argc, char **argv)
#endif
{
    /*    States initialization        */
    StateManager &StateManager= StateManager::getInstance();
    StateManager.setSoftwareState(1);

    /*    Loading configuration        */
    ConfigManager &ConfigManager= ConfigManager::getInstance();
    if (ConfigManager.LoadConfig() == false)
    {
        std::cerr << "[X] Loading configuration : CRITICAL ERROR." << std::endl;// debug
        std::cerr << "[X] Attempt to shutdone." << std::endl;                   // debug

        return EXIT_FAILURE;
    }


    /*    Graphics initialization        */
    GfxManager &GfxManager= GfxManager::getInstance();
    if (GfxManager.createScreen() == false)
    {
        std::cerr << "[X] Screen initialization : CRITICAL ERROR." << std::endl;// debug
        std::cerr << "[X] Attempt to shutdone." << std::endl;                   // debug

        return EXIT_FAILURE;
    }

    // Temporary loading screen
    GfxManager.loadingScreen();

    // Load all gfx ressources
    GfxManager.loadRessources(0);


    /*    Events initialization        */
    EventManager &EventManager= EventManager::getInstance();


    /*    Audio initialization        */
    SoundManager &SoundManager= SoundManager::getInstance();
    if (SoundManager.initAudio() == false)
    {
        std::cerr << "[X] Audio initialization : CRITICAL ERROR." << std::endl; // debug
        std::cerr << "[X] Attempt to shutdone." << std::endl;                   // debug

        return EXIT_FAILURE;
    }
    SoundManager.loadRessources();

    /*    Menu and Game initialization    */
    GameWorld *pGAME= NULL;
    Menu *pMENU= NULL;


    /*    FPS manager initialization    */
    FPSmanager FramesManager;
    SDL_initFramerate(&FramesManager);
    SDL_setFramerate(&FramesManager, 30);


    // Main loop start
    /////////////////////
    std::cout << "[Y] Program started successfully !" << std::endl;
    while(StateManager.isExitCode() == false)
    {
        // Menu
        if ((StateManager.getSoftwareState() == 1) && (pMENU != NULL))
        {
            pMENU->MenuPipe();
        }
        else if ((StateManager.getSoftwareState() == 1) && (pMENU == NULL))
        {
            pMENU= new Menu();
            //GfxManager.loadRessources(1);
            if (pGAME != NULL)
            {
                delete pGAME;
                //GfxManager.unloadRessources(2);
                pGAME= NULL;
            }
        }

        // Game
        if ((StateManager.getSoftwareState() == 2) && (pGAME != NULL))
        {
            pGAME->GamePipe();
        }
        else if ((StateManager.getSoftwareState() == 2) && (pGAME == NULL))
        {
            pGAME= new GameWorld();
            //GfxManager.loadRessources(2);
            if (pMENU != NULL)
            {
                delete pMENU;
                //GfxManager.unloadRessources(1);
                pMENU= NULL;
            }
        }

        GfxManager.flipVideoBuffers();

        /* fps */
        SDL_framerateDelay(&FramesManager);
        //std::cout << "FPS : " << SDL_getFramerate(&FramesManager) << std::endl;
    }

    if (pMENU != NULL)
        delete pMENU;
    if (pGAME != NULL)
        delete pGAME;
    /////////////////////
    // Main loop end


    // Exit sequence
    std::cout << "[Y] Program shutting-done." << std::endl;                     // debug
    ConfigManager.destroyInstance();
    SoundManager.destroyInstance();
    GfxManager.destroyInstance();
    EventManager.destroyInstance();
    StateManager.destroyInstance();

return EXIT_SUCCESS;
}
예제 #26
0
int main ( int argc, char** argv )
{
	std::cout << "Starting\n";
    initalize();

    //TODO add resource load error handling
    add_surface("spaceb", load_surface("gray_space.png",1)   );
    add_surface("spacem", load_surface("gray_space.png",1)   );
    add_surface("spacef", load_surface("gray_space.png",1)   );

    for(int i=-2; i < 20+2; i++)
        meta::objects.push_back(new psrect_static(200*i, 200, 200, 200));
//meta::objects.push_back(new psrect_static(320, 20, 320, 20));

//meta::objects.push_back(new psrect_static(0, -400,1, 1000));
//meta::objects.push_back(new psrect_static(1000, -400, 1, 1000));

    meta::objects.push_back(new rocket(2000,-100, 50,70));

    //load_map("test.json");

    float32 timeStep = 1.0f / 30.0f;
    int32 velocityIterations = 6;
    int32 positionIterations = 2;

    FPSmanager manager;
    SDL_initFramerate(&manager);
    SDL_setFramerate(&manager, 30);

    // program main loop
    bool done = false;
    while (!done)
    {
        SDL_framerateDelay(&manager);

        // message processing loop
        SDL_Event event;
        while (SDL_PollEvent(&event))
        {
            // check for messages
            switch (event.type)
            {
                // exit if the window is closed
            case SDL_QUIT:
                done = true;
                break;

                // check for keypresses
            case SDL_KEYDOWN:
                // exit if ESCAPE is pressed
                if (event.key.keysym.sym == SDLK_ESCAPE)
                    done = true;
                break;


            } // end switch
        } // end of message processing

        // DRAWING STARTS HERE
        // clear screen
        //SDL_FillRect(meta::screen, 0, SDL_MapRGB(meta::screen->format, 0, 0, 0 ));
        SDL_FillRect(meta::screen, 0, SDL_MapRGB(meta::screen->format, meta::background_red , meta::background_green, meta::background_blue ));

        draw_background();

        // Instruct the world to perform a single step of simulation.
        // It is generally best to keep the time step and iterations fixed.
        meta::world.Step(timeStep, velocityIterations, positionIterations);

        update_objects();
        meta::world.DrawDebugData();

        // DRAWING ENDS HERE

        // finally, update the screen :)
        SDL_Flip(meta::screen);
    } // end main loop

    // all is well ;)
    printf("Exited cleanly\n");
    return 0;
}