78 lines
1.9 KiB
C#
78 lines
1.9 KiB
C#
using OctoberStudio.Easing;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
namespace OctoberStudio.Enemy
|
|
{
|
|
public class EarthSpikeBehavior : SimpleEnemyProjectileBehavior
|
|
{
|
|
private static readonly int HIDE_TRIGGER = Animator.StringToHash("Hide");
|
|
|
|
[SerializeField] Animator animator;
|
|
[SerializeField] SpriteRenderer visuals;
|
|
[SerializeField] Collider2D spikeCollider;
|
|
[SerializeField] ParticleSystem particle;
|
|
|
|
bool isHiding = false;
|
|
|
|
private WarningCircleBehavior warningCircle;
|
|
|
|
public event UnityAction<EarthSpikeBehavior> onHidden;
|
|
|
|
public float Lifetime { get; private set; }
|
|
|
|
public void Spawn(float lifetime)
|
|
{
|
|
visuals.enabled = false;
|
|
spikeCollider.enabled = false;
|
|
|
|
warningCircle = StageController.PoolsManager.GetEntity<WarningCircleBehavior>("Warning Circle");
|
|
|
|
warningCircle.transform.position = transform.position;
|
|
|
|
warningCircle.Play(1f, 0.3f, 0.3f, ShowVisuals);
|
|
|
|
isHiding = false;
|
|
|
|
Lifetime = lifetime;
|
|
}
|
|
|
|
private void ShowVisuals()
|
|
{
|
|
visuals.enabled = true;
|
|
spikeCollider.enabled = true;
|
|
|
|
animator.Rebind();
|
|
animator.Update(0);
|
|
|
|
particle.Play();
|
|
|
|
if (Lifetime > 0)
|
|
{
|
|
EasingManager.DoAfter(Lifetime, Hide);
|
|
}
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
warningCircle.gameObject.SetActive(false);
|
|
gameObject.SetActive(false);
|
|
}
|
|
|
|
public void Hide()
|
|
{
|
|
animator.SetTrigger(HIDE_TRIGGER);
|
|
|
|
isHiding = true;
|
|
}
|
|
|
|
public void OnHidden()
|
|
{
|
|
if(isHiding)
|
|
{
|
|
onHidden?.Invoke(this);
|
|
gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
} |