X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsector.cpp;h=310d64f30d63fb849449c5cd39b4db711cb4ee33;hb=3b5cd0c1ef515b2c510f7378819fab398e2be9d2;hp=2a56628ce825b85249ee93aaf88be3d3e60c83fd;hpb=c43ea9b0d5372718888138ea2cc4abcd5acb5299;p=supertux.git diff --git a/src/sector.cpp b/src/sector.cpp index 2a56628ce..310d64f30 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -43,6 +43,7 @@ #include "resources.h" #include "statistics.h" #include "collision_grid.h" +#include "collision_grid_iterator.h" #include "special/collision.h" #include "math/rectangle.h" #include "math/aatriangle.h" @@ -51,10 +52,12 @@ #include "object/invisible_block.h" #include "object/platform.h" #include "object/bullet.h" +#include "object/rock.h" #include "badguy/jumpy.h" #include "badguy/snowball.h" #include "badguy/bouncing_snowball.h" #include "badguy/flame.h" +#include "badguy/flyingsnowball.h" #include "badguy/mriceblock.h" #include "badguy/mrbomb.h" #include "badguy/dispenser.h" @@ -64,6 +67,7 @@ #include "trigger/door.h" #include "trigger/sequence_trigger.h" #include "trigger/secretarea_trigger.h" +#include "gameobjs_bridge.h" Sector* Sector::_current = 0; @@ -117,35 +121,14 @@ Sector::parse_object(const std::string& name, const lisp::Lisp& reader) CloudParticleSystem* partsys = new CloudParticleSystem(); partsys->parse(reader); return partsys; - } else if(name == "door") { - return new Door(reader); } else if(name == "secretarea") { return new SecretAreaTrigger(reader); - } else if(name == "platform") { - return new Platform(reader); - } else if(name == "jumpy" || name == "money") { - return new Jumpy(reader); - } else if(name == "snowball") { - return new SnowBall(reader); - } else if(name == "bouncingsnowball") { - return new BouncingSnowball(reader); - } else if(name == "flame") { - return new Flame(reader); - } else if(name == "mriceblock") { - return new MrIceBlock(reader); - } else if(name == "mrbomb") { - return new MrBomb(reader); - } else if(name == "dispenser") { - return new Dispenser(reader); - } else if(name == "spike") { - return new Spike(reader); - } else if(name == "spiky") { - return new Spiky(reader); - } else if(name == "nolok_01") { - return new Nolok_01(reader); - } - - std::cerr << "Unknown object type '" << name << "'.\n"; + } else if(name == "sequencetrigger") { + return new SequenceTrigger(reader); + } else if(is_object(name)) { + return create_object(object_name_to_type(name), reader); + } else + std::cerr << "Unknown object type '" << name << "'.\n"; return 0; } @@ -464,11 +447,28 @@ Sector::get_best_spawn_point(Vector pos) return best_reset_point; } +Rectangle +Sector::get_active_region() +{ + return Rectangle( + camera->get_translation() - Vector(1600, 1200), + camera->get_translation() + Vector(1600, 1200)); +} + void Sector::action(float elapsed_time) { player->check_bounds(camera); - + +#if 0 + CollisionGridIterator iter(*grid, get_active_region()); + while(MovingObject* object = iter.next()) { + if(!object->is_valid()) + continue; + + object->action(elapsed_time); + } +#else /* update objects */ for(GameObjects::iterator i = gameobjects.begin(); i != gameobjects.end(); ++i) { @@ -478,7 +478,8 @@ Sector::action(float elapsed_time) object->action(elapsed_time); } - +#endif + /* Handle all possible collisions. */ collision_handler(); update_game_objects(); @@ -553,7 +554,16 @@ Sector::draw(DrawingContext& context) { context.push_transform(); context.set_translation(camera->get_translation()); - + +#if 0 + CollisionGridIterator iter(*grid, get_active_region()); + while(MovingObject* object = iter.next()) { + if(!object->is_valid()) + continue; + + object->draw(context); + } +#else for(GameObjects::iterator i = gameobjects.begin(); i != gameobjects.end(); ++i) { GameObject* object = *i; @@ -562,6 +572,7 @@ Sector::draw(DrawingContext& context) object->draw(context); } +#endif context.pop_transform(); }