Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
|
|
@@ -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(); |
|
|
|
|
|
|