diff --git a/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs b/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs index 95fd2f60c536511509dd9fbd123655a69991de69..144f98d6c7a5eab36cc3617d9507a994281458a9 100644 --- a/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs +++ b/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs @@ -24,6 +24,7 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable else companionSelectorIndex = 0; } } + protected bool isStarted = false; // Functions @@ -36,6 +37,12 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable { CompanionActive.Add(false); } + + if (!isStarted) + { + ActivateAllCompanions(); + isStarted = true; + } } public void ActivateCompanion(int index) @@ -67,7 +74,7 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable selectedCompanion.gameObject.SetActive(true); - selectedCompanion.transform.position = transform.position - new Vector3((index + 1) * 1.2f, 0, 0); + selectedCompanion.spawnPosition = transform.position - new Vector3((index + 1) * 1.2f, 0, 0); companionActive[CompanionSelectorIndex] = true; selectedCompanion.Assign(this); } @@ -94,6 +101,14 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable Debug.Log($"Deactivating Companion {selectedCompanion.name}"); } + public void DeactivateAllCompanions() + { + for (int i = 0; i < companionList.Count; i++) + { + DeactivateCompanion(i); + } + } + public void AddCompanion(Companion companion) { CompanionList.Add(companion); @@ -105,4 +120,24 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable CompanionActive.RemoveAt(index); CompanionList.RemoveAt(index); } + + protected void OnEnable() + { + Debug.Log("OnEnable: Enabling all companions. isStarted: " + isStarted); + + if (isStarted) + { + ActivateAllCompanions(); + } + } + + protected void OnDisable() + { + Debug.Log("OnDisable: Disabling all companions. isStarted: " + isStarted); + + if (isStarted) + { + DeactivateAllCompanions(); + } + } } diff --git a/Assets/_Scripts/Core/Entities/Mobs/General/General.cs b/Assets/_Scripts/Core/Entities/Mobs/General/General.cs index ed2fce4599263311054a64e18bbc77b587fb4f64..ddda91b9db8489d7b4bdcf554a58b0444889356d 100644 --- a/Assets/_Scripts/Core/Entities/Mobs/General/General.cs +++ b/Assets/_Scripts/Core/Entities/Mobs/General/General.cs @@ -30,7 +30,6 @@ public class General : BossEntity animationController.Init(this); EquipWeapon(0); - ActivateAllCompanions(); OnDeathEvent += OnDeath; StartCoroutine(DrainPlayerHealth()); diff --git a/Assets/_Scripts/Core/Entities/Mobs/King/King.cs b/Assets/_Scripts/Core/Entities/Mobs/King/King.cs index a8f2ddaebd98b139737c689de66bcf459e635f79..21ad2784c37a9dbd867a3dfb61b4fcabc5d559c1 100644 --- a/Assets/_Scripts/Core/Entities/Mobs/King/King.cs +++ b/Assets/_Scripts/Core/Entities/Mobs/King/King.cs @@ -36,7 +36,6 @@ public class King : BossEntity animationController.Init(this); EquipWeapon(0); - ActivateAllCompanions(); OnDeathEvent += OnDeath; StartCoroutine(SpawnGoons()); diff --git a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPet.cs b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPet.cs index 2ea46fbbb9145d0ca4cbb65305eb9331af41c6c2..3868f659bcd51863442b5b0fd771ea18d62cfea3 100644 --- a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPet.cs +++ b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPet.cs @@ -48,8 +48,10 @@ public class AttackingPet : Companion, IArmed EquipWeapon(); aiController.Init(this); - stateController.Init(this); + aiController.nav.enabled = false; + transform.position = spawnPosition; + stateController.Init(this); type = Type.DAMAGE; } diff --git a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetAIController.cs b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetAIController.cs index 72405acfa7ee28d1730947767e771427e96df2a1..a8e59ffdaebb4e642ae08a90cd9ca13588efd493 100644 --- a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetAIController.cs +++ b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetAIController.cs @@ -11,7 +11,7 @@ public class AttackingPetAIController : PetAIController<AttackingPet> if (currState == AttackingPetState.AI_ATTACK_STATE) { - Debug.Log($"{pet.id}: ATTACKING {pet.stateController.nearest.name}"); + // Debug.Log($"{pet.id}: ATTACKING {pet.stateController.nearest.name}"); pet.aiController.nav.stoppingDistance = 3; EnemyEntity target = pet.stateController.nearest; Quaternion targetAngle = LookToward(target.transform); @@ -22,14 +22,14 @@ public class AttackingPetAIController : PetAIController<AttackingPet> } else if (currState == AttackingPetState.AI_FOLLOW_STATE) { - Debug.Log($"{pet.id}: FOLLOWING {pet.stateController.nearest.name}"); + // Debug.Log($"{pet.id}: FOLLOWING {pet.stateController.nearest.name}"); pet.aiController.nav.stoppingDistance = 3; EnemyEntity target = pet.stateController.nearest; GoToward(target.transform); } else // AI_IDLE_STATE { - Debug.Log($"{pet.id}: IDLE"); + // Debug.Log($"{pet.id}: IDLE"); pet.aiController.nav.stoppingDistance = 1; LookToward(GameController.Instance.player.transform); GoToward(GameController.Instance.player.transform); diff --git a/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPet.cs b/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPet.cs index 3e298923003fee87c0a8ae58c6e7c9725563f502..f8c551e292b784861fbbe0b802dbff6596d6319d 100644 --- a/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPet.cs +++ b/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPet.cs @@ -24,6 +24,9 @@ public class BuffPet : Companion IncreaseDamage(); type = Type.INCREASE; + + aiController.nav.enabled = false; + transform.position = spawnPosition; } // Function @@ -107,6 +110,5 @@ public class BuffPet : Companion (Owner as BossEntity).companionActive.RemoveAt(index); Destroy(gameObject); - } } \ No newline at end of file diff --git a/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPetAIController.cs b/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPetAIController.cs index 90b4dacdb3f71c6af3b069fca2fb6acde71ddac5..1decd102c51547c46b925f5bcec1b06b3928eb38 100644 --- a/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPetAIController.cs +++ b/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPetAIController.cs @@ -12,12 +12,14 @@ public class BuffPetAIController : PetAIController<BuffPet> if (currState == BuffPetState.AI_AVOID_STATE) { // Get allowed farthest point from owner + // Debug.Log($"{pet.id}: AI_AVOID_STATE"); Vector3 direction = MathUtils.GetDirectionVectorFlat(GameController.Instance.player.transform.position, pet.Owner.CompanionController.transform.position); Vector3 to = pet.Owner.CompanionController.transform.position - Vector3.Normalize(direction) * pet.stateController.maxDistFromOwner; GoToward(to); } else // AI_IDLE_STATE { + // Debug.Log($"{pet.id}: IDLE"); GoToward(pet.Owner.CompanionController.transform); } } diff --git a/Assets/_Scripts/Core/Entities/Pets/Companion.cs b/Assets/_Scripts/Core/Entities/Pets/Companion.cs index 4b3fd5265e470ea1c1a6c853753a801388ae6238..8b57b42cdb3387be1b751375d5bbb5faa1602d71 100644 --- a/Assets/_Scripts/Core/Entities/Pets/Companion.cs +++ b/Assets/_Scripts/Core/Entities/Pets/Companion.cs @@ -16,6 +16,7 @@ public abstract class Companion : DamageableEntity public CompanionData data; public Type type; + public Vector3 spawnPosition; public static string GetCompanionTypeNameFromEnum(Type type) { diff --git a/Assets/_Scripts/Core/Entities/Pets/HealingPet/HealingPet.cs b/Assets/_Scripts/Core/Entities/Pets/HealingPet/HealingPet.cs index 1e5f0e63cfc4e6f39700b99c804d1ef09947a37b..9c16f48158ee79c2f1b7f37fa5da19840416aa08 100644 --- a/Assets/_Scripts/Core/Entities/Pets/HealingPet/HealingPet.cs +++ b/Assets/_Scripts/Core/Entities/Pets/HealingPet/HealingPet.cs @@ -28,6 +28,8 @@ public class HealingPet : Companion OnHealOwnerEvent += Heal; aiController.Init(this); + aiController.nav.enabled = false; + transform.position = spawnPosition; } // Function diff --git a/Assets/_Scripts/Core/Entities/Pets/PetAIController.cs b/Assets/_Scripts/Core/Entities/Pets/PetAIController.cs index f80cc64f8136785436497a86d82567e0383e02f3..03975f21c8e729f3965a20ad2f055a90df728931 100644 --- a/Assets/_Scripts/Core/Entities/Pets/PetAIController.cs +++ b/Assets/_Scripts/Core/Entities/Pets/PetAIController.cs @@ -35,17 +35,28 @@ public abstract class PetAIController<T> where T : Companion public void GoToward(Transform target) { + if (!nav.enabled) + { + nav.enabled = true; + } nav.destination = target.position; } public void GoToward(Vector3 position) { + if (!nav.enabled) + { + nav.enabled = true; + } nav.destination = position; } private void OnDamaged() { - nav.velocity = Vector3.zero; + if (nav.enabled) + { + nav.velocity = Vector3.zero; + } } private void OnDeath() diff --git a/Assets/_Scripts/Core/Player/Player.cs b/Assets/_Scripts/Core/Player/Player.cs index 4c1c6997cc3032223308550f6dffd58f65e60b88..24e9aa5eccef2e0affe4e347b0c879753aa1bce6 100644 --- a/Assets/_Scripts/Core/Player/Player.cs +++ b/Assets/_Scripts/Core/Player/Player.cs @@ -175,12 +175,18 @@ public class Player : PlayerEntity if (companion is AttackingPet) { - (companion as AttackingPet).aiController.nav.Warp(destination); + AttackingPet comp = companion as AttackingPet; + comp.aiController.nav.enabled = false; + comp.transform.position = destination; + comp.aiController.nav.enabled = true; } if (companion is HealingPet) { - (companion as HealingPet).aiController.nav.Warp(destination); + HealingPet comp = companion as HealingPet; + comp.aiController.nav.enabled = false; + comp.transform.position = destination; + comp.aiController.nav.enabled = true; } } } diff --git a/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs b/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs index 3c681fe2b392a2f4a4b099463ddcc80854f4e53c..c95dc498efbb98b8a0e548bd5a9c39c460cdcd28 100644 --- a/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs +++ b/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs @@ -73,7 +73,7 @@ public class PlayerEntity : CombatantEntity, IAccompaniable selectedCompanion.gameObject.SetActive(true); - selectedCompanion.transform.position = transform.position - new Vector3((index + 1) * 1.2f, 0, 0); + selectedCompanion.spawnPosition = transform.position - new Vector3((index + 1) * 1.2f, 0, 0); companionActive[CompanionSelectorIndex] = true; selectedCompanion.Assign(this); }