using System.Collections; using BlueWater.Audios; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Enemies.Bosses.SandMole { public class MiniSandMole : SandMole { // Variables #region Variables [Title("효과")] [SerializeField] private float _spawnDissolveTime = 2f; //[SerializeField] //private float _dieDissolveTime = 1f; // Hashes private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue"); #endregion // Initialize methods #region Initialize methods public override void Initialize() { StartCoroutine(InitializeCoroutine()); } #endregion // Methods #region Methods private IEnumerator InitializeCoroutine() { HitBoxCollider.enabled = false; BossHealthPoint.Initialize(false, BossData.MaxHealthPoint, BossData.DisplayName, SandMoleMapController.ParticleInstanceLocation); BossSkillController.Initialize(BossData.SkillDataList); SetMoveSpeed(SandMoleData.MoveSpeed); StopMove(); MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f); MeshRenderer.SetPropertyBlock(MaterialPropertyBlock); var elapsedTime = 0f; while (elapsedTime <= _spawnDissolveTime) { if (CurrentHealthPoint == 0) yield break; var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime); MaterialPropertyBlock.SetFloat(_dissolveValueHash, value); MeshRenderer.SetPropertyBlock(MaterialPropertyBlock); elapsedTime += Time.deltaTime; yield return null; } MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f); MeshRenderer.SetPropertyBlock(MaterialPropertyBlock); SpineController.SetSkin(SandMoleSkin.Normal.ToString()); var isRoar = false; var roarTrack = SpineController.PlayAnimation(SandMoleAnimation.Roar.ToString(), false); while (!roarTrack.IsComplete) { if (CurrentHealthPoint == 0) yield break; if (roarTrack.TrackTime >= 1f && !isRoar) { AudioManager.Instance.PlaySfx("MiniSandMoleCry"); isRoar = true; } yield return null; } BehaviorTree.EnableBehavior(); HitBoxCollider.enabled = true; } protected override async void Die() { BossSkillController.StopAllCoroutine(); SandMoleStatus.StopAllCoroutine(); BehaviorTree.DisableBehavior(); StopMove(); HitBoxCollider.enabled = false; if (Rigidbody) { Rigidbody.linearVelocity = Vector3.zero; Rigidbody.isKinematic = true; } SpineController.SetSkin(SandMoleSkin.Idle.ToString()); var dieTrack = SpineController.PlayAnimation(SandMoleAnimation.Die.ToString(), false); await SpineController.WaitForAnimationCompletion(dieTrack); Destroy(gameObject); } #endregion } }