using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.Serialization; // 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 combatStatus; // 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.OnEndDash += skillController.HandleEnableSkill; movement.OnEndDash += health.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.OnEndDash -= skillController.HandleEnableSkill; movement.OnEndDash -= health.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(); rb = GetComponent(); playerInput = GetComponent(); visualLook = transform.Find("VisualLook"); anim = visualLook.GetComponent(); flashWhiteSpriteRenderer = visualLook.GetComponent(); input = GetComponent(); movement = GetComponent(); animator = GetComponent(); attacker = GetComponent(); health = GetComponent(); skillController = GetComponent(); combatStatus = GetComponent(); input.InitComponent(playerInput); movement.InitComponent(rb, visualLook); animator.InitComponent(anim); attacker.InitComponent(rb); health.InitComponent(flashWhiteSpriteRenderer); skillController.InitComponent(col, rb, visualLook, anim); } } }