OldBlueWater/BlueWater/Assets/02.Scripts/Character/CombatPlayer2D/CombatPlayer.cs
NTG f1d0c6d371 Closes #244, #254 CombatPlayer 개선, 하트 시스템 추가
+ CombatPlayer 기능별 분리
+ Combat, CombatUi 전용 input action map 추가
+ 스킬 시스템 로직 수정
+ 전투플레이어 스킬(검의 왈츠) 로직 변경
2024-05-08 00:37:33 +09:00

115 lines
4.6 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 spriteRenderer;
[SerializeField] private CombatInput input;
[SerializeField] private CombatMovement movement;
[SerializeField] private CombatAnimator animator;
[SerializeField] private CombatAttacker attacker;
[SerializeField] private CombatHealth health;
[SerializeField] private CombatSkillController skillController;
// 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.OnEndDash += skillController.HandleEnableSkill;
// 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.OnEndSkill += movement.HandleEnableMoveAndDash;
skillController.OnEndSkill += attacker.HandleEnableAttack;
}
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.OnEndDash -= skillController.HandleEnableSkill;
// 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.OnEndSkill -= movement.HandleEnableMoveAndDash;
skillController.OnEndSkill -= attacker.HandleDisableAttack;
}
// Init
[Button("셋팅 초기화")]
private void InitComponent()
{
col = GetComponent<Collider>();
rb = GetComponent<Rigidbody>();
playerInput = GetComponent<PlayerInput>();
visualLook = transform.Find("VisualLook");
anim = visualLook.GetComponent<Animator>();
spriteRenderer = visualLook.GetComponent<SpriteRenderer>();
input = GetComponent<CombatInput>();
movement = GetComponent<CombatMovement>();
animator = GetComponent<CombatAnimator>();
attacker = GetComponent<CombatAttacker>();
health = GetComponent<CombatHealth>();
skillController = GetComponent<CombatSkillController>();
input.InitComponent(playerInput);
movement.InitComponent(rb, visualLook);
animator.InitComponent(anim);
attacker.InitComponent(rb);
health.InitComponent(spriteRenderer);
skillController.InitComponent(col, rb, visualLook, anim);
}
}
}