165 lines
4.9 KiB
C#
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);
|
|
}
|
|
}
|