get_level()->load_gfx();
// add background
activate_particle_systems();
- Background* bg = new Background(displaymanager);
+ background = new Background(displaymanager);
if(level->img_bkgd) {
- bg->set_image(level->img_bkgd, level->bkgd_speed);
+ background->set_image(level->img_bkgd, level->bkgd_speed);
} else {
- bg->set_gradient(level->bkgd_top, level->bkgd_bottom);
+ background->set_gradient(level->bkgd_top, level->bkgd_bottom);
}
- gameobjects.push_back(bg);
+ gameobjects.push_back(background);
// add tilemap
gameobjects.push_back(new TileMap(displaymanager, get_level()));
get_level()->load_gfx();
activate_particle_systems();
- Background* bg = new Background(displaymanager);
+ background = new Background(displaymanager);
if(level->img_bkgd) {
- bg->set_image(level->img_bkgd, level->bkgd_speed);
+ background->set_image(level->img_bkgd, level->bkgd_speed);
} else {
- bg->set_gradient(level->bkgd_top, level->bkgd_bottom);
+ background->set_gradient(level->bkgd_top, level->bkgd_bottom);
}
- gameobjects.push_back(bg);
+ gameobjects.push_back(background);
// add tilemap
gameobjects.push_back(new TileMap(displaymanager, get_level()));
get_level()->load_song();
void
World::set_defaults()
{
- // Set defaults:
- scroll_x = 0;
-
player_status.score_multiplier = 1;
counting_distros = false;
World::draw()
{
/* Draw objects */
- displaymanager.get_viewport().set_translation(Vector(scroll_x, scroll_y));
displaymanager.draw();
}
void
-World::action(double frame_ratio)
+World::action(float elapsed_time)
{
- tux->check_bounds(level->back_scrolling, (bool)level->hor_autoscroll_speed);
- scrolling(frame_ratio);
-
/* update objects (don't use iterators here, because the list might change
* during the iteration)
*/
for(size_t i = 0; i < gameobjects.size(); ++i)
- gameobjects[i]->action(frame_ratio);
+ gameobjects[i]->action(elapsed_time);
+
+ tux->check_bounds(displaymanager.get_viewport(),
+ level->back_scrolling, (bool)level->hor_autoscroll_speed);
+ scrolling(elapsed_time);
/* Handle all possible collisions. */
collision_handler();
#define CHANGE_DIR_SCROLL_SPEED 2000
/* This functions takes cares of the scrolling */
-void World::scrolling(double frame_ratio)
+void World::scrolling(float elapsed_time)
{
+ float scroll_x = displaymanager.get_viewport().get_translation().x;
+ float scroll_y = displaymanager.get_viewport().get_translation().y;
+
/* Y-axis scrolling */
float tux_pos_y = tux->base.y + (tux->base.height/2);
/* Auto scrolling */
if(level->hor_autoscroll_speed)
{
- scroll_x += level->hor_autoscroll_speed * frame_ratio;
+ scroll_x += level->hor_autoscroll_speed * elapsed_time;
+ displaymanager.get_viewport().set_translation(Vector(scroll_x, scroll_y));
return;
}
constant2 = 0.;
}
- float number = 2.5/(frame_ratio * CHANGE_DIR_SCROLL_SPEED/1000)*exp((CHANGE_DIR_SCROLL_SPEED-scrolling_timer.get_left())/1400.);
+ float number = 2.5/(elapsed_time * CHANGE_DIR_SCROLL_SPEED/1000)*exp((CHANGE_DIR_SCROLL_SPEED-scrolling_timer.get_left())/1400.);
if(left) number *= -1.;
scroll_x += number
- + constant1 * tux->physic.get_velocity_x() * frame_ratio
- + constant2 * tux->physic.get_acceleration_x() * frame_ratio * frame_ratio;
+ + constant1 * tux->physic.get_velocity_x() * elapsed_time
+ + constant2 * tux->physic.get_acceleration_x() * elapsed_time *
+ elapsed_time;
if ((right && final_scroll_x - scroll_x < 0) || (left && final_scroll_x - scroll_x > 0))
scroll_x = final_scroll_x;
scroll_x = level->width * 32 - screen->w;
if(scroll_x < 0)
scroll_x = 0;
+
+ displaymanager.get_viewport().set_translation(Vector(scroll_x, scroll_y));
}
void
{
// We have detected a collision and now call the
// collision functions of the collided objects.
- (*j)->collision(&bullets[i], CO_BULLET, COLLISION_NORMAL);
+ (*j)->collision(bullets[i], CO_BULLET, COLLISION_NORMAL);
bullets[i]->collision(CO_BADGUY);
break; // bullet is invalid now, so break
}