CapersProject/Assets/02.Scripts/Character/Player/Combat/CombatPlayer.cs

219 lines
9.3 KiB
C#
Raw Normal View History

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();
InitializeChileComponents();
2024-06-03 18:26:03 +00:00
}
private void Start()
{
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>();
}
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);
GameManager.Instance.SetCurrentCombatPlayer(this);
}
#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
}
}