using UnityEngine;
using UnityEngine.UI;
public class BattleHUD : MonoBehaviour
{
public Text nameText;
public Text levelText;
public Slider hpSlider;
public void SetHUD(Unit unit)
{
nameText.text = unit.unitName;
levelText.text = "Lvl " + unit.unitLevel;
hpSlider.maxValue = unit.maxHP;
hpSlider.value = unit.currentHP;
}
public void SetHP(int hp)
{
hpSlider.value = hp;
}
}
2.BattleSystem
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public enum BattleState
{
START,
PLAYERTURN,
ENEMYTURN,
WON,
LOST
}
public class BattleSystem : MonoBehaviour
{
public GameObject playerPrefab;
public GameObject enemyPrefab;
public Transform playerBattleStation;
public Transform enemyBattleStation;
Unit playerUnit;
Unit enemyUnit;
public Text dialogueText;
public BattleHUD playerHUD;
public BattleHUD enemyHUD;
public BattleState state;
// Start is called before the first frame update
void Start()
{
state = BattleState.START;
StartCoroutine(SetupBattle());
}
IEnumerator SetupBattle()
{
GameObject playerGO = Instantiate(playerPrefab, playerBattleStation);
playerUnit = playerGO.GetComponent<Unit>();
GameObject enemyGO = Instantiate(enemyPrefab, enemyBattleStation);
enemyUnit = enemyGO.GetComponent<Unit>();
dialogueText.text = "A wild " + enemyUnit.unitName + " approaches...";
playerHUD.SetHUD(playerUnit);
enemyHUD.SetHUD(enemyUnit);
yield return new WaitForSeconds(2f);
state = BattleState.PLAYERTURN;
PlayerTurn();
}
IEnumerator PlayerAttack()
{
bool isDead = enemyUnit.TakeDamage(playerUnit.damage);
enemyHUD.SetHP(enemyUnit.currentHP);
dialogueText.text = "The attack is successful!";
yield return new WaitForSeconds(2f);
if (isDead)
{
state = BattleState.WON;
EndBattle();
}
else
{
state = BattleState.ENEMYTURN;
StartCoroutine(EnemyTurn());
}
}
IEnumerator EnemyTurn()
{
dialogueText.text = enemyUnit.unitName + " attacks!";
yield return new WaitForSeconds(1f);
bool isDead = playerUnit.TakeDamage(enemyUnit.damage);
playerHUD.SetHP(playerUnit.currentHP);
yield return new WaitForSeconds(1f);
if (isDead)
{
state = BattleState.LOST;
EndBattle();
}
else
{
state = BattleState.PLAYERTURN;
PlayerTurn();
}
}
void EndBattle()
{
if (state == BattleState.WON)
{
dialogueText.text = "You won the battle!";
}
else if (state == BattleState.LOST)
{
dialogueText.text = "You were defeated.";
}
}
void PlayerTurn()
{
dialogueText.text = "Choose an action:";
}
IEnumerator PlayerHeal()
{
playerUnit.Heal(5);
playerHUD.SetHP(playerUnit.currentHP);
dialogueText.text = "You feel renewed strength!";
yield return new WaitForSeconds(2f);
state = BattleState.ENEMYTURN;
StartCoroutine(EnemyTurn());
}
public void OnAttackButton()
{
if (state != BattleState.PLAYERTURN)
return;
StartCoroutine(PlayerAttack());
}
public void OnHealButton()
{
if (state != BattleState.PLAYERTURN)
return;
StartCoroutine(PlayerHeal());
}
}
3.Unit
using UnityEngine;
public class Unit : MonoBehaviour
{
public string unitName;
public int unitLevel;
public int damage;
public int maxHP;
public int currentHP;
public bool TakeDamage(int dmg)
{
currentHP -= dmg;
if (currentHP <= 0)
return true;
else
return false;
}
public void Heal(int amount)
{
currentHP += amount;
if (currentHP > maxHP)
currentHP = maxHP;
}
}