- // Set defaults:
- scroll_x = 0;
-
- player_status.score_multiplier = 1;
-
- counting_distros = false;
- distro_counter = 0;
-
- /* set current song/music */
- currentmusic = LEVEL_MUSIC;
-}
-
-void
-World::add_object(GameObject* object)
-{
- // XXX hack for now until new collision code is ready
- BadGuy* badguy = dynamic_cast<BadGuy*> (object);
- if(badguy)
- bad_guys.push_back(badguy);
- Bullet* bullet = dynamic_cast<Bullet*> (object);
- if(bullet)
- bullets.push_back(bullet);
- Upgrade* upgrade = dynamic_cast<Upgrade*> (object);
- if(upgrade)
- upgrades.push_back(upgrade);
- Trampoline* trampoline = dynamic_cast<Trampoline*> (object);
- if(trampoline)
- trampolines.push_back(trampoline);
-
- gameobjects.push_back(object);
-}
-
-void
-World::parse_objects(lisp_object_t* cur)
-{
- while(!lisp_nil_p(cur)) {
- lisp_object_t* data = lisp_car(cur);
- std::string object_type = lisp_symbol(lisp_car(data));
-
- LispReader reader(lisp_cdr(data));
-
- if(object_type == "trampoline") {
- add_object(new Trampoline(displaymanager, reader));
- } else {
- BadGuyKind kind = badguykind_from_string(object_type);
- add_object(new BadGuy(displaymanager, kind, reader));
- }
-
- cur = lisp_cdr(cur);
- }
-}
-
-void
-World::activate_particle_systems()
-{
- if (level->particle_system == "clouds")
- {
- add_object(new CloudParticleSystem(displaymanager));
- }
- else if (level->particle_system == "snow")
- {
- add_object(new SnowParticleSystem(displaymanager));
- }
- else if (level->particle_system != "")
- {
- st_abort("unknown particle system specified in level", "");
- }
-}
-
-void
-World::draw()
-{
- /* Draw objects */
- displaymanager.get_viewport().set_translation(Vector(scroll_x, scroll_y));
- displaymanager.draw();
-}
-
-void
-World::action(double frame_ratio)
-{
- 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);
-
- /* Handle all possible collisions. */
- collision_handler();
-
- /** cleanup marked objects */
- for(std::vector<GameObject*>::iterator i = gameobjects.begin();
- i != gameobjects.end(); /* nothing */) {
- if((*i)->is_valid() == false) {
- Drawable* drawable = dynamic_cast<Drawable*> (*i);
- if(drawable)
- displaymanager.remove_drawable(drawable);
- BadGuy* badguy = dynamic_cast<BadGuy*> (*i);
- if(badguy) {
- bad_guys.erase(std::remove(bad_guys.begin(), bad_guys.end(), badguy),
- bad_guys.end());
- }
- Bullet* bullet = dynamic_cast<Bullet*> (*i);
- if(bullet) {
- bullets.erase(
- std::remove(bullets.begin(), bullets.end(), bullet),
- bullets.end());
- }
- Upgrade* upgrade = dynamic_cast<Upgrade*> (*i);
- if(upgrade) {
- upgrades.erase(
- std::remove(upgrades.begin(), upgrades.end(), upgrade),
- upgrades.end());
- }
- Trampoline* trampoline = dynamic_cast<Trampoline*> (*i);
- if(trampoline) {
- trampolines.erase(
- std::remove(trampolines.begin(), trampolines.end(), trampoline),
- trampolines.end());