using System.Collections; using BlueWater.Items; using BlueWater.Maps; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Enemies.Bosses.Rhinoceros { public enum RhinocerosSkill { None = 0, BullCharge = 1, HammerSlam = 2, MeteorSwing = 3, SeismicThrust = 4, SkyFallSmash = 5 } public class Rhinoceros : AnimatorBoss { // Variables #region Variables [field: Title("Rhinoceros 컴포넌트")] public RhinocerosData RhinocerosData { get; private set; } public BossMapController BossMapController { get; private set; } #endregion // Initialize methods #region Initialize methods protected override void InitializeComponents() { base.InitializeComponents(); RhinocerosData = BossData as RhinocerosData; BossMapController = MapManager.Instance.RhinocerosMapController; } public override void Initialize() { StartCoroutine(InitializeCoroutine()); } private IEnumerator InitializeCoroutine() { BossHealthPoint.Initialize(true, RhinocerosData.MaxHealthPoint, RhinocerosData.DisplayName, BossMapController.ParticleInstanceLocation); BossSkillController.Initialize(BossData.SkillDataList); SetMoveSpeed(RhinocerosData.MoveSpeed); StopMove(); yield return IsInitialized; yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime)); BehaviorTree.EnableBehavior(); HitBoxCollider.enabled = true; } #endregion // Methods #region Methods protected override void Die() { StartCoroutine(DieCoroutine()); } private IEnumerator DieCoroutine() { BossSkillController.StopAllCoroutine(); BehaviorTree.DisableBehavior(); StopMove(); HitBoxCollider.enabled = false; if (Rigidbody) { Rigidbody.linearVelocity = Vector3.zero; Rigidbody.isKinematic = true; } AnimationController.SetAnimationTrigger("isDead"); BossMapController.ClearMap(gameObject); yield return new WaitUntil(() => AnimationController.GetCurrentAnimationNormalizedTime() >= 1f); yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime)); ItemManager.Instance.ItemDropRandomPosition(BossData.CharacterIdx, transform.position); Destroy(gameObject); } #endregion } }