177 lines
4.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|