mirror of
https://github.com/vcmi/vcmi.git
synced 2025-04-11 11:31:52 +02:00
Added more checks to avoid potential nullptr dereference crash
This commit is contained in:
parent
5288e3761e
commit
339bbce7b7
@ -131,7 +131,11 @@ std::vector<std::string> MapAudioPlayer::getAmbientSounds(const int3 & tile)
|
||||
{
|
||||
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());
|
||||
}
|
||||
|
||||
@ -194,8 +198,10 @@ MapAudioPlayer::MapAudioPlayer()
|
||||
objects.resize(boost::extents[mapSize.z][mapSize.x][mapSize.y]);
|
||||
|
||||
for(const auto & obj : CGI->mh->getMap()->objects)
|
||||
{
|
||||
if (obj)
|
||||
addObject(obj);
|
||||
}
|
||||
}
|
||||
|
||||
MapAudioPlayer::~MapAudioPlayer()
|
||||
|
@ -47,6 +47,10 @@ protected:
|
||||
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 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:
|
||||
MapAudioPlayer();
|
||||
~MapAudioPlayer() override;
|
||||
|
@ -26,27 +26,27 @@ public:
|
||||
virtual bool hasOngoingAnimations() = 0;
|
||||
|
||||
/// 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
|
||||
virtual void onObjectFadeOut(const CGObjectInstance * obj) {}
|
||||
virtual void onObjectFadeOut(const CGObjectInstance * obj) = 0;
|
||||
|
||||
/// 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
|
||||
virtual void onObjectInstantRemove(const CGObjectInstance * obj) {}
|
||||
virtual void onObjectInstantRemove(const CGObjectInstance * obj) = 0;
|
||||
|
||||
/// 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
|
||||
virtual void onBeforeHeroTeleported(const CGHeroInstance * obj, const int3 & from, const int3 & dest) {}
|
||||
virtual void onAfterHeroTeleported(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) = 0;
|
||||
|
||||
virtual void onBeforeHeroEmbark(const CGHeroInstance * obj, const int3 & from, const int3 & dest){};
|
||||
virtual void onAfterHeroEmbark(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) = 0;
|
||||
|
||||
virtual void onBeforeHeroDisembark(const CGHeroInstance * obj, const int3 & from, const int3 & dest){};
|
||||
virtual void onAfterHeroDisembark(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) = 0;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user