|
@@ -265,29 +265,33 @@ struct DLL_LINKAGE TeleportChannel
|
|
|
|
|
|
class DLL_LINKAGE CGTeleport : public CGObjectInstance
|
|
|
{
|
|
|
-public:
|
|
|
- enum EType {UNKNOWN, ENTRANCE, EXIT, BOTH};
|
|
|
+ bool isChannelEntrance(ObjectInstanceID id) const;
|
|
|
+ bool isChannelExit(ObjectInstanceID id) const;
|
|
|
|
|
|
+ std::vector<ObjectInstanceID> getAllEntrances(bool excludeCurrent = false) const;
|
|
|
+
|
|
|
+protected:
|
|
|
+ enum EType {UNKNOWN, ENTRANCE, EXIT, BOTH};
|
|
|
EType type;
|
|
|
- TeleportChannelID channel;
|
|
|
|
|
|
CGTeleport();
|
|
|
+ ObjectInstanceID getRandomExit(const CGHeroInstance * h) const;
|
|
|
+ std::vector<ObjectInstanceID> getAllExits(bool excludeCurrent = false) const;
|
|
|
+
|
|
|
+public:
|
|
|
+ TeleportChannelID channel;
|
|
|
+
|
|
|
bool isEntrance() const;
|
|
|
bool isExit() const;
|
|
|
- bool isChannelEntrance(ObjectInstanceID id) const;
|
|
|
- bool isChannelExit(ObjectInstanceID id) const;
|
|
|
- std::vector<ObjectInstanceID> getAllEntrances(bool excludeCurrent = false) const;
|
|
|
- std::vector<ObjectInstanceID> getAllExits(bool excludeCurrent = false) const;
|
|
|
- ObjectInstanceID getRandomExit(const CGHeroInstance * h) const;
|
|
|
|
|
|
virtual void teleportDialogAnswered(const CGHeroInstance *hero, ui32 answer, std::vector<ObjectInstanceID> exits) const = 0;
|
|
|
|
|
|
static bool isTeleport(const CGObjectInstance * dst);
|
|
|
static bool isConnected(const CGTeleport * src, const CGTeleport * dst);
|
|
|
static bool isConnected(const CGObjectInstance * src, const CGObjectInstance * dst);
|
|
|
- static bool isExitPassable(CGameState * gs, const CGHeroInstance * h, const CGObjectInstance * obj);
|
|
|
- static std::vector<ObjectInstanceID> getPassableExits(CGameState * gs, const CGHeroInstance * h, std::vector<ObjectInstanceID> exits);
|
|
|
static void addToChannel(std::map<TeleportChannelID, shared_ptr<TeleportChannel> > &channelsList, const CGTeleport * obj);
|
|
|
+ static std::vector<ObjectInstanceID> getPassableExits(CGameState * gs, const CGHeroInstance * h, std::vector<ObjectInstanceID> exits);
|
|
|
+ static bool isExitPassable(CGameState * gs, const CGHeroInstance * h, const CGObjectInstance * obj);
|
|
|
|
|
|
template <typename Handler> void serialize(Handler &h, const int version)
|
|
|
{
|
|
@@ -299,11 +303,12 @@ class DLL_LINKAGE CGMonolith : public CGTeleport
|
|
|
{
|
|
|
TeleportChannelID findMeChannel(std::vector<Obj> IDs, int SubID) const;
|
|
|
|
|
|
-public:
|
|
|
+protected:
|
|
|
void onHeroVisit(const CGHeroInstance * h) const override;
|
|
|
void teleportDialogAnswered(const CGHeroInstance *hero, ui32 answer, std::vector<ObjectInstanceID> exits) const override;
|
|
|
void initObj() override;
|
|
|
|
|
|
+public:
|
|
|
template <typename Handler> void serialize(Handler &h, const int version)
|
|
|
{
|
|
|
h & static_cast<CGTeleport&>(*this);
|
|
@@ -312,9 +317,10 @@ public:
|
|
|
|
|
|
class DLL_LINKAGE CGSubterraneanGate : public CGMonolith
|
|
|
{
|
|
|
-public:
|
|
|
void onHeroVisit(const CGHeroInstance * h) const override;
|
|
|
void initObj() override;
|
|
|
+
|
|
|
+public:
|
|
|
static void postInit();
|
|
|
|
|
|
template <typename Handler> void serialize(Handler &h, const int version)
|
|
@@ -325,11 +331,11 @@ public:
|
|
|
|
|
|
class DLL_LINKAGE CGWhirlpool : public CGMonolith
|
|
|
{
|
|
|
-public:
|
|
|
void onHeroVisit(const CGHeroInstance * h) const override;
|
|
|
void teleportDialogAnswered(const CGHeroInstance *hero, ui32 answer, std::vector<ObjectInstanceID> exits) const override;
|
|
|
static bool isProtected( const CGHeroInstance * h );
|
|
|
|
|
|
+public:
|
|
|
template <typename Handler> void serialize(Handler &h, const int version)
|
|
|
{
|
|
|
h & static_cast<CGMonolith&>(*this);
|