OldBlueWater/BlueWater/Assets/02.Scripts/Character/CombatPlayer2D/CombatSkillController.cs
NTG 7a2b5e9d02 Closes #255 거대 슬라임 보스 추가
+ UiManager의 CombatUi, OceanUi 모두 분리
각각의 씬에서 CombatUiManager, OceanUiManager로 변경
+ Ocean, OceanUi input action map 추가 및 변경
input action map, uiManager 변경에 따른 Player input 로직 변경
+ CombatPlayer가 죽으면 GameOverUi 추가
+ 재시작 기능 추가
+ 인벤토리 Ui 수정
+ 슬라임 보스 로직 및 애니메이션 수정
2024-05-12 06:29:16 +09:00

99 lines
2.9 KiB
C#

using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class CombatSkillController : MonoBehaviour
{
// Components
[SerializeField] private BaseSkill mainSkill;
private BaseSkill instantiateMainSkill;
private Collider col;
private Rigidbody rb;
private Transform visualLook;
private Animator anim;
// Interfaces
private IMeleeComboAttackable iMeleeComboAttackable;
// Variables
private bool enableSkill = true;
private bool isActivatingSkill;
// Events
public delegate void StartSkillEvent();
public event StartSkillEvent OnStartSkill;
public delegate void EndSkillEvent();
public event EndSkillEvent OnEndSkill;
// Unity events
private void Start()
{
iMeleeComboAttackable = GetComponent<IMeleeComboAttackable>();
InitSkill();
}
// Init methods
public void InitComponent(Collider collider, Rigidbody rigidbody, Transform visualLook, Animator animator)
{
col = collider;
rb = rigidbody;
this.visualLook = visualLook;
anim = animator;
}
private void InitSkill()
{
instantiateMainSkill = Instantiate(mainSkill);
if (instantiateMainSkill == null) return;
var targetLayer = iMeleeComboAttackable.TargetLayer;
var ui = CombatUiManager.Inst.MainSkillUi;
ui.gameObject.SetActive(true);
instantiateMainSkill.SkillInputData.InitInputData(transform, col, rb, null, visualLook, anim, null, targetLayer, ui);
}
// Events methods
public void HandleEnableSkill() => enableSkill = true;
public void HandleDisableSkill() => enableSkill = false;
public void HandleMainSkill()
{
if (!CanSkill()) return;
StartSkill();
instantiateMainSkill.ActivateSkill(EndSkill);
}
// Methods
private bool CanSkill()
{
if (!enableSkill || isActivatingSkill) return false;
instantiateMainSkill.SkillInputData.StartPosition = rb.position;
var enableMainSkill = instantiateMainSkill.EnableSkill();
return enableMainSkill;
}
private void StartSkill()
{
// 이동, 공격, 대쉬 X 이벤트
OnStartSkill?.Invoke();
enableSkill = false;
isActivatingSkill = true;
rb.velocity = Vector3.zero;
}
private void EndSkill()
{
// 이동, 공격, 대쉬 O 이벤트
OnEndSkill?.Invoke();
enableSkill = true;
isActivatingSkill = false;
}
}
}