Skip to content
Permalink
Browse files
This time really fixed the Dungeon temple and portal behaviour.
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 f6211e515117017951a037b5355ee1accdc902f4
Showing with 52 additions and 5 deletions.
  1. +23 −2 source/RoomDungeonTemple.cpp
  2. +10 −3 source/RoomDungeonTemple.h
  3. +16 −0 source/RoomPortal.cpp
  4. +3 −0 source/RoomPortal.h
@@ -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();
}

@@ -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
@@ -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();
@@ -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();

0 comments on commit f6211e5

Please sign in to comment.