using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GreenMage : MonoBehaviour
{
[Header("IFrame")]
[SerializeField] private float iFramesDuration;
[SerializeField] private int nuberOfFlashes;
private SpriteRenderer spriteRend;
[Header("Prize")]
[SerializeField] public GameObject dollar;
[SerializeField] public GameObject peach;
[SerializeField] public GameObject silverCoin;
[SerializeField] public GameObject goldCoin;
[SerializeField] public GameObject greenEmerald;
[SerializeField] public GameObject greenDiamond;
[SerializeField] public GameObject purpleEmerald;
[SerializeField] public GameObject purpleDiamond;
[SerializeField] public GameObject redEmerald;
[SerializeField] public GameObject redDiamond;
[SerializeField] public GameObject star;
[SerializeField] public GameObject goldDiamond;
[Header("Enemy")]
[SerializeField] public GameObject snail;
[SerializeField] public GameObject greenMage;
private float timer;
[Header("Attack Parameters")]
[SerializeField] private float attackCooldown;
[SerializeField] private float range;
[SerializeField] private int dmg;
[SerializeField] private int enemyHp;
[Header("Range Attack")]
[SerializeField] private Transform shootPoint;
[SerializeField] private GameObject[] mageBall;
[Header("Collider Parameters")]
[SerializeField] private float colliderDistance;
[SerializeField] private CapsuleCollider2D boxCollider;
[Header("Player Layer")]
[SerializeField] private LayerMask playerLayer;
private float cooldownTimer = Mathf.Infinity;
private Animator anim;
private GreenMagePatrol enemyPatrol;
public GameObject explosion;
private float spawnPrize;
public Slider enemyHealthBar;
public int greenMageReborn; //for spwan
public Transform spawn;
private void Awake()
{
anim = GetComponent<Animator>();
enemyPatrol = GetComponentInParent<GreenMagePatrol>();
spriteRend = GetComponent<SpriteRenderer>();
}
private void Update()
{
cooldownTimer += Time.deltaTime;
if (PlayerInSight())
{
if (cooldownTimer >= attackCooldown)
{
cooldownTimer = 0;
anim.SetTrigger("Attack");
}
}
if (enemyPatrol != null)
enemyPatrol.enabled = !PlayerInSight();
}
private void Start()
{
greenMageReborn = 0; //reset spawn to 0
}
private void RangeAttack()
{
cooldownTimer = 0;
mageBall[FindMageBall()].transform.position = shootPoint.position;
mageBall[FindMageBall()].GetComponent<MageBullet>().ActivateProjectile();
}
private int FindMageBall()
{
for (int i = 0; i < mageBall.Length; i++)
{
if (!mageBall[i].activeInHierarchy)
return i;
}
return 0;
}
private bool PlayerInSight()
{
RaycastHit2D hit =
Physics2D.BoxCast(boxCollider.bounds.center + transform.right * range * transform.localScale.x * colliderDistance,
new Vector3(boxCollider.bounds.size.x * range, boxCollider.bounds.size.y, boxCollider.bounds.size.z),
0, Vector2.left, 0, playerLayer);
return hit.collider != null;
}
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireCube(boxCollider.bounds.center + transform.right * range * transform.localScale.x * colliderDistance,
new Vector3(boxCollider.bounds.size.x * range, boxCollider.bounds.size.y, boxCollider.bounds.size.z));
}
private IEnumerator IFramesDuration()
{
for (int i = 0; i < nuberOfFlashes; i++)
{
spriteRend.color = new Color(1, 0, 0, 0.5f);
yield return new WaitForSeconds(iFramesDuration / (nuberOfFlashes * 2));
spriteRend.color = Color.white;
yield return new WaitForSeconds(iFramesDuration / (nuberOfFlashes * 2));
}
}
void Explosion()
{
Instantiate(explosion, transform.position, transform.rotation);
}
public void TakeDamge(int damageAmount)
{
enemyHp -= damageAmount;
enemyHealthBar.value = enemyHp;
if (enemyHp > 0)
{
StartCoroutine(IFramesDuration());//IFRAME
}
else if (enemyHp <= 0)
{
anim.SetTrigger("Death");
boxCollider.enabled = false;
AudioManager.instance.Play("SnailDead");
if (GetComponentInParent<GreenMagePatrol>() != null)
GetComponentInParent<GreenMagePatrol>().enabled = false;
if (GetComponent<GreenMage>() != null)
GetComponent<GreenMage>().enabled = false;
StatsPlayer.greenMageKilled++;//aumento le kill
StatsPlayer.Enemy3--;//diminuisco il nemico per completare il livello
StatsPlayer.greenMageReborn = 1;// in other script if is == 1 instantiate
PlayerPrefs.SetInt("GreenMage", StatsPlayer.greenMageKilled);//salvo la kill
Destroy(gameObject, this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).length);
Explosion();
int spawnPrize = UnityEngine.Random.Range(1, 101);
greenMageReborn = 1;
if (spawnPrize <= 60)
{
SpawnPrize1();
}
if (spawnPrize >= 61 && spawnPrize <= 80)
{
SpawnPrize2();
}
if (spawnPrize >= 81 && spawnPrize <= 90)
{
SpawnPrize3();
}
if (spawnPrize >= 91 && spawnPrize <= 95)
{
SpawnPrize4();
}
if (spawnPrize >= 96 && spawnPrize <= 99)
{
SpawnPrize5();
}
if (spawnPrize == 100)
{
SpawnPrize6();
}
}
}
void SpawnPrize1()
{
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(silverCoin, transform.position, transform.rotation);
Instantiate(silverCoin, transform.position, transform.rotation);
Instantiate(silverCoin, transform.position, transform.rotation);
}
void SpawnPrize2()
{
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(silverCoin, transform.position, transform.rotation);
Instantiate(silverCoin, transform.position, transform.rotation);
Instantiate(goldCoin, transform.position, transform.rotation);
Instantiate(goldCoin, transform.position, transform.rotation);
Instantiate(goldCoin, transform.position, transform.rotation);
}
void SpawnPrize3()
{
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(goldCoin, transform.position, transform.rotation);
Instantiate(goldCoin, transform.position, transform.rotation);
Instantiate(goldCoin, transform.position, transform.rotation);
Instantiate(greenEmerald, transform.position, transform.rotation);
Instantiate(peach, transform.position, transform.rotation);
}
void SpawnPrize4()
{
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(greenEmerald, transform.position, transform.rotation);
Instantiate(greenEmerald, transform.position, transform.rotation);
Instantiate(purpleEmerald, transform.position, transform.rotation);
}
void SpawnPrize5()
{
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(purpleEmerald, transform.position, transform.rotation);
Instantiate(purpleEmerald, transform.position, transform.rotation);
Instantiate(redEmerald, transform.position, transform.rotation);
Instantiate(peach, transform.position, transform.rotation);
Instantiate(goldDiamond, transform.position, transform.rotation);
Instantiate(snail, transform.position, transform.rotation);
SnailSpawn.snailInGame++;
}
void SpawnPrize6()
{
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(dollar, transform.position, transform.rotation);
Instantiate(greenEmerald, transform.position, transform.rotation);
Instantiate(purpleEmerald, transform.position, transform.rotation);
Instantiate(redEmerald, transform.position, transform.rotation);
Instantiate(goldDiamond, transform.position, transform.rotation);
Instantiate(goldDiamond, transform.position, transform.rotation);
Instantiate(goldDiamond, transform.position, transform.rotation);
Instantiate(greenMage, transform.position, transform.rotation);
SpawnGreenMage.greenMageInGame++;
}
}
this is a code where i spawn
if (greenMageReborn == 1)
{
Invoke(“RespawnGreenMage”, 3);
greenMageReborn = 0;
void RespawnGreenMage()
{
Instantiate(greenMageSpawn, GetComponent().spawn.position, GetComponent().spawn.rotation);
SpawnGreenMage.greenMageInGame++;
}
here i have in ispector a green mage to spawn