Files
DeviantMobile-Rohan/Assets/Scripts/CharacterAttacks.cs

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;
}
}
}