mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-15 20:03:15 +02:00
Added more checks to avoid potential nullptr dereference crash
This commit is contained in:
@@ -131,7 +131,11 @@ std::vector<std::string> MapAudioPlayer::getAmbientSounds(const int3 & tile)
|
|||||||
{
|
{
|
||||||
const auto & object = CGI->mh->getMap()->objects[objectID.getNum()];
|
const auto & object = CGI->mh->getMap()->objects[objectID.getNum()];
|
||||||
|
|
||||||
if(object->getAmbientSound())
|
assert(object);
|
||||||
|
if (!object)
|
||||||
|
logGlobal->warn("Already removed object %d found on tile! (%d %d %d)", objectID.getNum(), tile.x, tile.y, tile.z);
|
||||||
|
|
||||||
|
if(object && object->getAmbientSound())
|
||||||
result.push_back(object->getAmbientSound().get());
|
result.push_back(object->getAmbientSound().get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,8 +198,10 @@ MapAudioPlayer::MapAudioPlayer()
|
|||||||
objects.resize(boost::extents[mapSize.z][mapSize.x][mapSize.y]);
|
objects.resize(boost::extents[mapSize.z][mapSize.x][mapSize.y]);
|
||||||
|
|
||||||
for(const auto & obj : CGI->mh->getMap()->objects)
|
for(const auto & obj : CGI->mh->getMap()->objects)
|
||||||
|
{
|
||||||
if (obj)
|
if (obj)
|
||||||
addObject(obj);
|
addObject(obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MapAudioPlayer::~MapAudioPlayer()
|
MapAudioPlayer::~MapAudioPlayer()
|
||||||
|
@@ -47,6 +47,10 @@ protected:
|
|||||||
void onAfterHeroEmbark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) override;
|
void onAfterHeroEmbark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) override;
|
||||||
void onAfterHeroDisembark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) override;
|
void onAfterHeroDisembark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) override;
|
||||||
|
|
||||||
|
void onBeforeHeroTeleported(const CGHeroInstance * obj, const int3 & from, const int3 & dest) override {}
|
||||||
|
void onBeforeHeroEmbark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) override {}
|
||||||
|
void onBeforeHeroDisembark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) override {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MapAudioPlayer();
|
MapAudioPlayer();
|
||||||
~MapAudioPlayer() override;
|
~MapAudioPlayer() override;
|
||||||
|
@@ -26,27 +26,27 @@ public:
|
|||||||
virtual bool hasOngoingAnimations() = 0;
|
virtual bool hasOngoingAnimations() = 0;
|
||||||
|
|
||||||
/// Plays fade-in animation and adds object to map
|
/// Plays fade-in animation and adds object to map
|
||||||
virtual void onObjectFadeIn(const CGObjectInstance * obj) {}
|
virtual void onObjectFadeIn(const CGObjectInstance * obj) = 0;
|
||||||
|
|
||||||
/// Plays fade-out animation and removed object from map
|
/// Plays fade-out animation and removed object from map
|
||||||
virtual void onObjectFadeOut(const CGObjectInstance * obj) {}
|
virtual void onObjectFadeOut(const CGObjectInstance * obj) = 0;
|
||||||
|
|
||||||
/// Adds object to map instantly, with no animation
|
/// Adds object to map instantly, with no animation
|
||||||
virtual void onObjectInstantAdd(const CGObjectInstance * obj) {}
|
virtual void onObjectInstantAdd(const CGObjectInstance * obj) = 0;
|
||||||
|
|
||||||
/// Removes object from map instantly, with no animation
|
/// Removes object from map instantly, with no animation
|
||||||
virtual void onObjectInstantRemove(const CGObjectInstance * obj) {}
|
virtual void onObjectInstantRemove(const CGObjectInstance * obj) = 0;
|
||||||
|
|
||||||
/// Perform hero movement animation, moving hero across terrain
|
/// Perform hero movement animation, moving hero across terrain
|
||||||
virtual void onHeroMoved(const CGHeroInstance * obj, const int3 & from, const int3 & dest) {}
|
virtual void onHeroMoved(const CGHeroInstance * obj, const int3 & from, const int3 & dest) = 0;
|
||||||
|
|
||||||
/// Perform initialization of hero teleportation animation with terrain fade animation
|
/// Perform initialization of hero teleportation animation with terrain fade animation
|
||||||
virtual void onBeforeHeroTeleported(const CGHeroInstance * obj, const int3 & from, const int3 & dest) {}
|
virtual void onBeforeHeroTeleported(const CGHeroInstance * obj, const int3 & from, const int3 & dest) = 0;
|
||||||
virtual void onAfterHeroTeleported(const CGHeroInstance * obj, const int3 & from, const int3 & dest) {}
|
virtual void onAfterHeroTeleported(const CGHeroInstance * obj, const int3 & from, const int3 & dest) = 0;
|
||||||
|
|
||||||
virtual void onBeforeHeroEmbark(const CGHeroInstance * obj, const int3 & from, const int3 & dest){};
|
virtual void onBeforeHeroEmbark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) = 0;
|
||||||
virtual void onAfterHeroEmbark(const CGHeroInstance * obj, const int3 & from, const int3 & dest){};
|
virtual void onAfterHeroEmbark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) = 0;
|
||||||
|
|
||||||
virtual void onBeforeHeroDisembark(const CGHeroInstance * obj, const int3 & from, const int3 & dest){};
|
virtual void onBeforeHeroDisembark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) = 0;
|
||||||
virtual void onAfterHeroDisembark(const CGHeroInstance * obj, const int3 & from, const int3 & dest){};
|
virtual void onAfterHeroDisembark(const CGHeroInstance * obj, const int3 & from, const int3 & dest) = 0;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user