Deal with Creatures being deleted before a battle they're part of.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Signed-off-by: Deukhoofd <Deukhoofd@gmail.com>
This commit is contained in:
@@ -54,7 +54,7 @@ void BattleSide::SetCreature(ArbUt::OptionalBorrowedPtr<Creature> creature, uint
|
||||
if (old.HasValue()) {
|
||||
old.GetValue()->SetOnBattleField(false);
|
||||
}
|
||||
_creatures[index] = creature.GetValue();
|
||||
_creatures[index] = creature;
|
||||
if (!creature.HasValue()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ namespace CreatureLib::Battling {
|
||||
void SetChoice(BaseTurnChoice* choice);
|
||||
void ResetChoices() noexcept;
|
||||
|
||||
void ForceClearCreature(uint8_t index) { _creatures[index] = {}; }
|
||||
void SetCreature(ArbUt::OptionalBorrowedPtr<Creature> creature, uint8_t index);
|
||||
|
||||
const ArbUt::OptionalBorrowedPtr<Creature>& GetCreature(uint8_t index) const;
|
||||
|
||||
@@ -391,4 +391,10 @@ void CreatureLib::Battling::Creature::ClearStatus() {
|
||||
if (_battleData.Battle.HasValue()) {
|
||||
_battleData.Battle.GetValue()->TriggerEventListener<StatusChangeEvent>(this, ""_cnc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Battling::Creature::~Creature() {
|
||||
if (_battleData.OnBattleField && _battleData.Side.HasValue()) {
|
||||
_battleData.Side.GetValue()->ForceClearCreature(_battleData.Index.GetCreatureIndex());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace CreatureLib::Battling {
|
||||
const Library::TalentIndex& talent, const std::vector<LearnedAttack*>& attacks,
|
||||
bool allowedExperienceGain = true);
|
||||
|
||||
virtual ~Creature() = default;
|
||||
virtual ~Creature();
|
||||
|
||||
virtual void Initialize() {
|
||||
RecalculateFlatStats();
|
||||
|
||||
Reference in New Issue
Block a user