fix: game crash
This commit is contained in:
@@ -80,7 +80,7 @@ private:
|
||||
MobLevel m_Level;
|
||||
Direction m_Direction;
|
||||
std::vector<EffectDuration> m_Effects;
|
||||
const Tower* m_KillTower; // the tower that killed the mob
|
||||
const Tower* m_LastDamage; // the tower that damaged the mob
|
||||
|
||||
utils::Timer m_EffectFireTimer;
|
||||
utils::Timer m_EffectPoisonTimer;
|
||||
@@ -107,10 +107,9 @@ public:
|
||||
float getHealth() const { return m_Health; }
|
||||
bool isDead() const { return m_Health <= 0; }
|
||||
bool isAlive() const { return m_Health > 0; }
|
||||
const Tower* getKillTower() { return m_KillTower; }
|
||||
void setKillTower(const Tower* killTower) { m_KillTower = killTower; }
|
||||
const Tower* getLastDamageTower() { return m_LastDamage; }
|
||||
|
||||
void damage(float dmg) { m_Health -= dmg; }
|
||||
void damage(float dmg, const Tower* damager) { m_Health -= dmg; m_LastDamage = damager; }
|
||||
void heal(float heal) { m_Health = std::min((float)getStats()->getMaxLife(), m_Health + heal); }
|
||||
|
||||
float getX() const { return m_X; }
|
||||
|
||||
@@ -63,18 +63,12 @@ void Mob::updateEffects(std::uint64_t delta) {
|
||||
}
|
||||
if(hasEffect(EffectType::Fire)){
|
||||
if(m_EffectFireTimer.update(delta)){
|
||||
damage(3);
|
||||
if(isDead()){
|
||||
setKillTower(getEffect(EffectType::Fire).tower);
|
||||
}
|
||||
damage(3, getEffect(EffectType::Fire).tower);
|
||||
}
|
||||
}
|
||||
if(hasEffect(EffectType::Poison)){
|
||||
if(m_EffectPoisonTimer.update(delta)){
|
||||
damage(1);
|
||||
if(isDead()){
|
||||
setKillTower(getEffect(EffectType::Poison).tower);
|
||||
}
|
||||
damage(3, getEffect(EffectType::Poison).tower);
|
||||
}
|
||||
}
|
||||
if(hasEffect(EffectType::Heal)){
|
||||
|
||||
@@ -233,7 +233,7 @@ void IceTower::tick(std::uint64_t delta, World* world) {
|
||||
for (MobPtr mob : world->getMobList()) {
|
||||
if (isMobInRange(mob)) {
|
||||
mob->addEffect(EffectType::Slowness, 1, this); // slowness for 1s every second
|
||||
mob->damage(damage);
|
||||
mob->damage(damage, this);
|
||||
wasTowerActive = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,7 +251,7 @@ void World::cleanDeadMobs() {
|
||||
Player& sender = m_Game->getPlayerById(mob->getSender());
|
||||
sender.addExp(mob->getStats()->getExpReward());
|
||||
|
||||
Player& killer = m_Game->getPlayerById(mob->getKillTower()->getBuilder());
|
||||
Player& killer = m_Game->getPlayerById(mob->getLastDamageTower()->getBuilder());
|
||||
killer.addGold(mob->getStats()->getMoneyCost());
|
||||
|
||||
m_Mobs.erase(m_Mobs.begin() + i);
|
||||
@@ -287,9 +287,7 @@ void World::OnArrowShot(MobPtr target, Tower* shooter) {
|
||||
if (explosiveArrows) {
|
||||
// aoe damage
|
||||
} else {
|
||||
target->damage(shooter->getStats()->getDamage());
|
||||
if (target->isDead())
|
||||
target->setKillTower(shooter);
|
||||
target->damage(shooter->getStats()->getDamage(), shooter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user