#include "app/globals.h"
#include "sector.h"
+#include "player_status.h"
#include "object/gameobjs.h"
#include "object/camera.h"
#include "object/background.h"
#include "badguy/spike.h"
#include "trigger/sequence_trigger.h"
+//#define USE_GRID
+
Sector* Sector::_current = 0;
Sector::Sector()
add_object(new Brick(pos, tile->getData()));
solids->change(x, y, 0);
} else if(tile->getAttributes() & Tile::GOAL) {
- add_object(new SequenceTrigger(pos, "endsequence"));
+ std::string sequence = tile->getData() == 0 ? "endsequence" : "stoptux";
+ add_object(new SequenceTrigger(pos, sequence));
solids->change(x, y, 0);
}
}
void
Sector::activate(const std::string& spawnpoint)
{
+ SpawnPoint* sp = 0;
+ for(SpawnPoints::iterator i = spawnpoints.begin(); i != spawnpoints.end();
+ ++i) {
+ if((*i)->name == spawnpoint) {
+ sp = *i;
+ break;
+ }
+ }
+ if(!sp) {
+ std::cerr << "Spawnpoint '" << spawnpoint << "' not found.\n";
+ if(spawnpoint != "main") {
+ activate("main");
+ } else {
+ activate(Vector(0, 0));
+ }
+ } else {
+ activate(sp->pos);
+ }
+}
+
+void
+Sector::activate(const Vector& player_pos)
+{
_current = this;
// Apply bonuses from former levels
- switch (player_status.bonus)
- {
+ switch (player_status.bonus) {
case PlayerStatus::NO_BONUS:
break;
case PlayerStatus::GROWUP_BONUS:
player->grow(false);
break;
- }
- SpawnPoint* sp = 0;
- for(SpawnPoints::iterator i = spawnpoints.begin(); i != spawnpoints.end();
- ++i) {
- if((*i)->name == spawnpoint) {
- sp = *i;
+ default:
+ std::cerr << "Unknown bonus in PlayerStatus?!?\n";
break;
- }
- }
- if(!sp) {
- std::cerr << "Spawnpoint '" << spawnpoint << "' not found.\n";
- } else {
- player->move(sp->pos);
}
+ player->move(player_pos);
camera->reset(player->get_pos());
}
-Vector
-Sector::get_best_spawn_point(Vector pos)
-{
- Vector best_reset_point = Vector(-1,-1);
-
- for(SpawnPoints::iterator i = spawnpoints.begin(); i != spawnpoints.end();
- ++i) {
- if((*i)->name != "main")
- continue;
- if((*i)->pos.x > best_reset_point.x && (*i)->pos.x < pos.x)
- best_reset_point = (*i)->pos;
- }
-
- return best_reset_point;
-}
-
Rectangle
Sector::get_active_region()
{
void
Sector::collision_handler()
{
-#if 0
+#ifdef USE_GRID
grid->check_collisions();
#else
for(std::vector<GameObject*>::iterator i = gameobjects.begin();
bool
Sector::add_bullet(const Vector& pos, float xm, Direction dir)
{
+ // TODO remove this function and move these checks elsewhere...
+ static const size_t MAX_FIRE_BULLETS = 2;
+ static const size_t MAX_ICE_BULLETS = 1;
+
if(player->got_power == Player::FIRE_POWER) {
if(bullets.size() > MAX_FIRE_BULLETS-1)
return false;
Sector::get_total_badguys()
{
int total_badguys = 0;
-#if 0
- for(GameObjects::iterator i = gameobjects_new.begin(); i != gameobjects_new.end(); ++i)
- {
+ for(GameObjects::iterator i = gameobjects.begin();
+ i != gameobjects.end(); ++i) {
BadGuy* badguy = dynamic_cast<BadGuy*> (*i);
if(badguy)
total_badguys++;
- }
-#endif
+ }
+
return total_badguys;
}