Skip to content

Commit

Permalink
This time really fixed the Dungeon temple and portal behaviour.
Browse files Browse the repository at this point in the history
Made the destruction of those rooms not crash the game anymore,
and their respective room objects not duplicated when being destroyed.
  • Loading branch information
Yohann Ferreira committed Jun 30, 2014
1 parent d674c94 commit f6211e5
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 5 deletions.
25 changes: 23 additions & 2 deletions source/RoomDungeonTemple.cpp
Expand Up @@ -25,16 +25,37 @@
#include "RoomObject.h"

RoomDungeonTemple::RoomDungeonTemple():
mWaitTurns(0)
mWaitTurns(0),
mTempleObject(NULL)
{
mType = dungeonTemple;
}

void RoomDungeonTemple::absorbRoom(Room* room)
{
Room::absorbRoom(room);

// Get back the temple mesh reference
if (!mRoomObjects.empty())
{
mTempleObject = mRoomObjects.begin()->second;
}
else
{
// Make sure the reference gets updated when createMesh() is called
mTempleObject = NULL;
}
}

void RoomDungeonTemple::createMesh()
{
Room::createMesh();

loadRoomObject("DungeonTempleObject");
// Don't recreate the portal if it's already done.
if (mTempleObject != NULL)
return;

mTempleObject = loadRoomObject("DungeonTempleObject");
createRoomObjectMeshes();
}

Expand Down
13 changes: 10 additions & 3 deletions source/RoomDungeonTemple.h
Expand Up @@ -28,14 +28,21 @@ class RoomDungeonTemple: public Room
void createMesh();
void destroyMesh();

//! \brief Get back a reference to the temple mesh after calling Room::absorbRoom()
void absorbRoom(Room* room);

/*! \brief Counts down a timer until it reaches 0,
* then it spawns a kobold of the color of this dungeon temple
* at the center of the dungeon temple, and resets the timer.
*/
* then it spawns a kobold of the color of this dungeon temple
* at the center of the dungeon temple, and resets the timer.
*/
void produceKobold();

private:
//! \brief The number of turns to wait before producing a worker
int mWaitTurns;

//! \brief The reference of the temple room object
RoomObject* mTempleObject;
};

#endif // ROOMDUNGEONTEMPLE_H
16 changes: 16 additions & 0 deletions source/RoomPortal.cpp
Expand Up @@ -39,6 +39,22 @@ RoomPortal::RoomPortal() :
mType = portal;
}

void RoomPortal::absorbRoom(Room* room)
{
Room::absorbRoom(room);

// Get back the portal mesh reference
if (!mRoomObjects.empty())
{
mPortalObject = mRoomObjects.begin()->second;
}
else
{
// Make sure the reference gets updated when createMesh() is called
mPortalObject = NULL;
}
}

void RoomPortal::createMesh()
{
Room::createMesh();
Expand Down
3 changes: 3 additions & 0 deletions source/RoomPortal.h
Expand Up @@ -34,6 +34,9 @@ class RoomPortal: public Room
void addCoveredTile(Tile* t, double nHP = defaultRoomTileHP);
void removeCoveredTile(Tile* t);

//! \brief Get back a reference to the portal mesh after calling Room::absorbRoom()
void absorbRoom(Room* room);

//! \brief In addition to the standard upkeep, check to see if a new creature should be spawned.
bool doUpkeep();

Expand Down

0 comments on commit f6211e5

Please sign in to comment.