Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
DMD2542-Project02-AdamSkawinski/RPG/Assets/BattleSystem2.cs
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
382 lines (287 sloc)
9.49 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
using UnityEngine.UI; | |
using UnityEngine.SceneManagement; | |
public enum BattleState2 { START, PLAYERTURN, ENEMYTURN, WON, LOST } | |
public class BattleSystem2 : MonoBehaviour | |
{ | |
public GameObject playerPrefab; | |
public GameObject enemyPrefab; | |
public Transform playerBattleStation; | |
public Transform enemyBattleStation; | |
Unit playerUnit; | |
Unit enemyUnit; | |
public float speed = 5f; | |
public Animator animator; | |
public Animator Eanimator; | |
public Text dialogueText; | |
public BattleHUD playerHUD; | |
public BattleHUD enemyHUD; | |
public BattleState state; | |
void Start() | |
{ | |
state = BattleState.START; | |
StartCoroutine(SetupBattle()); | |
} | |
IEnumerator SetupBattle() | |
{ | |
playerPrefab.SetActive(false); | |
GameObject playerGO = playerPrefab; | |
playerPrefab.SetActive(true); | |
playerUnit = playerGO.GetComponent<Unit>(); | |
enemyPrefab.SetActive(false); | |
GameObject enemyGO = enemyPrefab; | |
enemyPrefab.SetActive(true); | |
enemyUnit = enemyGO.GetComponent<Unit>(); | |
dialogueText.text = "A hostile " + enemyUnit.unitName + " approaches..."; | |
playerHUD.SetHUD(playerUnit); | |
enemyHUD.SetHUD(enemyUnit); | |
yield return new WaitForSeconds(.5f); | |
state = BattleState.PLAYERTURN; | |
StartCoroutine(PlayerTurn()); | |
} | |
IEnumerator EnemyTurn() | |
{ | |
dialogueText.text = enemyUnit.unitName + "'s turn"; | |
yield return new WaitForSeconds(1.5f); | |
float i = Random.Range(0f, 10f); | |
if (i <= 8) | |
{ | |
dialogueText.text = enemyUnit.unitName + " attacks!"; | |
//Animation wait time | |
yield return new WaitForSeconds(.5f); | |
enemyPrefab.transform.Translate(speed * 1, 0, 0); | |
Eanimator.SetBool("E_Attack", true); | |
bool isDead = playerUnit.TakeDamage(enemyUnit.damage); | |
playerHUD.SetHP(playerUnit.currentHP); | |
animator.SetBool("Hurt", true); | |
yield return new WaitForSeconds(1.2f); | |
animator.SetBool("Hurt", false); | |
Eanimator.SetBool("E_Attack", false); | |
enemyPrefab.transform.Translate(-speed, 0, 0); | |
if (isDead) | |
{ | |
animator.SetBool("Dead", true); | |
yield return new WaitForSeconds(2.1f); | |
state = BattleState.LOST; | |
EndBattle(); | |
} | |
else | |
{ | |
state = BattleState.PLAYERTURN; | |
StartCoroutine(PlayerTurn()); | |
} | |
} | |
//Healing | |
else | |
{ | |
animator.SetBool("E_Heals", true); | |
yield return new WaitForSeconds(1.5f); | |
animator.SetBool("E_Heals", false); | |
dialogueText.text = enemyUnit.unitName + " heals!"; | |
enemyUnit.Heal(10); | |
enemyHUD.SetHP(enemyUnit.currentHP); | |
yield return new WaitForSeconds(1.5f); | |
animator.SetBool("E_Heals", false); | |
state = BattleState.PLAYERTURN; | |
StartCoroutine(PlayerTurn()); | |
} | |
} | |
IEnumerator PlayerTurn() | |
{ | |
dialogueText.text = "Choose an action:"; | |
yield return new WaitForSeconds(1f); | |
} | |
//Player Options | |
public void OnAttackButton() | |
{ | |
if (state != BattleState.PLAYERTURN) | |
return; | |
StartCoroutine(PlayerAttack()); | |
} | |
IEnumerator PlayerAttack() //QuickAttack | |
{ | |
//Run to enemy | |
playerPrefab.transform.Translate(speed * 1, 0, 0); | |
dialogueText.text = "quick attack!"; | |
animator.SetBool("QuickAttack", true); | |
yield return new WaitForSeconds(.50f); | |
//Tackle Enemy | |
bool isDead = enemyUnit.TakeDamage(playerUnit.damage); | |
dialogueText.text = "The quick attack is successful!"; | |
enemyHUD.SetHP(enemyUnit.currentHP); | |
Eanimator.SetBool("E_Hurt", true); | |
yield return new WaitForSeconds(.51f); | |
Eanimator.SetBool("E_Hurt", false); | |
//return | |
animator.SetBool("QuickAttack", false); | |
playerPrefab.transform.Translate(-speed, 0, 0); | |
yield return new WaitForSeconds(1f); | |
//check if enemy dead | |
if (isDead) | |
{ | |
Eanimator.SetBool("E_Dead", true); | |
yield return new WaitForSeconds(1.5f); | |
state = BattleState.WON; | |
EndBattle(); | |
} | |
else | |
{ | |
state = BattleState.ENEMYTURN; | |
StartCoroutine(EnemyTurn()); | |
} | |
} | |
public void OnAttack2Button() | |
{ | |
if (state != BattleState.PLAYERTURN) | |
return; | |
StartCoroutine(PlayerAttack2()); | |
} | |
IEnumerator PlayerAttack2() //Tackle | |
{ | |
//Run to Enemy | |
playerPrefab.transform.Translate(speed * 1, 0, 0); | |
dialogueText.text = "Tackle!"; | |
//swing | |
animator.SetBool("Tackle", true); | |
yield return new WaitForSeconds(1.5f); | |
Eanimator.SetBool("E_Hurt", true); | |
yield return new WaitForSeconds(.51f); | |
Eanimator.SetBool("E_Hurt", false); | |
animator.SetBool("Tackle", false); | |
//Stop Swinging and reuturn | |
playerPrefab.transform.Translate(-speed, 0, 0); | |
//see if hit or miss | |
float i = Random.Range(0, 10); | |
if (i <= 8) | |
{ | |
//Damage enemy | |
bool isDead = enemyUnit.TakeDamage(playerUnit.damage2); | |
enemyHUD.SetHP(enemyUnit.currentHP); | |
dialogueText.text = "The Tackle is successful!"; | |
yield return new WaitForSeconds(1f); | |
//check if enemy dead | |
if (isDead) | |
{ | |
Eanimator.SetBool("E_Dead", true); | |
yield return new WaitForSeconds(1.5f); | |
state = BattleState.WON; | |
EndBattle(); | |
} | |
else | |
{ | |
state = BattleState.ENEMYTURN; | |
StartCoroutine(EnemyTurn()); | |
} | |
} | |
else | |
{ | |
bool isDead = enemyUnit.TakeDamage(playerUnit.damage0); | |
yield return new WaitForSeconds(.10f); | |
dialogueText.text = "The Tackle did no damage"; | |
yield return new WaitForSeconds(1f); | |
//check if enemy dead | |
if (isDead) | |
{ | |
Eanimator.SetBool("E_Dead", true); | |
yield return new WaitForSeconds(1.5f); | |
state = BattleState.WON; | |
EndBattle(); | |
} | |
else | |
{ | |
state = BattleState.ENEMYTURN; | |
StartCoroutine(EnemyTurn()); | |
} | |
} | |
} | |
public void OnAttack3Button() | |
{ | |
if (state != BattleState.PLAYERTURN) | |
return; | |
StartCoroutine(PlayerAttack3()); | |
} | |
IEnumerator PlayerAttack3() //Fury Swipe | |
{ | |
//Damage enemy | |
//Run to Enemy | |
playerPrefab.transform.Translate(speed * 1, 0, 0); | |
dialogueText.text = "Fury Swipes!"; | |
yield return new WaitForSeconds(.50f); | |
animator.SetBool("FurySwipe", true); | |
//animate here | |
//1 | |
Eanimator.SetBool("E_Hurt", true); | |
yield return new WaitForSeconds(.50f); | |
Eanimator.SetBool("E_Hurt", false); | |
yield return new WaitForSeconds(.50f); | |
//2 | |
Eanimator.SetBool("E_Hurt", true); | |
yield return new WaitForSeconds(.50f); | |
Eanimator.SetBool("E_Hurt", false); | |
yield return new WaitForSeconds(.50f); | |
//3 | |
Eanimator.SetBool("E_Hurt", true); | |
yield return new WaitForSeconds(.50f); | |
Eanimator.SetBool("E_Hurt", false); | |
yield return new WaitForSeconds(.50f); | |
//4 | |
Eanimator.SetBool("E_Hurt", true); | |
yield return new WaitForSeconds(.50f); | |
Eanimator.SetBool("E_Hurt", false); | |
yield return new WaitForSeconds(1f); | |
dialogueText.text = "The attack was successful!"; | |
bool isDead = enemyUnit.TakeDamage(Random.Range(5, 15)); | |
enemyHUD.SetHP(enemyUnit.currentHP); | |
animator.SetBool("FurySwipe", false); | |
playerPrefab.transform.Translate(-speed, 0, 0); | |
yield return new WaitForSeconds(1f); | |
//check if enemy dead | |
if (isDead) | |
{ | |
Eanimator.SetBool("E_Dead", true); | |
yield return new WaitForSeconds(1.5f); | |
state = BattleState.WON; | |
EndBattle(); | |
} | |
else | |
{ | |
state = BattleState.ENEMYTURN; | |
StartCoroutine(EnemyTurn()); | |
} | |
} | |
public void OnHealButton() | |
{ | |
if (state != BattleState.PLAYERTURN) | |
return; | |
StartCoroutine(PlayerHeal()); | |
} | |
IEnumerator PlayerHeal() //Heal | |
{ | |
yield return new WaitForSeconds(.5f); | |
playerUnit.Heal(10); | |
playerHUD.SetHP(playerUnit.currentHP); | |
animator.SetBool("Heal", true); | |
yield return new WaitForSeconds(1.75f); | |
dialogueText.text = "You feel renewed strength!"; | |
animator.SetBool("Heal", false); | |
state = BattleState.ENEMYTURN; | |
yield return new WaitForSeconds(1f); | |
StartCoroutine(EnemyTurn()); | |
} | |
void EndBattle() | |
{ | |
//change state | |
if (state == BattleState.WON) | |
{ | |
dialogueText.text = "Victory!"; | |
SceneManager.LoadScene("2D_4Battle"); | |
} | |
else if (state == BattleState.LOST) | |
{ | |
dialogueText.text = "You lost!"; | |
SceneManager.LoadScene("GameOver"); | |
} | |
} | |
} |