131 lines
4.2 KiB
C#
131 lines
4.2 KiB
C#
using Assets.Scripts;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.UI;
|
|
using Assets.Scripts.Player;
|
|
|
|
public class Fight : MonoBehaviour
|
|
{
|
|
GameObject tile;
|
|
GameObject enemy;
|
|
GameObject player;
|
|
System.Random rand = new System.Random();
|
|
UIHandler uihandler;
|
|
|
|
public void startFight(GameObject tile, GameObject enemy, GameObject player)
|
|
{
|
|
this.tile = tile;
|
|
this.enemy = enemy;
|
|
this.player = player;
|
|
enemy.GetComponent<Enemy>().scaleEnemy(player.GetComponent<PlayerGameObject>());
|
|
enemy.transform.rotation = Quaternion.Euler(0, GameObject.Find("Main Camera").transform.rotation.y + 180f, 0);
|
|
|
|
uihandler = GameObject.Find("UIHandler").GetComponent<UIHandler>();
|
|
uihandler.openFight();
|
|
uihandler.updateFightInterface(enemy, player);
|
|
EventSystem.current.SetSelectedGameObject(GameObject.Find("btnActionOne"));
|
|
}
|
|
|
|
private void endFight()
|
|
{
|
|
uihandler.closeFight();
|
|
}
|
|
|
|
public void playerAction(int index)
|
|
{
|
|
int playerDamage = 0;
|
|
int skillnumber = -1;
|
|
bool escapedSuccesfully = false;
|
|
switch (index)
|
|
{
|
|
case 1:
|
|
if (rand.Next(1, 11) <= 3)
|
|
{
|
|
escapedSuccesfully = true;
|
|
endFight();
|
|
uihandler.showMessage("INFORMATION;" + TextHandler.getText("escape"));
|
|
}
|
|
else
|
|
{
|
|
uihandler.showMessage("ERROR;" + TextHandler.getText("escapeFail"));
|
|
}
|
|
break;
|
|
case 2:
|
|
//User waits
|
|
break;
|
|
case 3:
|
|
playerDamage = player.GetComponent<PlayerGameObject>().calculateDamage();
|
|
break;
|
|
case 4:
|
|
skillnumber = 0;
|
|
break;
|
|
case 5:
|
|
skillnumber = 1;
|
|
break;
|
|
case 6:
|
|
skillnumber = 2;
|
|
break;
|
|
}
|
|
if (skillnumber != -1)
|
|
{
|
|
playerDamage = player.GetComponent<PlayerGameObject>().castSkill(skillnumber);
|
|
}
|
|
player.GetComponent<PlayerGameObject>().reduceCooldown(skillnumber);
|
|
player.GetComponent<PlayerGameObject>().regainSecondary();
|
|
bool isDead = enemy.GetComponent<Enemy>().takeDamage(playerDamage);
|
|
if (isDead)
|
|
{
|
|
if (enemy.GetComponent<Enemy>().getEnemyName() == "Slime (Boss)")
|
|
{
|
|
SteamWorksHandler.getStandardAchievement("BossAchievement");
|
|
}
|
|
endFight();
|
|
tile.GetComponent<Tile>().enemyKilled(enemy);
|
|
player.GetComponent<PlayerGameObject>().enemyKilled();
|
|
player.GetComponent<PlayerGameObject>().gainExperience(enemy.GetComponent<Enemy>().getExperience());
|
|
GameObject.Find("Inventory").GetComponent<Inventory>().addItem(enemy.GetComponent<Enemy>().getItem());
|
|
GameObject.Find("QuestLog").GetComponent<QuestLog>().updateQuests("kill", enemy, 1);
|
|
}
|
|
else
|
|
{
|
|
int chance = escapedSuccesfully ? 3 : 10;
|
|
if (rand.Next(1, 11) <= chance)
|
|
{
|
|
enemyAction();
|
|
uihandler.updateFightInterface(enemy, player);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void enemyAction()
|
|
{
|
|
int enemyDamage = -1;
|
|
// { health, maxHealth, secondary, maxSecondary, strength, dexterity, intelligence };
|
|
int[] enemyStats = enemy.GetComponent<Enemy>().getStats();
|
|
int index = rand.Next(0, 2);
|
|
|
|
if (index == 1 && enemyStats[2] <= 0)
|
|
{
|
|
index = 0;
|
|
}
|
|
|
|
switch (index)
|
|
{
|
|
case 0:
|
|
enemyDamage = enemy.GetComponent<Enemy>().calculateDamage();
|
|
break;
|
|
case 1:
|
|
enemyDamage = enemy.GetComponent<Enemy>().calculateHeavy();
|
|
break;
|
|
}
|
|
|
|
if (player.GetComponent<PlayerGameObject>().takeDamage(enemyDamage))
|
|
{
|
|
SteamWorksHandler.getStandardAchievement("DeathAchievement");
|
|
uihandler.showDeathScreen();
|
|
}
|
|
}
|
|
}
|