TowerDefenseGame/Assets/Scripts/Runtime/Characters/Player/Classes/MeleeFighterClass.cs

177 lines
4.1 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
public class MeleeFighterClass : ClassBase {
public MeleeFighterClass(Player player) : base(player) { }
private readonly int BladeVortex = Animator.StringToHash("BladeVortex");
private float BladeVortexSpeed = 0.4f;
private float ComboResetTime;
private float LastComboTime;
private bool ChargingAnAttack;
private float ChargeValue;
private bool AllowBladeVortex;
private AttackState CurrentState;
private enum AttackState {
None,
PhaseCleave,
DrainEdge,
Shockwave,
BladeVortex,
BasicAttack1,
BasicAttack2,
BasicAttack3,
ChargeSurgeA,
ChargeSurgeB,
KineticSurgeA,
KineticSurgeB,
}
override public void Tick() {
float timeElapsed = Time.time - LastComboTime;
switch (CurrentState) {
case AttackState.None:
return;
case AttackState.BasicAttack1:
AllowBladeVortex = timeElapsed <= 0.1f;
break;
case AttackState.ChargeSurgeA:
ChargingAnAttack = Input.GetMouseButton(0);
ChargeValue = timeElapsed;
if (!ChargingAnAttack) ChangeState(AttackState.KineticSurgeA);
break;
case AttackState.ChargeSurgeB:
ChargingAnAttack = Input.GetMouseButton(1);
ChargeValue = timeElapsed;
if (!ChargingAnAttack) ChangeState(AttackState.KineticSurgeB);
break;
}
if (!ChargingAnAttack && timeElapsed > ComboResetTime) {
Player.MoveSpeed = PlayerOriginalSpeed;
ChangeState(AttackState.None);
Player.SkillInUse = false;
}
}
override public void HandleLMB() {
Player.SkillInUse = true;
switch (CurrentState) {
case AttackState.None:
PlayerOriginalSpeed = Player.MoveSpeed;
if ((Time.time - Player.DashTime) <= 0.1f)
ChangeState(AttackState.PhaseCleave, 1.5f);
else if (Player.IsJumping)
ChangeState(AttackState.Shockwave, 0, 1.5f);
else
ChangeState(AttackState.BasicAttack1);
break;
case AttackState.BasicAttack1:
ChangeState(AttackState.BasicAttack2);
break;
case AttackState.BasicAttack2:
ChangeState(AttackState.BasicAttack3);
break;
case AttackState.BasicAttack3:
ChangeState(AttackState.ChargeSurgeA);
break;
}
}
override public void HandleRMB() {
Player.SkillInUse = true;
switch (CurrentState) {
case AttackState.None:
PlayerOriginalSpeed = Player.MoveSpeed;
if (Player.IsDashing)
ChangeState(AttackState.None);
else if (Player.IsJumping)
ChangeState(AttackState.None);
else
ChangeState(AttackState.DrainEdge);
break;
case AttackState.BasicAttack1:
if (!AllowBladeVortex) return;
ChangeState(AttackState.BladeVortex, 0.4f, 1.5f);
break;
case AttackState.BasicAttack3:
ChangeState(AttackState.ChargeSurgeB);
break;
}
}
private void ChangeState(AttackState state, float decreasedSpeed = 0.2f, float resetTime = 0.3f) {
CurrentState = state;
ComboResetTime = resetTime;
LastComboTime = Time.time;
Player.MoveSpeed = (state == AttackState.None) ? PlayerOriginalSpeed : PlayerOriginalSpeed * decreasedSpeed;
Debug.Log(CurrentState.ToString());
switch (CurrentState) {
case AttackState.None:
if (Player.IsDashing) {
} else if (Player.IsJumping) {
} else {
}
break;
case AttackState.Shockwave:
break;
case AttackState.BladeVortex:
Animator.CrossFade(BladeVortex, 0);
break;
case AttackState.BasicAttack1:
break;
case AttackState.BasicAttack2:
break;
case AttackState.BasicAttack3:
break;
case AttackState.KineticSurgeA:
Debug.Log($"Charged Value: {ChargeValue}");
break;
case AttackState.KineticSurgeB:
Debug.Log($"Charged Value: {ChargeValue}");
break;
}
}
}