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(); rb = GetComponent(); playerInput = GetComponent(); visualLook = transform.Find("VisualLook"); anim = visualLook.GetComponent(); spriteRenderer = visualLook.GetComponent(); input = GetComponent(); movement = GetComponent(); animator = GetComponent(); attacker = GetComponent(); health = GetComponent(); skillController = GetComponent(); input.InitComponent(playerInput); movement.InitComponent(rb, visualLook); animator.InitComponent(anim); attacker.InitComponent(rb); health.InitComponent(spriteRenderer); skillController.InitComponent(col, rb, visualLook, anim); } } }