DRHPS/code-csharp/en_US/Battle_PlayerSoul.cs
2025-04-08 11:31:35 +08:00

124 lines
3.0 KiB
C#

using System.Collections;
using UnityEngine;
public class Battle_PlayerSoul : MonoBehaviour
{
public enum SoulType
{
Red = 0,
Blue = 1,
Yellow = 2
}
public enum SoulState
{
Disabled = 0,
Active = 1,
Cutscene = 2
}
[Header("- References -")]
public Rigidbody2D SoulRigidbody;
public Animator SoulAnimator;
[SerializeField]
private AudioSource _soulSource;
[Space(5f)]
[Header("- Settings -")]
public SoulType CurrentSoulType;
public SoulState CurrentSoulState;
[SerializeField]
private float DefaultMoveSpeed;
[SerializeField]
private float DefaultSlowMoveSpeed;
private float CurrentSoulMoveSpeed;
public bool DamageCooldown;
private static Battle_PlayerSoul instance;
private Vector2 _StoredMoveDIR;
private bool HoldingSlowKey;
public static Battle_PlayerSoul Instance => instance;
private void Awake()
{
if (instance != null && instance != this)
{
Object.Destroy(base.gameObject);
return;
}
instance = this;
base.gameObject.SetActive(value: false);
}
private void OnEnable()
{
DamageCooldown = false;
instance.SoulAnimator.Play("Idle", 0, 0f);
}
private void Update()
{
ProcessInputs();
if (CurrentSoulState == SoulState.Active)
{
MoveSoul();
}
}
private void ProcessInputs()
{
float horizontalInput = PlayerInput.GetHorizontalInput();
float verticalInput = PlayerInput.GetVerticalInput();
_StoredMoveDIR = new Vector2(horizontalInput, verticalInput);
HoldingSlowKey = Input.GetKey(PlayerInput.Instance.Key_Sprint);
if (HoldingSlowKey)
{
CurrentSoulMoveSpeed = DefaultSlowMoveSpeed;
}
else
{
CurrentSoulMoveSpeed = DefaultMoveSpeed;
}
}
private void MoveSoul()
{
if (CurrentSoulState == SoulState.Active)
{
SoulRigidbody.velocity = new Vector2(_StoredMoveDIR.normalized.x * CurrentSoulMoveSpeed * Time.fixedDeltaTime, _StoredMoveDIR.normalized.y * CurrentSoulMoveSpeed * Time.fixedDeltaTime);
}
}
public static void OnSoulHit(Bullet_Generic bullet)
{
}
public static void TakeDamage(Bullet_Generic bullet = null, float amount = 0f)
{
if (Instance != null && !instance.DamageCooldown)
{
OnSoulHit(bullet);
instance.StartCoroutine("DamageCooldownFrames");
instance.SoulAnimator.Play("Hurt", 0, 0f);
instance._soulSource.PlayOneShot(BattleSystem.Instance.SFX_soul_damage);
}
}
private IEnumerator DamageCooldownFrames()
{
DamageCooldown = true;
yield return new WaitForSeconds(1.5f);
DamageCooldown = false;
}
}