Ropasci-Forest/Assets/Scripts/Combat/EnemyController.cs
Gerard Gascón fca6784fe7 init
2025-04-24 17:02:43 +02:00

165 lines
4.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class EnemyController : MonoBehaviour{
[SerializeField] Dialogue loseDialogue = default;
[SerializeField] HandManager playerHand = default;
[SerializeField] CustomTMP_Animated text = default;
[SerializeField] Animator textAnim = default;
[SerializeField, Range(0, 100)] int percentageWood = 0;
[SerializeField, Range(0, 100)] int percentageMeat = 0;
[Space]
[SerializeField] Sprite rock = default;
[SerializeField] Sprite paper = default;
[SerializeField] Sprite scisors = default;
[SerializeField] Sprite deathSprite = default;
[SerializeField] Animator playerAnim = default;
[SerializeField] Animator anim = default;
[SerializeField] Image image = default;
[SerializeField] GameObject[] heart = default;
int life = 3;
[SerializeField] GameObject[] playerHeart = default;
int playerLife = 3;
int enemyAttack;
int playerAttack;
bool lost;
public void Attack(bool attackingWithMeat, bool attackingWithWood, int attack){
float randomNumber = Random.Range(0f, 100f);
if(randomNumber > percentageWood && attackingWithWood){
Debug.Log("Wait, that's illegal");
}
if(randomNumber > percentageMeat && attackingWithMeat){
Debug.Log("Wait, that's illegal");
}
enemyAttack = Mathf.RoundToInt(Random.Range(100f, 300f) / 100f);
playerAttack = attack;
switch (enemyAttack){
case 1:
//Rock
if(playerAttack == 2){
anim.SetTrigger("Die");
}else if(playerAttack == 3){
playerAnim.SetTrigger("Die");
}
break;
case 2:
//Paper
if (playerAttack == 3){
anim.SetTrigger("Die");
}else if (playerAttack == 1){
playerAnim.SetTrigger("Die");
}
break;
case 3:
//Scisors
if (playerAttack == 1){
anim.SetTrigger("Die");
}else if (playerAttack == 2){
playerAnim.SetTrigger("Die");
}
break;
}
}
int count;
void Update(){
if(lost && count == 0){
if (Input.anyKeyDown){
textAnim.SetTrigger("Exit");
count = 1;
}
}
}
public void ShowArm(){
switch (enemyAttack){
case 1:
//Rock
image.sprite = rock;
if (playerAttack == 2){
heart[life - 1].SetActive(false);
life--;
if (life == 0){
OnDie();
}
}else if (playerAttack == 3){
playerHeart[playerLife - 1].SetActive(false);
playerLife--;
if (playerLife == 0){
Lose();
}
}
break;
case 2:
//Paper
image.sprite = paper;
if (playerAttack == 3){
heart[life - 1].SetActive(false);
life--;
if (life == 0){
OnDie();
}
}else if (playerAttack == 1){
playerHeart[playerLife - 1].SetActive(false);
playerLife--;
if (playerLife == 0){
Lose();
}
}
break;
case 3:
//Scisors
image.sprite = scisors;
if (playerAttack == 1){
heart[life - 1].SetActive(false);
life--;
if (life == 0){
OnDie();
}
}else if (playerAttack == 2){
playerHeart[playerLife - 1].SetActive(false);
playerLife--;
if (playerLife == 0){
Lose();
}
}
break;
}
}
void Lose(){
text.ReadText(loseDialogue.sentences[0]);
lost = true;
playerHand.canCut = true;
textAnim.SetTrigger("Enter");
playerHand.GetComponentInParent<Animator>().SetTrigger("EnterDeath");
}
public void Shake(){
image.sprite = rock;
}
void OnDie(){
if (!gameObject.activeSelf)
return;
GetComponent<Image>().sprite = deathSprite;
StartCoroutine(Die());
}
IEnumerator Die(){
yield return new WaitForSeconds(.5f);
GameMaster.instance.CompleteGrid(GameMaster.instance.currentGrid);
}
}