#include "object/block.h"
#include "object/invisible_block.h"
#include "object/platform.h"
-#include "trigger/door.h"
#include "object/bullet.h"
#include "badguy/jumpy.h"
#include "badguy/snowball.h"
#include "badguy/mriceblock.h"
#include "badguy/mrbomb.h"
#include "badguy/dispenser.h"
+#include "badguy/spike.h"
+#include "badguy/nolok_01.h"
+#include "trigger/door.h"
#include "trigger/sequence_trigger.h"
#include "trigger/secretarea_trigger.h"
song_title = "Mortimers_chipdisko.mod";
player = new Player();
add_object(player);
+
+ printf("seccreated: %p.\n", this);
}
Sector::~Sector()
{
+ printf("secdel: %p.\n", this);
for(GameObjects::iterator i = gameobjects.begin(); i != gameobjects.end();
++i) {
delete *i;
}
GameObject*
-Sector::parseObject(const std::string& name, LispReader& reader)
+Sector::parse_object(const std::string& name, LispReader& reader)
{
if(name == "background") {
background = new Background(reader);
return background;
} else if(name == "camera") {
- if(camera) {
- std::cerr << "Warning: More than 1 camera defined in sector.\n";
- return 0;
- }
- camera = new Camera(this);
- camera->read(reader);
+ Camera* camera = new Camera(this);
+ camera->parse(reader);
return camera;
} else if(name == "tilemap") {
- TileMap* tilemap = new TileMap(reader);
-
- if(tilemap->is_solid()) {
- if(solids) {
- std::cerr << "Warning multiple solid tilemaps in sector.\n";
- return 0;
- }
- solids = tilemap;
- fix_old_tiles();
- }
- return tilemap;
+ return new TileMap(reader);
} else if(name == "particles-snow") {
SnowParticleSystem* partsys = new SnowParticleSystem();
partsys->parse(reader);
return new MrBomb(reader);
} else if(name == "dispenser") {
return new Dispenser(reader);
+ } else if(name == "spike") {
+ return new Spike(reader);
+ } else if(name == "nolok_01") {
+ return new Nolok_01(reader);
}
#if 0
else if(badguykind_from_string(name) != BAD_INVALID) {
reader.read_float("y", sp->pos.y);
spawnpoints.push_back(sp);
} else {
- GameObject* object = parseObject(token, reader);
+ GameObject* object = parse_object(token, reader);
if(object) {
add_object(object);
}
LispReader reader(lisp_cdr(data));
- GameObject* object = parseObject(object_type, reader);
+ GameObject* object = parse_object(object_type, reader);
if(object) {
add_object(object);
} else {
if(tile->id == 112) {
add_object(new InvisibleBlock(pos));
solids->change(x, y, 0);
+ } else if(tile->id == 295) {
+ add_object(new Spike(pos, Spike::NORTH));
+ solids->change(x, y, 0);
+ } else if(tile->id == 296) {
+ add_object(new Spike(pos, Spike::EAST));
+ solids->change(x, y, 0);
+ } else if(tile->id == 297) {
+ add_object(new Spike(pos, Spike::SOUTH));
+ solids->change(x, y, 0);
+ } else if(tile->id == 298) {
+ add_object(new Spike(pos, Spike::WEST));
+ solids->change(x, y, 0);
} else if(tile->attributes & Tile::COIN) {
add_object(new Coin(pos));
solids->change(x, y, 0);
std::remove(bullets.begin(), bullets.end(), bullet),
bullets.end());
}
-#if 0
- InteractiveObject* interactive_object =
- dynamic_cast<InteractiveObject*> (*i);
- if(interactive_object) {
- interactive_objects.erase(
- std::remove(interactive_objects.begin(), interactive_objects.end(),
- interactive_object), interactive_objects.end());
- }
-#endif
delete *i;
i = gameobjects.erase(i);
} else {
for(std::vector<GameObject*>::iterator i = gameobjects_new.begin();
i != gameobjects_new.end(); ++i)
{
- Bullet* bullet = dynamic_cast<Bullet*> (*i);
- if(bullet)
- bullets.push_back(bullet);
-#if 0
- InteractiveObject* interactive_object
- = dynamic_cast<InteractiveObject*> (*i);
- if(interactive_object)
- interactive_objects.push_back(interactive_object);
-#endif
+ Bullet* bullet = dynamic_cast<Bullet*> (*i);
+ if(bullet)
+ bullets.push_back(bullet);
+
+ TileMap* tilemap = dynamic_cast<TileMap*> (*i);
+ if(tilemap && tilemap->is_solid()) {
+ if(solids == 0) {
+ solids = tilemap;
+ fix_old_tiles();
+ } else {
+ std::cerr << "Another solid tilemaps added. Ignoring.";
+ }
+ }
- gameobjects.push_back(*i);
+ Camera* camera = dynamic_cast<Camera*> (*i);
+ if(camera) {
+ if(this->camera != 0) {
+ std::cerr << "Warning: Multiple cameras added. Ignoring.";
+ continue;
+ }
+ this->camera = camera;
+ }
+
+ gameobjects.push_back(*i);
}
gameobjects_new.clear();
}
AATriangle triangle;
Vector p1(x*32, y*32);
Vector p2((x+1)*32, (y+1)*32);
- switch(tile->data) {
- case 0:
- triangle = AATriangle(p1, p2, AATriangle::SOUTHWEST);
- break;
- case 1:
- triangle = AATriangle(p1, p2, AATriangle::NORTHEAST);
- break;
- case 2:
- triangle = AATriangle(p1, p2, AATriangle::SOUTHEAST);
- break;
- case 3:
- triangle = AATriangle(p1, p2, AATriangle::NORTHWEST);
- break;
- default:
- printf("Invalid slope angle in tile %d !\n", tile->id);
- break;
- }
+ triangle = AATriangle(p1, p2, tile->data);
if(Collision::rectangle_aatriangle(temphit, dest, object->movement,
triangle)) {