OldBlueWater/BlueWater/Assets/02.Scripts/Character/CombatPlayer2D/CombatPlayer.cs

134 lines
5.7 KiB
C#

using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.InputSystem;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class CombatPlayer : MonoBehaviour
{
// Components
[SerializeField] private Collider col;
[SerializeField] private Rigidbody rb;
[SerializeField] private PlayerInput playerInput;
[SerializeField] private Transform visualLook;
[SerializeField] private Animator anim;
[SerializeField] private SpriteRenderer flashWhiteSpriteRenderer;
[SerializeField] private CombatInput input;
[SerializeField] private CombatMovement movement;
[SerializeField] private CombatAnimator animator;
[SerializeField] private CombatAttacker attacker;
[SerializeField] private CombatHealth health;
[SerializeField] private CombatSkillController skillController;
[SerializeField] private CombatStatus status;
// Unity events
private void Awake()
{
InitComponent();
}
private void Start()
{
// Input
input.OnMoveInputReceived += movement.HandleInputMovement;
input.OnDashInputReceived += movement.HandleDash;
input.OnAttackInputReceived += attacker.HandleAttack;
input.OnActivateMainSkillInputReceived += skillController.HandleMainSkill;
// Movement
movement.OnStartDash += skillController.HandleDisableSkill;
movement.OnStartDash += health.HandleDisableTakeDamage;
movement.OnStartDash += status.HandleDisableTakeDamage;
movement.OnEndDash += skillController.HandleEnableSkill;
movement.OnEndDash += health.HandleEnableTakeDamage;
movement.OnEndDash += status.HandleEnableTakeDamage;
// Attacker
attacker.OnAttackInDashing += movement.HandleAttackInDash;
attacker.OnStartAttack += movement.HandleDisableMove;
attacker.OnStartAttack += skillController.HandleDisableSkill;
attacker.OnEndAttack += movement.HandleEnableMove;
attacker.OnEndAttack += skillController.HandleEnableSkill;
// SkillController
skillController.OnStartSkill += movement.HandleDisableMoveAndDash;
skillController.OnStartSkill += attacker.HandleDisableAttack;
skillController.OnStartSkill += health.HandleDisableTakeDamage;
skillController.OnEndSkill += movement.HandleEnableMoveAndDash;
skillController.OnEndSkill += attacker.HandleEnableAttack;
skillController.OnEndSkill += health.HandleEnableTakeDamage;
}
private void OnDestroy()
{
// Input
input.OnMoveInputReceived -= movement.HandleInputMovement;
input.OnDashInputReceived -= movement.HandleDash;
input.OnAttackInputReceived -= attacker.HandleAttack;
input.OnActivateMainSkillInputReceived -= skillController.HandleMainSkill;
// Movement
movement.OnStartDash -= skillController.HandleDisableSkill;
movement.OnStartDash -= health.HandleDisableTakeDamage;
movement.OnStartDash -= status.HandleDisableTakeDamage;
movement.OnEndDash -= skillController.HandleEnableSkill;
movement.OnEndDash -= health.HandleEnableTakeDamage;
movement.OnEndDash -= status.HandleEnableTakeDamage;
// Attacker
attacker.OnAttackInDashing -= movement.HandleAttackInDash;
attacker.OnStartAttack -= movement.HandleDisableMove;
attacker.OnStartAttack -= skillController.HandleDisableSkill;
attacker.OnEndAttack -= movement.HandleEnableMove;
attacker.OnEndAttack -= skillController.HandleEnableSkill;
// SkillController
skillController.OnStartSkill -= movement.HandleDisableMoveAndDash;
skillController.OnStartSkill -= attacker.HandleEnableAttack;
skillController.OnStartSkill -= health.HandleDisableTakeDamage;
skillController.OnEndSkill -= movement.HandleEnableMoveAndDash;
skillController.OnEndSkill -= attacker.HandleDisableAttack;
skillController.OnEndSkill -= health.HandleEnableTakeDamage;
}
// Init
[Button("셋팅 초기화")]
private void InitComponent()
{
col = GetComponent<Collider>();
rb = GetComponent<Rigidbody>();
playerInput = GetComponent<PlayerInput>();
visualLook = transform.Find("VisualLook");
anim = visualLook.GetComponent<Animator>();
flashWhiteSpriteRenderer = visualLook.GetComponent<SpriteRenderer>();
input = GetComponent<CombatInput>();
movement = GetComponent<CombatMovement>();
animator = GetComponent<CombatAnimator>();
attacker = GetComponent<CombatAttacker>();
health = GetComponent<CombatHealth>();
skillController = GetComponent<CombatSkillController>();
status = GetComponent<CombatStatus>();
input.InitComponent(playerInput);
movement.InitComponent(rb, visualLook);
animator.InitComponent(anim);
attacker.InitComponent(rb);
health.InitComponent(flashWhiteSpriteRenderer);
skillController.InitComponent(col, rb, visualLook);
status.InitComponent(flashWhiteSpriteRenderer);
GameManager.Inst.CurrentCombatPlayer = this;
}
}
}