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; }
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); }
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; }
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; }