1223 lines
46 KiB
C#
1223 lines
46 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Random = UnityEngine.Random;
|
|
|
|
// AnimationNames is defined in AnimationManager.cs
|
|
|
|
public enum ComboState
|
|
{
|
|
NONE,
|
|
PUNCH_1,
|
|
PUNCH_2,
|
|
PUNCH_3,
|
|
PUNCH_4,
|
|
PUNCH_5,
|
|
PUNCH_6,
|
|
KICK_1,
|
|
KICK_2,
|
|
KICK_3,
|
|
KICK_4,
|
|
KICK_5,
|
|
KICK_6,
|
|
KICK_7,
|
|
VICIOUS_1, // Adding states for vicious attacks
|
|
VICIOUS_2,
|
|
VICIOUS_3,
|
|
SPECIAL_1, // Adding states for special/finisher attacks
|
|
SPECIAL_2,
|
|
SPECIAL_3
|
|
}
|
|
|
|
public class CharacterAttacks : MonoBehaviour
|
|
{
|
|
public Animator anim;
|
|
private AnimationManager animationManager;
|
|
|
|
public event Action<string> AnimationAboutToPlay;
|
|
|
|
private bool activateTimerToReset;
|
|
|
|
//medium dufficulty to get the combo right
|
|
private float default_Combo_Timer = 0.6f;
|
|
|
|
//easy difficulty to get the combo right
|
|
//private float default_Combo_Timer = 1.0f;
|
|
|
|
private float current_Combo_Timer;
|
|
|
|
private ComboState current_Combo_State;
|
|
private CharacterSoundFXManager soundScript;
|
|
|
|
public float nextAnimationTime;
|
|
public float animationInterval;
|
|
public ComboDisplay comboDisplay;
|
|
InputBuffer inputBuffer;
|
|
|
|
// New properties for vicious and special moves
|
|
private bool canPerformViciousMove = false;
|
|
private bool canPerformSpecialMove = false;
|
|
private float viciousMoveCooldown = 5.0f;
|
|
private float specialMoveCooldown = 10.0f;
|
|
private float lastViciousMoveTime = -5.0f;
|
|
private float lastSpecialMoveTime = -10.0f;
|
|
|
|
private void Start()
|
|
{
|
|
anim = GetComponent<Animator>();
|
|
soundScript = GetComponent<CharacterSoundFXManager>();
|
|
comboDisplay = GetComponent<ComboDisplay>();
|
|
//normal
|
|
//animationInterval = 0.7f;
|
|
|
|
//slow
|
|
//animationInterval = 1.5f;
|
|
|
|
//fast
|
|
animationInterval = 0.35f;
|
|
inputBuffer = GetComponent<InputBuffer>();
|
|
|
|
// Get or add AnimationManager
|
|
animationManager = GetComponent<AnimationManager>();
|
|
if (animationManager == null)
|
|
{
|
|
animationManager = gameObject.AddComponent<AnimationManager>();
|
|
}
|
|
}
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
ResetComboState();
|
|
|
|
// Update cooldowns for vicious and special moves
|
|
canPerformViciousMove = (Time.time - lastViciousMoveTime >= viciousMoveCooldown);
|
|
canPerformSpecialMove = (Time.time - lastSpecialMoveTime >= specialMoveCooldown);
|
|
}
|
|
|
|
void ResetComboState()
|
|
{
|
|
if (activateTimerToReset)
|
|
{
|
|
current_Combo_Timer -= Time.deltaTime;
|
|
if (current_Combo_Timer <= 0f)
|
|
{
|
|
current_Combo_State = ComboState.NONE;
|
|
|
|
activateTimerToReset = false;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
}
|
|
|
|
} // reset combo state
|
|
}
|
|
|
|
// Helper method to play animations using AnimationManager when available
|
|
private void PlayAnimation(string animationName)
|
|
{
|
|
AnimationAboutToPlay?.Invoke(animationName);
|
|
|
|
if (animationManager != null)
|
|
{
|
|
animationManager.PlayAnimation(animationName);
|
|
}
|
|
else
|
|
{
|
|
anim.Play(animationName);
|
|
}
|
|
}
|
|
|
|
public void PunchAttacks(string punchAttack)
|
|
{
|
|
if (current_Combo_State == ComboState.KICK_7 || current_Combo_State == ComboState.PUNCH_6)
|
|
return;
|
|
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
if (staminaSystem.currentStamina < 5f)
|
|
{
|
|
animationInterval = 2.0f;
|
|
}
|
|
else
|
|
animationInterval = 0.35f;
|
|
|
|
string punchAnimation = null;
|
|
switch (punchAttack)
|
|
{
|
|
case "Jab":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
punchAnimation = AnimationNames.Jab;
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
|
|
case "RightBody":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
punchAnimation = AnimationNames.RightBody;
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
|
|
case "SupermanPunch":
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
punchAnimation = AnimationNames.SupermanPunch;
|
|
staminaSystem.UseStamina(2.0f);
|
|
inputBuffer.CleanUpBuffer();
|
|
break;
|
|
|
|
case "SpecialBackfist":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
punchAnimation = AnimationNames.SpecialBackfist;
|
|
staminaSystem.UseStamina(2.0f);
|
|
break;
|
|
|
|
case "Right":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
punchAnimation = AnimationNames.Right;
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
|
|
case "LeftHook":
|
|
inputBuffer.CleanUpBuffer();
|
|
punchAnimation = AnimationNames.LeftHook;
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
|
|
case "RightHook":
|
|
inputBuffer.CleanUpBuffer();
|
|
punchAnimation = AnimationNames.RightHook;
|
|
staminaSystem.UseStamina(0.5f);
|
|
|
|
break;
|
|
|
|
case "LeftElbow":
|
|
inputBuffer.CleanUpBuffer();
|
|
punchAnimation = AnimationNames.LeftElbow;
|
|
staminaSystem.UseStamina(0.5f);
|
|
|
|
break;
|
|
|
|
case "RightElbow":
|
|
inputBuffer.CleanUpBuffer();
|
|
punchAnimation = AnimationNames.RightElbow;
|
|
staminaSystem.UseStamina(0.5f);
|
|
|
|
break;
|
|
case "PowerPunchLeft":
|
|
inputBuffer.CleanUpBuffer();
|
|
punchAnimation = AnimationNames.PowerPunchLeft;
|
|
staminaSystem.UseStamina(0.5f);
|
|
|
|
break;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(punchAnimation))
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
// Use the helper method instead of direct anim.Play
|
|
PlayAnimation(punchAnimation);
|
|
|
|
print("anim.play " + punchAnimation);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
soundScript.PlayWhooshSound();
|
|
inputBuffer.CleanUpBuffer();
|
|
|
|
switch (current_Combo_State)
|
|
{
|
|
case ComboState.PUNCH_1:
|
|
current_Combo_State = ComboState.PUNCH_2;
|
|
comboDisplay.ShowComboText("COMBO x2");
|
|
break;
|
|
case ComboState.PUNCH_2:
|
|
current_Combo_State = ComboState.PUNCH_3;
|
|
comboDisplay.ShowComboText("COMBO x3");
|
|
break;
|
|
case ComboState.PUNCH_3:
|
|
current_Combo_State = ComboState.PUNCH_4;
|
|
comboDisplay.ShowComboText("COMBO x4");
|
|
break;
|
|
case ComboState.PUNCH_4:
|
|
current_Combo_State = ComboState.PUNCH_5;
|
|
comboDisplay.ShowComboText("COMBO x5");
|
|
break;
|
|
case ComboState.PUNCH_5:
|
|
current_Combo_State = ComboState.PUNCH_6;
|
|
comboDisplay.ShowComboText("COMBO x6");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void PunchAttacksMobile(float verticalValue, float horizontalValue, string punchDirection)
|
|
{
|
|
if (current_Combo_State == ComboState.KICK_7 || current_Combo_State == ComboState.PUNCH_6)
|
|
return;
|
|
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
//prevent player from punching when he has no stamina
|
|
if (staminaSystem.currentStamina < 5.0f)
|
|
{
|
|
animationInterval = 2.0f;
|
|
}
|
|
else
|
|
animationInterval = 0.35f;
|
|
// Determine the type of punch based on the joystick direction
|
|
string punchAnimation = null;
|
|
switch (punchDirection)
|
|
{
|
|
case "up": // Upward punches
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.KICK_1 || current_Combo_State == ComboState.KICK_2
|
|
|| current_Combo_State == ComboState.KICK_3 || current_Combo_State == ComboState.KICK_4 || current_Combo_State == ComboState.KICK_5)
|
|
{
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
}
|
|
punchAnimation = AnimationNames.Jab;
|
|
// Reduce the stamina for each punch
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
|
|
case "down": // Downward punches
|
|
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.KICK_1 || current_Combo_State == ComboState.KICK_2
|
|
|| current_Combo_State == ComboState.KICK_3 || current_Combo_State == ComboState.KICK_4 || current_Combo_State == ComboState.KICK_5)
|
|
{
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
}
|
|
punchAnimation = AnimationNames.RightBody;
|
|
// Reduce the stamina for each punch
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
case "left": // Leftward punches
|
|
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.KICK_1 || current_Combo_State == ComboState.KICK_2
|
|
|| current_Combo_State == ComboState.KICK_3 || current_Combo_State == ComboState.KICK_4 || current_Combo_State == ComboState.KICK_5)
|
|
{
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
}
|
|
int option = Random.Range(0, 2);
|
|
if (option == 0)
|
|
punchAnimation = AnimationNames.SupermanPunch;
|
|
else if (option == 1)
|
|
punchAnimation = AnimationNames.SpecialBackfist;
|
|
|
|
// Reduce the stamina for each punch
|
|
staminaSystem.UseStamina(2.0f);
|
|
break;
|
|
case "right": // Rightward punches
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.KICK_1 || current_Combo_State == ComboState.KICK_2
|
|
|| current_Combo_State == ComboState.KICK_3 || current_Combo_State == ComboState.KICK_4 || current_Combo_State == ComboState.KICK_5)
|
|
{
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
}
|
|
punchAnimation = AnimationNames.Right;
|
|
// Reduce the stamina for each punch
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
case "upleft":
|
|
punchAnimation = AnimationNames.LeftHook;
|
|
// Reduce the stamina for each punch
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
case "upright":
|
|
punchAnimation = AnimationNames.RightHook;
|
|
// Reduce the stamina for each punch
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
case "downleft":
|
|
punchAnimation = AnimationNames.LeftElbow;
|
|
// Reduce the stamina for each punch
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
case "downright":
|
|
punchAnimation = AnimationNames.RightElbow;
|
|
// Reduce the stamina for each punch
|
|
staminaSystem.UseStamina(0.5f);
|
|
break;
|
|
}
|
|
// Execute the punch if a valid animation is determined
|
|
if (!string.IsNullOrEmpty(punchAnimation))
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
if (Time.time > nextAnimationTime)
|
|
{
|
|
// Use the helper method instead of direct anim.Play
|
|
PlayAnimation(punchAnimation);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
soundScript.PlayWhooshSound();
|
|
|
|
// Advance the combo state
|
|
switch (current_Combo_State)
|
|
{
|
|
case ComboState.PUNCH_1:
|
|
current_Combo_State = ComboState.PUNCH_2;
|
|
comboDisplay.ShowComboText("COMBO x2");
|
|
break;
|
|
case ComboState.PUNCH_2:
|
|
current_Combo_State = ComboState.PUNCH_3;
|
|
comboDisplay.ShowComboText("COMBO x3");
|
|
break;
|
|
case ComboState.PUNCH_3:
|
|
current_Combo_State = ComboState.PUNCH_4;
|
|
comboDisplay.ShowComboText("COMBO x4");
|
|
break;
|
|
case ComboState.PUNCH_4:
|
|
current_Combo_State = ComboState.PUNCH_5;
|
|
comboDisplay.ShowComboText("COMBO x5");
|
|
break;
|
|
case ComboState.PUNCH_5:
|
|
current_Combo_State = ComboState.PUNCH_6;
|
|
comboDisplay.ShowComboText("COMBO x6");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void KickAttacks(string kickAttack)
|
|
{
|
|
// if the current combo is punch 3 or kick 2
|
|
// return meaning exit because we have no combos to perform
|
|
if (current_Combo_State == ComboState.KICK_7 || current_Combo_State == ComboState.PUNCH_6)
|
|
return;
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
//prevent player from kicking when he has no stamina
|
|
if (staminaSystem.currentStamina < 5f)
|
|
{
|
|
animationInterval = 2.0f;
|
|
}
|
|
else
|
|
animationInterval = 0.35f;
|
|
// if the current combo state is NONE, or punchl or punch2
|
|
// then we can set current combo state to kick 1 to chain the combo
|
|
string kickAnimation = null;
|
|
switch (kickAttack)
|
|
{
|
|
case "FrontKickRight": // Upward punches
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
inputBuffer.CleanUpBuffer();
|
|
kickAnimation = AnimationNames.FrontKickRight;
|
|
staminaSystem.UseStamina(0.7f);
|
|
|
|
break;
|
|
|
|
case "BodyKickRight": // Downward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
kickAnimation = AnimationNames.BodyKickRight;
|
|
staminaSystem.UseStamina(0.7f);
|
|
|
|
break;
|
|
case "LegPowerKickRight": // Leftward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
kickAnimation = AnimationNames.LegPowerKickRight;
|
|
staminaSystem.UseStamina(0.7f);
|
|
|
|
break;
|
|
case "BackSideKick": // Rightward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
kickAnimation = AnimationNames.BackSideKick;
|
|
staminaSystem.UseStamina(0.7f);
|
|
break;
|
|
case "LegKickRight": // Rightward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
kickAnimation = AnimationNames.LegKickRight;
|
|
staminaSystem.UseStamina(0.7f);
|
|
break;
|
|
case "KneeRight": // Rightward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
//kneeright needs to be changed
|
|
kickAnimation = "";
|
|
staminaSystem.UseStamina(0.7f);
|
|
break;
|
|
|
|
}
|
|
// Execute the punch if a valid animation is determined
|
|
if (!string.IsNullOrEmpty(kickAnimation))
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
// Use the helper method instead of direct anim.Play
|
|
PlayAnimation(kickAnimation);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
soundScript.PlayWhooshSound();
|
|
inputBuffer.CleanUpBuffer();
|
|
// Advance the combo state
|
|
switch (current_Combo_State)
|
|
{
|
|
case ComboState.KICK_1:
|
|
current_Combo_State = ComboState.KICK_2;
|
|
comboDisplay.ShowComboText("COMBO x2");
|
|
break;
|
|
case ComboState.KICK_2:
|
|
current_Combo_State = ComboState.KICK_3;
|
|
comboDisplay.ShowComboText("COMBO x3");
|
|
break;
|
|
case ComboState.KICK_3:
|
|
current_Combo_State = ComboState.KICK_4;
|
|
comboDisplay.ShowComboText("COMBO x4");
|
|
break;
|
|
case ComboState.KICK_4:
|
|
current_Combo_State = ComboState.KICK_5;
|
|
comboDisplay.ShowComboText("COMBO x5");
|
|
break;
|
|
case ComboState.KICK_5:
|
|
current_Combo_State = ComboState.KICK_6;
|
|
comboDisplay.ShowComboText("COMBO x6");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void KickAttacksMobile(float verticalValue, float horizontalValue, string kickDirection)
|
|
{
|
|
if (current_Combo_State == ComboState.KICK_7 || current_Combo_State == ComboState.PUNCH_6)
|
|
return;
|
|
|
|
// Reduce the stamina for each punch
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
//prevent player from kicking when he has no stamina
|
|
if (staminaSystem.currentStamina < 5f)
|
|
{
|
|
animationInterval = 2.0f;
|
|
}
|
|
else
|
|
animationInterval = 0.35f;
|
|
|
|
// Determine the type of punch based on the joystick direction
|
|
string punchAnimation = null;
|
|
switch (kickDirection)
|
|
{
|
|
case "up": // Upward punches
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
punchAnimation = AnimationNames.FrontKickRight;
|
|
staminaSystem.UseStamina(0.7f);
|
|
break;
|
|
|
|
case "down": // Downward punches
|
|
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
punchAnimation = AnimationNames.BodyKickRight;
|
|
staminaSystem.UseStamina(0.7f);
|
|
break;
|
|
case "left": // Leftward punches
|
|
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
punchAnimation = AnimationNames.LegPowerKickRight;
|
|
staminaSystem.UseStamina(0.7f);
|
|
break;
|
|
case "right": // Rightward punches
|
|
if (current_Combo_State == ComboState.NONE || current_Combo_State == ComboState.PUNCH_1 || current_Combo_State == ComboState.PUNCH_2
|
|
|| current_Combo_State == ComboState.PUNCH_3 || current_Combo_State == ComboState.PUNCH_4 || current_Combo_State == ComboState.PUNCH_5)
|
|
{
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
punchAnimation = AnimationNames.BackSideKick;
|
|
staminaSystem.UseStamina(0.7f);
|
|
break;
|
|
case "upleft":
|
|
//punchAnimation = "LeftHook";
|
|
break;
|
|
case "upright":
|
|
//punchAnimation = "RightHook";
|
|
break;
|
|
case "downleft":
|
|
//punchAnimation = "LeftElbow";
|
|
break;
|
|
case "downright":
|
|
//punchAnimation = "RightElbow";
|
|
break;
|
|
}
|
|
// Execute the punch if a valid animation is determined
|
|
if (!string.IsNullOrEmpty(punchAnimation))
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
if (Time.time > nextAnimationTime)
|
|
{
|
|
// Use the helper method instead of direct anim.Play
|
|
PlayAnimation(punchAnimation);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
soundScript.PlayWhooshSound();
|
|
|
|
// Advance the combo state
|
|
switch (current_Combo_State)
|
|
{
|
|
case ComboState.KICK_1:
|
|
current_Combo_State = ComboState.KICK_2;
|
|
comboDisplay.ShowComboText("COMBO x2");
|
|
break;
|
|
case ComboState.KICK_2:
|
|
current_Combo_State = ComboState.KICK_3;
|
|
comboDisplay.ShowComboText("COMBO x3");
|
|
break;
|
|
case ComboState.KICK_3:
|
|
current_Combo_State = ComboState.KICK_4;
|
|
comboDisplay.ShowComboText("COMBO x4");
|
|
break;
|
|
case ComboState.KICK_4:
|
|
current_Combo_State = ComboState.KICK_5;
|
|
comboDisplay.ShowComboText("COMBO x5");
|
|
break;
|
|
case ComboState.KICK_5:
|
|
current_Combo_State = ComboState.KICK_6;
|
|
comboDisplay.ShowComboText("COMBO x6");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void DodgeMobile(string direction, Vector2 target)
|
|
{
|
|
string punchAnimation = null;
|
|
switch (direction)
|
|
{
|
|
case "up": // Upward punches
|
|
punchAnimation = AnimationNames.JumpBack;
|
|
break;
|
|
|
|
case "down": // Downward punches
|
|
punchAnimation = AnimationNames.JumpBack;
|
|
break;
|
|
case "left": // Leftward punches
|
|
punchAnimation = AnimationNames.JumpLeft;
|
|
break;
|
|
case "right": // Rightward punches
|
|
punchAnimation = AnimationNames.JumpRight;
|
|
break;
|
|
case "upleft":
|
|
//punchAnimation = "LeftHook";
|
|
break;
|
|
case "upright":
|
|
//punchAnimation = "RightHook";
|
|
break;
|
|
case "downleft":
|
|
//punchAnimation = "LeftElbow";
|
|
break;
|
|
case "downright":
|
|
//punchAnimation = "RightElbow";
|
|
break;
|
|
}
|
|
|
|
// Execute the punch if a valid animation is determined
|
|
if (!string.IsNullOrEmpty(punchAnimation))
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
if (Time.time > nextAnimationTime)
|
|
{
|
|
// Use the helper method instead of direct anim.Play
|
|
PlayAnimation(punchAnimation);
|
|
// Move the character in the target direction
|
|
transform.Translate(target * 10 * Time.deltaTime, Space.World);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void BlockMobile(string direction)
|
|
{
|
|
string punchAnimation = null;
|
|
switch (direction)
|
|
{
|
|
case "up": // Upward punches
|
|
punchAnimation = AnimationNames.BlockStepBack;
|
|
break;
|
|
|
|
case "down": // Downward punches
|
|
punchAnimation = AnimationNames.BlockLeg;
|
|
break;
|
|
case "left": // Leftward punches
|
|
punchAnimation = AnimationNames.BlockStepBack;
|
|
break;
|
|
case "right": // Rightward punches
|
|
punchAnimation = AnimationNames.BlockBodyLeft;
|
|
break;
|
|
case "upleft":
|
|
punchAnimation = AnimationNames.BlockStepBack;
|
|
break;
|
|
case "upright":
|
|
punchAnimation = AnimationNames.BlockBodyLeft;
|
|
break;
|
|
case "downleft":
|
|
punchAnimation = AnimationNames.BlockStepBack;
|
|
break;
|
|
case "downright":
|
|
punchAnimation = AnimationNames.BlockLeg;
|
|
break;
|
|
}
|
|
|
|
// Execute the punch if a valid animation is determined
|
|
if (!string.IsNullOrEmpty(punchAnimation))
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
if (Time.time > nextAnimationTime)
|
|
{
|
|
// Use the helper method instead of direct anim.Play
|
|
PlayAnimation(punchAnimation);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Dodge(string dodgeMove, Vector2 target)
|
|
{
|
|
string dodgeAnimation = null;
|
|
switch (dodgeMove)
|
|
{
|
|
case "JumpBack": // Upward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
dodgeAnimation = AnimationNames.JumpBack;
|
|
break;
|
|
case "JumpLeft": // Leftward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
dodgeAnimation = AnimationNames.JumpLeft;
|
|
break;
|
|
case "JumpRight": // Rightward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
dodgeAnimation = AnimationNames.JumpRight;
|
|
break;
|
|
}
|
|
|
|
// Execute the punch if a valid animation is determined
|
|
if (!string.IsNullOrEmpty(dodgeAnimation))
|
|
{
|
|
inputBuffer.CleanUpBuffer();
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
/*if (Time.time > nextAnimationTime)
|
|
{*/
|
|
// Use the helper method instead of direct anim.Play
|
|
PlayAnimation(dodgeAnimation);
|
|
// Move the character in the target direction
|
|
transform.Translate(target * 10 * Time.deltaTime, Space.World);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
//}
|
|
}
|
|
}
|
|
|
|
public void Block(string blockMove)
|
|
{
|
|
string blockAnimation = null;
|
|
switch (blockMove)
|
|
{
|
|
case "BlockStepBack": // Upward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
blockAnimation = AnimationNames.BlockStepBack;
|
|
break;
|
|
|
|
case "BlockLeg": // Downward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
blockAnimation = AnimationNames.BlockLeg;
|
|
break;
|
|
|
|
case "BlockBodyLeft": // Rightward punches
|
|
inputBuffer.CleanUpBuffer();
|
|
blockAnimation = AnimationNames.BlockBodyLeft;
|
|
break;
|
|
}
|
|
|
|
// Execute the punch if a valid animation is determined
|
|
if (!string.IsNullOrEmpty(blockAnimation))
|
|
{
|
|
inputBuffer.CleanUpBuffer();
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
/*if (Time.time > nextAnimationTime)
|
|
{*/
|
|
// Use the helper method instead of direct anim.Play
|
|
PlayAnimation(blockAnimation);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
|
|
//}
|
|
}
|
|
}
|
|
|
|
public void ViciousAttacks(string viciousAttack)
|
|
{
|
|
if (!canPerformViciousMove)
|
|
return;
|
|
|
|
if (current_Combo_State == ComboState.KICK_7 || current_Combo_State == ComboState.PUNCH_6)
|
|
return;
|
|
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
if (staminaSystem.currentStamina < 25f) // Vicious moves require more stamina
|
|
{
|
|
// Not enough stamina
|
|
return;
|
|
}
|
|
|
|
string viciousAnimation = null;
|
|
|
|
// Process the vicious attack input
|
|
switch (viciousAttack)
|
|
{
|
|
case "Chokeslam":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.Chokeslam;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
|
|
case "Suplex":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.Suplex;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
|
|
case "GiantSwing":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.GiantSwing;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
|
|
case "DiamondCrusher":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.DiamondCrusher;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
|
|
case "SumoSlap":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.SumoSlap;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
|
|
case "Uppercut":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.Uppercut;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
|
|
case "JavelinTackle":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.JavelinTackle;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
|
|
case "RocketJump":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.RocketJump;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
|
|
case "BullRush":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.VICIOUS_1;
|
|
viciousAnimation = AnimationNames.BullRush;
|
|
staminaSystem.UseStamina(25.0f);
|
|
break;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(viciousAnimation))
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
// Play the animation
|
|
PlayAnimation(viciousAnimation);
|
|
|
|
print("anim.play vicious: " + viciousAnimation);
|
|
nextAnimationTime = Time.time + animationInterval * 2; // Vicious moves take longer
|
|
soundScript.PlayWhooshSound();
|
|
inputBuffer.CleanUpBuffer();
|
|
|
|
// Set the last vicious move time for cooldown
|
|
lastViciousMoveTime = Time.time;
|
|
|
|
// Upgrade combo state
|
|
current_Combo_State = ComboState.VICIOUS_2;
|
|
comboDisplay.ShowComboText("VICIOUS ATTACK!");
|
|
}
|
|
}
|
|
|
|
public void SpecialAttacks(string specialAttack)
|
|
{
|
|
if (!canPerformSpecialMove)
|
|
return;
|
|
|
|
if (current_Combo_State == ComboState.KICK_7 || current_Combo_State == ComboState.PUNCH_6)
|
|
return;
|
|
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
if (staminaSystem.currentStamina < 50f) // Special moves require a lot of stamina
|
|
{
|
|
// Not enough stamina
|
|
return;
|
|
}
|
|
|
|
string specialAnimation = null;
|
|
|
|
// Process the special attack input
|
|
switch (specialAttack)
|
|
{
|
|
case "Clothesline":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.Clothesline;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "Spear":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.Spear;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "SuperKick":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.SuperKick;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "RKO":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.RKO;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "Claymore":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.Claymore;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "RockBottom":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.RockBottom;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "F5":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.F5;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "TroubleInParadise":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.TroubleInParadise;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "SwantomBomb":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.SwantomBomb;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
|
|
case "Headbutt":
|
|
inputBuffer.CleanUpBuffer();
|
|
current_Combo_State = ComboState.SPECIAL_1;
|
|
specialAnimation = AnimationNames.Headbutt;
|
|
staminaSystem.UseStamina(50.0f);
|
|
break;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(specialAnimation))
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
// Play the animation
|
|
PlayAnimation(specialAnimation);
|
|
|
|
print("anim.play special: " + specialAnimation);
|
|
nextAnimationTime = Time.time + animationInterval * 3; // Special moves take much longer
|
|
soundScript.PlayWhooshSound();
|
|
inputBuffer.CleanUpBuffer();
|
|
|
|
// Set the last special move time for cooldown
|
|
lastSpecialMoveTime = Time.time;
|
|
|
|
// Upgrade combo state
|
|
current_Combo_State = ComboState.SPECIAL_2;
|
|
comboDisplay.ShowComboText("SPECIAL FINISHER!");
|
|
}
|
|
}
|
|
|
|
// Optional: Add mobile versions of these methods if needed
|
|
public void ViciousAttacksMobile(float verticalValue, float horizontalValue, string direction)
|
|
{
|
|
// Implementation similar to PunchAttacksMobile but for vicious attacks
|
|
if (!canPerformViciousMove)
|
|
return;
|
|
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
if (staminaSystem.currentStamina < 25f)
|
|
return;
|
|
|
|
string viciousAnimation = null;
|
|
|
|
// Map joystick directions to vicious moves
|
|
switch (direction)
|
|
{
|
|
case "up":
|
|
viciousAnimation = AnimationNames.Uppercut;
|
|
break;
|
|
case "down":
|
|
viciousAnimation = AnimationNames.Chokeslam;
|
|
break;
|
|
case "left":
|
|
viciousAnimation = AnimationNames.GiantSwing;
|
|
break;
|
|
case "right":
|
|
viciousAnimation = AnimationNames.JavelinTackle;
|
|
break;
|
|
case "upleft":
|
|
viciousAnimation = AnimationNames.Suplex;
|
|
break;
|
|
case "upright":
|
|
viciousAnimation = AnimationNames.DiamondCrusher;
|
|
break;
|
|
case "downleft":
|
|
viciousAnimation = AnimationNames.SumoSlap;
|
|
break;
|
|
case "downright":
|
|
viciousAnimation = AnimationNames.BullRush;
|
|
break;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(viciousAnimation) && Time.time > nextAnimationTime)
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
// Play the animation
|
|
PlayAnimation(viciousAnimation);
|
|
|
|
nextAnimationTime = Time.time + animationInterval * 2;
|
|
soundScript.PlayWhooshSound();
|
|
|
|
// Set the cooldown
|
|
lastViciousMoveTime = Time.time;
|
|
|
|
// Use stamina
|
|
staminaSystem.UseStamina(25.0f);
|
|
|
|
// Set combo display
|
|
comboDisplay.ShowComboText("VICIOUS ATTACK!");
|
|
|
|
// Set combo state
|
|
current_Combo_State = ComboState.VICIOUS_2;
|
|
}
|
|
}
|
|
|
|
public void SpecialAttacksMobile(float verticalValue, float horizontalValue, string direction)
|
|
{
|
|
// Implementation similar to PunchAttacksMobile but for special attacks
|
|
if (!canPerformSpecialMove)
|
|
return;
|
|
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
if (staminaSystem.currentStamina < 50f)
|
|
return;
|
|
|
|
string specialAnimation = null;
|
|
|
|
// Map joystick directions to special moves
|
|
switch (direction)
|
|
{
|
|
case "up":
|
|
specialAnimation = AnimationNames.SuperKick;
|
|
break;
|
|
case "down":
|
|
specialAnimation = AnimationNames.RockBottom;
|
|
break;
|
|
case "left":
|
|
specialAnimation = AnimationNames.Clothesline;
|
|
break;
|
|
case "right":
|
|
specialAnimation = AnimationNames.Spear;
|
|
break;
|
|
case "upleft":
|
|
specialAnimation = AnimationNames.RKO;
|
|
break;
|
|
case "upright":
|
|
specialAnimation = AnimationNames.Claymore;
|
|
break;
|
|
case "downleft":
|
|
specialAnimation = AnimationNames.F5;
|
|
break;
|
|
case "downright":
|
|
specialAnimation = AnimationNames.SwantomBomb;
|
|
break;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(specialAnimation) && Time.time > nextAnimationTime)
|
|
{
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
|
|
// Play the animation
|
|
PlayAnimation(specialAnimation);
|
|
|
|
nextAnimationTime = Time.time + animationInterval * 3;
|
|
soundScript.PlayWhooshSound();
|
|
|
|
// Set the cooldown
|
|
lastSpecialMoveTime = Time.time;
|
|
|
|
// Use stamina
|
|
staminaSystem.UseStamina(50.0f);
|
|
|
|
// Set combo display
|
|
comboDisplay.ShowComboText("SPECIAL FINISHER!");
|
|
|
|
// Set combo state
|
|
current_Combo_State = ComboState.SPECIAL_2;
|
|
}
|
|
}
|
|
|
|
// Additional direct methods for our 8 core animations
|
|
|
|
public void PunchAttacksDirectly(string animationName)
|
|
{
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
if (staminaSystem.currentStamina < 5f)
|
|
{
|
|
animationInterval = 2.0f;
|
|
}
|
|
else
|
|
{
|
|
animationInterval = 0.35f;
|
|
}
|
|
|
|
if (Time.time > nextAnimationTime)
|
|
{
|
|
// Play the animation directly using the specific animation name
|
|
PlayAnimation(animationName);
|
|
|
|
// Apply appropriate stamina cost based on the animation
|
|
float staminaCost = 0.5f;
|
|
|
|
// More powerful moves cost more stamina
|
|
if (animationName == AnimationNames.Haymaker ||
|
|
animationName == AnimationNames.SpinningBackfist ||
|
|
animationName == AnimationNames.ChargedPunch)
|
|
{
|
|
staminaCost = 1.0f;
|
|
}
|
|
else if (animationName == AnimationNames.ElbowSmash ||
|
|
animationName == AnimationNames.AirPunch)
|
|
{
|
|
staminaCost = 1.5f;
|
|
}
|
|
|
|
staminaSystem.UseStamina(staminaCost);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
|
|
// Update combo state
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
current_Combo_State = ComboState.PUNCH_1;
|
|
}
|
|
}
|
|
|
|
public void KickAttacksDirectly(string animationName)
|
|
{
|
|
StaminaSystem staminaSystem = GetComponent<StaminaSystem>();
|
|
if (staminaSystem.currentStamina < 5f)
|
|
{
|
|
animationInterval = 2.0f;
|
|
}
|
|
else
|
|
{
|
|
animationInterval = 0.35f;
|
|
}
|
|
|
|
if (Time.time > nextAnimationTime)
|
|
{
|
|
// Play the animation directly using the specific animation name
|
|
PlayAnimation(animationName);
|
|
|
|
// Apply appropriate stamina cost based on the animation
|
|
float staminaCost = 0.7f;
|
|
|
|
// More powerful kicks cost more stamina
|
|
if (animationName == AnimationNames.DropKick)
|
|
{
|
|
staminaCost = 1.5f;
|
|
}
|
|
|
|
staminaSystem.UseStamina(staminaCost);
|
|
nextAnimationTime = Time.time + animationInterval;
|
|
|
|
// Update combo state
|
|
activateTimerToReset = true;
|
|
current_Combo_Timer = default_Combo_Timer;
|
|
current_Combo_State = ComboState.KICK_1;
|
|
}
|
|
}
|
|
}
|