2024-06-03 18:26:03 +00:00
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.InputSystem;
|
|
|
|
|
|
|
|
namespace BlueWater.Players.Combat
|
|
|
|
{
|
|
|
|
public class CombatPlayer : MonoBehaviour
|
|
|
|
{
|
|
|
|
// Variables
|
|
|
|
#region Variables
|
|
|
|
|
|
|
|
// Components
|
|
|
|
[field: SerializeField]
|
|
|
|
public Rigidbody Rigidbody { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public CapsuleCollider CharacterCollider { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public PlayerInput PlayerInput { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public Transform VisualLook { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public BoxCollider HitBoxCollider { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public SpriteRenderer SpriteRenderer { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public Animator Animator { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public CombatInput CombatInput { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public CombatMovement CombatMovement { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public AnimationController AnimationController { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public CombatAttacker CombatAttacker { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public PlayerHealthPoint PlayerHealthPoint { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public CombatSkillController CombatSkillController { get; private set; }
|
|
|
|
|
|
|
|
[field: SerializeField]
|
|
|
|
public CombatStatus CombatStatus { get; private set; }
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
// Unity events
|
|
|
|
#region Unity events
|
|
|
|
|
|
|
|
private void Awake()
|
|
|
|
{
|
|
|
|
InitializeComponents();
|
2024-06-04 13:15:14 +00:00
|
|
|
InitializeChileComponents();
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void Start()
|
|
|
|
{
|
2024-06-07 17:31:08 +00:00
|
|
|
if (!GameManager.Instance.CurrentCombatPlayer)
|
|
|
|
{
|
|
|
|
GameManager.Instance.SetCurrentCombatPlayer(this);
|
|
|
|
}
|
|
|
|
|
2024-06-03 18:26:03 +00:00
|
|
|
SubscribeEvents();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnDestroy()
|
|
|
|
{
|
|
|
|
UnSubscribeEvents();
|
|
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
// Initialize methods
|
|
|
|
#region Initialize methods
|
|
|
|
|
|
|
|
[Button("컴포넌트 초기화")]
|
|
|
|
private void InitializeComponents()
|
|
|
|
{
|
|
|
|
Rigidbody = GetComponent<Rigidbody>();
|
|
|
|
CharacterCollider = GetComponent<CapsuleCollider>();
|
|
|
|
PlayerInput = GetComponent<PlayerInput>();
|
|
|
|
VisualLook = transform.Find("VisualLook");
|
|
|
|
SpriteRenderer = VisualLook.GetComponent<SpriteRenderer>();
|
|
|
|
Animator = VisualLook.GetComponent<Animator>();
|
|
|
|
HitBoxCollider = transform.Find("HitBox").GetComponent<BoxCollider>();
|
|
|
|
|
|
|
|
CombatInput = GetComponent<CombatInput>();
|
|
|
|
CombatMovement = GetComponent<CombatMovement>();
|
|
|
|
AnimationController = GetComponent<AnimationController>();
|
|
|
|
CombatAttacker = GetComponent<CombatAttacker>();
|
|
|
|
PlayerHealthPoint = GetComponent<PlayerHealthPoint>();
|
|
|
|
CombatSkillController = GetComponent<CombatSkillController>();
|
|
|
|
CombatStatus = GetComponent<CombatStatus>();
|
2024-06-04 13:15:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void InitializeChileComponents()
|
|
|
|
{
|
2024-06-03 18:26:03 +00:00
|
|
|
CombatInput.InitializeComponents(PlayerInput);
|
|
|
|
CombatMovement.InitializeComponents(Rigidbody, VisualLook, AnimationController);
|
|
|
|
AnimationController.InitializeComponents(Animator);
|
|
|
|
CombatAttacker.InitializeComponents(Rigidbody, AnimationController, CombatMovement);
|
|
|
|
PlayerHealthPoint.InitializeComponents(SpriteRenderer);
|
|
|
|
CombatStatus.InitializeComponents(SpriteRenderer);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
// Methods
|
|
|
|
#region Methods
|
|
|
|
|
|
|
|
private void SubscribeEvents()
|
|
|
|
{
|
|
|
|
// Input
|
|
|
|
CombatInput.OnMoveInputReceived += CombatMovement.HandleInputMovement;
|
|
|
|
CombatInput.OnDashInputReceived += CombatMovement.HandleDash;
|
|
|
|
CombatInput.OnAttackInputReceived += CombatAttacker.HandleAttack;
|
|
|
|
CombatInput.OnActivateMainSkillInputReceived += CombatSkillController.HandleMainSkill;
|
|
|
|
|
|
|
|
// Movement
|
|
|
|
CombatMovement.OnStartDash += CombatAttacker.HandleDashInAttack;
|
|
|
|
CombatMovement.OnStartDash += CombatSkillController.HandleDisableSkill;
|
|
|
|
CombatMovement.OnStartDash += PlayerHealthPoint.HandleDisableTakeDamage;
|
|
|
|
CombatMovement.OnStartDash += CombatStatus.HandleCanNotApplyStatusEffect;
|
|
|
|
|
|
|
|
CombatMovement.OnEndDash += CombatSkillController.HandleEnableSkill;
|
|
|
|
CombatMovement.OnEndDash += PlayerHealthPoint.HandleEnableTakeDamage;
|
|
|
|
CombatMovement.OnEndDash += CombatStatus.HandleCanApplyStatusEffect;
|
|
|
|
|
|
|
|
// Attacker
|
|
|
|
CombatAttacker.OnStartAttack += CombatMovement.HandleAttackInDash;
|
|
|
|
CombatAttacker.OnStartAttack += CombatMovement.HandleDisableMove;
|
|
|
|
CombatAttacker.OnStartAttack += CombatSkillController.HandleDisableSkill;
|
|
|
|
|
|
|
|
CombatAttacker.OnEndAttack += CombatMovement.HandleEnableMove;
|
|
|
|
CombatAttacker.OnEndAttack += CombatSkillController.HandleEnableSkill;
|
|
|
|
|
|
|
|
// SkillController
|
|
|
|
CombatSkillController.OnStartSkill += CombatMovement.HandleDisableMoveAndDash;
|
|
|
|
CombatSkillController.OnStartSkill += CombatAttacker.HandleDisableAttack;
|
|
|
|
CombatSkillController.OnStartSkill += PlayerHealthPoint.HandleDisableTakeDamage;
|
|
|
|
|
|
|
|
CombatSkillController.OnEndSkill += CombatMovement.HandleEnableMoveAndDash;
|
|
|
|
CombatSkillController.OnEndSkill += CombatAttacker.HandleEnableAttack;
|
|
|
|
CombatSkillController.OnEndSkill += PlayerHealthPoint.HandleEnableTakeDamage;
|
|
|
|
|
|
|
|
// Status
|
|
|
|
CombatStatus.OnStartStun += CombatMovement.HandleDisableMoveAndDash;
|
|
|
|
CombatStatus.OnStartStun += CombatAttacker.HandleDisableAttack;
|
|
|
|
CombatStatus.OnStartStun += CombatSkillController.HandleDisableSkill;
|
|
|
|
|
|
|
|
CombatStatus.OnEndStun += CombatMovement.HandleEnableMoveAndDash;
|
|
|
|
CombatStatus.OnEndStun += CombatAttacker.HandleEnableAttack;
|
|
|
|
CombatStatus.OnEndStun += CombatSkillController.HandleEnableSkill;
|
|
|
|
|
|
|
|
CombatStatus.OnStartSlowMoveSpeed += CombatMovement.HandleMoveSpeedCoefficient;
|
|
|
|
CombatStatus.OnEndSlowMoveSpeed += CombatMovement.HandleResetMoveSpeedCoefficient;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void UnSubscribeEvents()
|
|
|
|
{
|
|
|
|
// Input
|
|
|
|
CombatInput.OnMoveInputReceived -= CombatMovement.HandleInputMovement;
|
|
|
|
CombatInput.OnDashInputReceived -= CombatMovement.HandleDash;
|
|
|
|
CombatInput.OnAttackInputReceived -= CombatAttacker.HandleAttack;
|
|
|
|
CombatInput.OnActivateMainSkillInputReceived -= CombatSkillController.HandleMainSkill;
|
|
|
|
|
|
|
|
// Movement
|
|
|
|
CombatMovement.OnStartDash -= CombatAttacker.HandleDashInAttack;
|
|
|
|
CombatMovement.OnStartDash -= CombatSkillController.HandleDisableSkill;
|
|
|
|
CombatMovement.OnStartDash -= PlayerHealthPoint.HandleDisableTakeDamage;
|
|
|
|
CombatMovement.OnStartDash -= CombatStatus.HandleCanNotApplyStatusEffect;
|
|
|
|
|
|
|
|
CombatMovement.OnEndDash -= CombatSkillController.HandleEnableSkill;
|
|
|
|
CombatMovement.OnEndDash -= PlayerHealthPoint.HandleEnableTakeDamage;
|
|
|
|
CombatMovement.OnEndDash -= CombatStatus.HandleCanApplyStatusEffect;
|
|
|
|
|
|
|
|
// Attacker
|
|
|
|
CombatAttacker.OnStartAttack -= CombatMovement.HandleAttackInDash;
|
|
|
|
CombatAttacker.OnStartAttack -= CombatMovement.HandleDisableMove;
|
|
|
|
CombatAttacker.OnStartAttack -= CombatSkillController.HandleDisableSkill;
|
|
|
|
|
|
|
|
CombatAttacker.OnEndAttack -= CombatMovement.HandleEnableMove;
|
|
|
|
CombatAttacker.OnEndAttack -= CombatSkillController.HandleEnableSkill;
|
|
|
|
|
|
|
|
// SkillController
|
|
|
|
CombatSkillController.OnStartSkill -= CombatMovement.HandleDisableMoveAndDash;
|
|
|
|
CombatSkillController.OnStartSkill -= CombatAttacker.HandleDisableAttack;
|
|
|
|
CombatSkillController.OnStartSkill -= PlayerHealthPoint.HandleDisableTakeDamage;
|
|
|
|
|
|
|
|
CombatSkillController.OnEndSkill -= CombatMovement.HandleEnableMoveAndDash;
|
|
|
|
CombatSkillController.OnEndSkill -= CombatAttacker.HandleEnableAttack;
|
|
|
|
CombatSkillController.OnEndSkill -= PlayerHealthPoint.HandleEnableTakeDamage;
|
|
|
|
|
|
|
|
// Status
|
|
|
|
CombatStatus.OnStartStun -= CombatMovement.HandleDisableMoveAndDash;
|
|
|
|
CombatStatus.OnStartStun -= CombatAttacker.HandleDisableAttack;
|
|
|
|
CombatStatus.OnStartStun -= CombatSkillController.HandleDisableSkill;
|
|
|
|
|
|
|
|
CombatStatus.OnEndStun -= CombatMovement.HandleEnableMoveAndDash;
|
|
|
|
CombatStatus.OnEndStun -= CombatAttacker.HandleEnableAttack;
|
|
|
|
CombatStatus.OnEndStun -= CombatSkillController.HandleEnableSkill;
|
|
|
|
|
|
|
|
CombatStatus.OnStartSlowMoveSpeed -= CombatMovement.HandleMoveSpeedCoefficient;
|
|
|
|
CombatStatus.OnEndSlowMoveSpeed -= CombatMovement.HandleResetMoveSpeedCoefficient;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Wrapping methods
|
|
|
|
public LayerMask TargetLayer => CombatAttacker.TargetLayer;
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|