diff --git a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetStateController.cs b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetStateController.cs index ca13447e34ba52d719d3a2632e6ebb3480bb5ce0..138a6e7c247756902439af30e2dada1e2a831224 100644 --- a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetStateController.cs +++ b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetStateController.cs @@ -10,6 +10,7 @@ public class AttackingPetStateController : PetStateController<AttackingPet> // Attributes public float followDistance = 6f; public float attackDistance = 3f; + public float maxDistFromOwner = 7f; [HideInInspector] public List<EnemyEntity> attackEnemies = new(); [HideInInspector] public List<EnemyEntity> followEnemies = new(); [HideInInspector] public EnemyEntity nearest; @@ -25,6 +26,13 @@ public class AttackingPetStateController : PetStateController<AttackingPet> // Functions protected override int DetectState() { + // Prevent from stucking in the same state + if (Vector3.Distance(pet.transform.position, pet.Owner.CompanionController.transform.position) > maxDistFromOwner) + { + state = AttackingPetState.AI_IDLE_STATE; + return AttackingPetState.AI_IDLE_STATE; + } + Collider[] attackCollider = Physics.OverlapSphere(pet.transform.position, attackDistance, enemyLayer); Collider[] followCollider = Physics.OverlapSphere(pet.transform.position, followDistance, enemyLayer); diff --git a/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs b/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs index c95dc498efbb98b8a0e548bd5a9c39c460cdcd28..5e8afa98129f52d8a6b00ed6df50cb4079c42f4a 100644 --- a/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs +++ b/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs @@ -157,7 +157,10 @@ public class PlayerEntity : CombatantEntity, IAccompaniable for (int i = 0; i < companionList.Count; i++) { - Destroy(companionList[i].gameObject); + Companion comp = companionList[i]; + companionList.RemoveAt(i); + companionActive.RemoveAt(i); + Destroy(comp.gameObject); } } }