예제 #1
0
bool DemoCMotion::update()
{
	canvas.clear(bg_color);

	uint64_t current_time = clan::System::get_time();
	int time_run = current_time - last_time;
	last_time = current_time;

	/* the maximum time step is set to 50 milisecs to avoid artifacts
	and errors caused by low frame rate to be less noticeable. */
	while( time_run > 50 )
	{
		run_a_step(50);
		time_run -= 50;
	}

	if( time_run > 0 )
		run_a_step(time_run);

		
	if(blendingMode == L_ADDITIVE_BLENDING)
		L_DrawParticle(canvas, effect.get());
	else
		L_DrawParticleMinusAlpha(canvas, effect.get());

	if( show_menu )
	{
		frameratecounter.show_fps(canvas, font);

		font.draw_text(canvas, 10, 30, clan::string_format("#Particle : %1", effect->get_particle_num()), fontColor);

		font.draw_text(canvas,10,395,"F1 : hide/show menu",fontColor);
		font.draw_text(canvas,10,410,"Space : trigger random sleep",fontColor);
		font.draw_text(canvas,10,425,"Z key : change style",fontColor);
		font.draw_text(canvas,10,440,"X Key : toggle randomization for initial rotation",fontColor);
	}


	window.flip(0);	// Set to "1" to lock to screen refresh rate
	frameratecounter.frame_shown();

	if (quit)
	{
		// deinitialize LinearParticle
		L_ParticleSystem::deinit();
	}
	return !quit;
}
예제 #2
0
int run_game(int            nb_lin,
             int            nb_col,
             unsigned char  board[nb_lin][nb_col]
             )
{
    unsigned char       continue_game   = 1;
    unsigned char       nb_boxes        = nb_lin * nb_col;
    unsigned char       nb_player       = 0;
    unsigned char       winner          = 0;


    do
    {
        if ( nb_boxes == 0 )
        {
            winner          = 0;
            continue_game   = 0;
            break;
        }


        // Print the board
        #ifdef __DEBUG__
        show_array(nb_lin, nb_col, board);
        #else
        clear_screen();          // Clear the screen
        show_board(nb_lin, nb_col, board);
        #endif

        if ( run_a_step(nb_lin, nb_col, board, nb_player) )
        {
            winner          = nb_player + 1;
            continue_game   = 0;
            break;
        }


        // Change the player
        ++nb_player;
        nb_player %= 2;


        // Decrement the number of boxes available
        nb_boxes--;
    }
    while ( continue_game );


    // Print the board
    #ifdef __DEBUG__
    show_array(nb_lin, nb_col, board);
    #else
    clear_screen();
    show_board(nb_lin, nb_col, board);
    #endif

    return (winner);
}
예제 #3
0
bool DemoCircle::update()
{
	canvas.clear();

	uint64_t current_time = clan::System::get_time();
	int time_run = current_time - last_time;
	last_time = current_time;

	/* the maximum time step is set to 50milisecs to avoid artifacts
	and errors caused by low frame rate to be less noticeable. */
	while( time_run > 50 )
	{
		run_a_step(50);
		time_run -= 50;
	}

	if( time_run > 0 )
		run_a_step(time_run);


	L_DrawParticle(canvas, dropper.get());

	if( show_menu )
	{
		font.draw_text(canvas, 10, 30, clan::string_format("Period (millisecs) : %1", dropping_period));

		font.draw_text(canvas,10,410,"F1 : hide/show menu");
		font.draw_text(canvas,10,425,"Space : trigger random sleep");
		font.draw_text(canvas,10,440,"Up/Down : change dropping period");
	}

	frameratecounter.show_fps(canvas, font);
	window.flip(0);	// Set to "1" to lock to screen refresh rate
	frameratecounter.frame_shown();

	if (quit)
	{
		// deinitialize LinearParticle
		L_ParticleSystem::deinit();
	}

	return !quit;
 }
예제 #4
0
int DemoShooting::run(clan::DisplayWindow &window)
{
    clan::SlotContainer cc;
	window.set_title("LinearParticle Example - Shooting ");

	cc.connect(window.sig_window_close(), clan::bind_member(this, &DemoShooting::on_window_close));
	clan::Canvas canvas(window);
	cc.connect(window.get_ic().get_keyboard().sig_key_up(), clan::bind_member(this, &DemoShooting::on_key_up));

	// initialize LinearParticle
	L_ParticleSystem::init();

	// create surface to be used for particle and set the alignment
	clan::Sprite surface(canvas,"Resources/star.png");
	surface.set_alignment(clan::origin_center);

	motion_ctrl.set_1d_acceleration(-0.0003);

	L_Particle particle(&surface,3000);
	particle.set_color(L_Color(255,110,60,255));
	particle.coloring2(L_Color(255,110,60,255),L_Color(0,200,100,255),0.6);
	particle.rotating2(L_2PI);
	particle.set_motion_controller(&motion_ctrl);

	L_Vector shooting_vector;
	shooting_vector.set2( 0.4, L_DEGREE_TO_RADIAN(-90) );
	effect = new L_ShootingEffect(460,360,shooting_vector,16,4);
	effect->add(&particle);
	effect->set_width_interval(100);
	effect->set_angle_interval(L_DEGREE_TO_RADIAN(45));
	effect->set_life_distortion(600);
	effect->set_size_distortion(0.4f);
	effect->initialize();


	char str[32];
	quit = false;
	show_menu = true;

	clan::Font font(canvas, "Arial", 16 );
	FramerateCounter frameratecounter;
	clan::ubyte64 last_time = clan::System::get_time();

	while(!quit)
	{
		canvas.clear();

		clan::ubyte64 current_time = clan::System::get_time();
		int time_run = current_time - last_time;
		last_time = current_time;

		/* the maximum time step is set to 50milisecs to avoid artifacts
		and errors caused by low frame rate to be less noticeable. */
		while( time_run > 50 )
		{
			run_a_step(50);
			time_run -= 50;
		}

		if( time_run > 0 )
			run_a_step(time_run);


		L_DrawParticle(canvas, effect);

		if( show_menu )
		{
			frameratecounter.show_fps(canvas, font);

			sprintf(str,"#Particle : %d", effect->get_particle_num());
			font.draw_text(canvas,10,30,str);

			font.draw_text(canvas,10,425,"F1 : hide/show menu");
			font.draw_text(canvas,10,440,"Space : trigger random sleep");
		}


		window.flip(0);	// Set to "1" to lock to screen refresh rate
		frameratecounter.frame_shown();

		clan::KeepAlive::process(0);
	}

	delete effect;

	// deinitialize LinearParticle
	L_ParticleSystem::deinit();

	return 0;
}