Neugier Battles - Wintergarnele Studios

Programación Orientada a Objetos (Tower defense - kingdom rush)

Moderator: julianmartinez16

User avatar
wintuh
Posts: 33
Joined: Tue Jan 22, 2019 12:13 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by wintuh » Tue Mar 05, 2019 11:51 pm

Cuádros de ataque tanque: Image

Diseño de elementos que se introducirán: Lanzallamas y mortero : Image
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

User avatar
Gamba04
Posts: 25
Joined: Tue Jan 22, 2019 12:14 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by Gamba04 » Thu Mar 07, 2019 9:30 pm

Parte 1

Constructor.cs

Code: Select all

public class Constructor : MonoBehaviour {

    public ControlGeneral cg;
    public bool ocupado;
    public Vector3 prehome;
    public Vector3 home;
    public Vector3 destino;
    public int dir;
    public int velocidad;
    public TurretSlot torreta;
    public GameObject resplandor;
    public int numero = 0;
    string tag_constructor;

    public bool protegido;

    public int vida;

    void Start () {
        vida = 100;
        if (gameObject.CompareTag("ConstructorA"))
        {
            tag_constructor = "ConstructorA";
            cg = GameObject.Find("Control General A").GetComponent<ControlGeneral>();
        }
        if (gameObject.CompareTag("ConstructorB"))
        {
            tag_constructor = "ConstructorB";
            cg = GameObject.Find("Control General B").GetComponent<ControlGeneral>();
        }
        //StartCoroutine(UpdatePosition());
        prehome = transform.position;
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_constructor).Length; i++)
        {
            if (GameObject.FindGameObjectsWithTag(tag_constructor)[i] == gameObject) numero = i;
        }
        home = prehome + Vector3.down * numero * 0.5f;
        destino = home;
        dir = 1;
        velocidad = 1;
	}
	
	void Update () {
        GetComponent<SpriteRenderer>().sortingOrder = numero + 6;
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_constructor).Length; i++)
        {
            if (GameObject.FindGameObjectsWithTag(tag_constructor)[i] == gameObject) numero = i;
        }
        home = prehome + Vector3.down * numero * 0.5f;


        transform.position += (destino - transform.position).normalized * 0.01f * velocidad;

        //instante en el que llega a la torreta
        if ((transform.position - destino).magnitude < 0.1f)
        {
            if (ocupado)
            {
                ocupado = false;
                destino = home;
                torreta.disponible = false;
                torreta.encargada = false;
                torreta.vida = 1000;
                StartCoroutine(DelayConstruir());
                GetComponent<Animator>().SetTrigger("Construir");
                torreta.GetComponent<Animator>().SetTrigger("Construir");
                
            }
            else if ((transform.position - destino).magnitude < 0.02f)
            {
                transform.position = destino;
                GetComponent<Animator>().SetBool("Corriendo", false);
            }
        }
        else
        {
            GetComponent<Animator>().SetBool("Corriendo", true);
        }
        //cambio de direccion
        if (destino.x >= transform.position.x) dir = 1;
        else dir = -1;

        transform.localScale = new Vector3(-dir, 1, 1);

        if (vida <= 0)
        {
            if(torreta != null) torreta.encargada = false;
            Destroy(gameObject);
        }
        //reestablecimiento de base
        if ((destino - home).magnitude <= 1.5f && !ocupado)
        {
            destino = home;
        }
        //zona segura
        if ((transform.position - home).magnitude < 1.5f)
        {
            protegido = true;
        }
        else
        {
            protegido = false;
        }

        //torreta bloqueada
        if (ocupado && torreta.bloqueada)
        {
            ocupado = false;
            destino = home;
            torreta.encargada = false;
            if (torreta.tipotorreta == 1) cg.dinero += 100;
            if (torreta.tipotorreta == 2) cg.dinero += 200;
            if (torreta.tipotorreta == 3) cg.dinero += 300;
        }
	}
    IEnumerator DelayConstruir()
    {
        velocidad = 0;
        yield return new WaitForSeconds(1);
        velocidad = 1;
    }

}
ControlGeneral.cs

Code: Select all

public class ControlGeneral : MonoBehaviour {

    public KeyCode kIzquierda;
    public KeyCode kDerecha;
    public KeyCode kArriba;
    public KeyCode kAbajo;
    public KeyCode kAlternarD;
    public KeyCode kAlternarI;
    public KeyCode kColocar_Enviar;
    public KeyCode kEliminar;
    public KeyCode kSpawn_Reparar;
    public KeyCode kAlternarConstructor;
    public KeyCode kModo;
    public GameObject grupo;
    public GameObject tropa;
    public bool modotropas;
    public int seleccionnodo;
    public int nodoactivo;
    public GameObject[] espaciostorretas;
    public int seleccionespacio;
    public int espacioarriba;
    public int espacioabajo;
    public int espacioderecha;
    public int espacioizquierda;
    public GameObject[] nodos;
    public int tipotropa;
    public GameObject tropa1;
    public GameObject tropa2;
    public GameObject tropa3;
    public GameObject imagentropa0;
    public GameObject imagentropa1;
    public GameObject imagentropa2;
    public GameObject imagentropa3;
    public int tipotorreta;
    public GameObject imagentorreta1;
    public GameObject imagentorreta2;
    public GameObject imagentorreta3;
    public GameObject constructoractivo;
    public int seleccionconstructor;
    public GameObject constructor;
    public GameObject parentTropas;
    public GameObject pickupmoneda;

    string tag_tropas;
    string tag_constructor;
    string tag_turretslot;
    string tag_Path;
    string tag_grupo;

    int lado;
    public GameObject hud1;
    public GameObject hud2;

    public int dinero;
    public Text tdinero;
    public Text tnombre;
    public Text tprecio;
    public Text tdescripcion;
    public bool suficientedinero;



    void Start()
    {
        GameObject[] nodosorigen;
        nodosorigen = GameObject.FindGameObjectsWithTag("Path");
        nodos = new GameObject[nodosorigen.Length];
        if (gameObject.name == "Control General A")
        {
            tag_tropas = "TropasA";
            tag_constructor = "ConstructorA";
            tag_turretslot = "Turret SlotA";
            tag_Path = "PathA";
            tag_grupo = "GrupoA";
            lado = 1;
            //organizacion del array de nodos
            for (int i = 0; i < nodosorigen.Length; i++)
            {
                nodos[int.Parse(nodosorigen[i].name)] = nodosorigen[i];
            }
        }
        if (gameObject.name == "Control General B")
        {
            tag_tropas = "TropasB";
            tag_constructor = "ConstructorB";
            tag_turretslot = "Turret SlotB";
            tag_Path = "PathB";
            tag_grupo = "GrupoB";
            lado = -1;
            //organizacion del array de nodos
            for (int i = 0; i < nodosorigen.Length; i++)
            {
                nodos[nodosorigen.Length - int.Parse(nodosorigen[i].name) - 1] = nodosorigen[i];
            }
        }

        modotropas = true;
        espaciostorretas = GameObject.FindGameObjectsWithTag(tag_turretslot);

        tipotropa = 0;
        seleccionconstructor = 1;
        dinero = 600;
        StartCoroutine(BaseDinero());
        StartCoroutine(SpawnMoneda(Random.Range(1001, 5001), Random.Range(0, nodos.Length - 1)));
    }
	
	void Update () {

        grupo = GameObject.FindGameObjectsWithTag(tag_grupo)[GameObject.FindGameObjectsWithTag(tag_grupo).Length - 1];

        if (GameObject.FindGameObjectsWithTag(tag_constructor).Length == 0)
        {
            constructoractivo = null;
            seleccionconstructor = 0;
        }
        else
        {
            if (Input.GetKeyDown(kAlternarConstructor)) seleccionconstructor++;

            if (seleccionconstructor > GameObject.FindGameObjectsWithTag(tag_constructor).Length) seleccionconstructor = 1;

            if (seleccionconstructor == 1) constructoractivo = GameObject.FindGameObjectsWithTag(tag_constructor)[0];
            if (seleccionconstructor == 2) constructoractivo = GameObject.FindGameObjectsWithTag(tag_constructor)[1];
            if (seleccionconstructor == 3) constructoractivo = GameObject.FindGameObjectsWithTag(tag_constructor)[2];

            foreach (GameObject c in GameObject.FindGameObjectsWithTag(tag_constructor)) if (c == constructoractivo) c.GetComponent<Constructor>().resplandor.SetActive(true);
                else c.GetComponent<Constructor>().resplandor.SetActive(false);
        }

        if (modotropas)
        {
            //hud
            hud1.SetActive(true);
            hud2.SetActive(false);

            imagentorreta1.SetActive(false);
            imagentorreta2.SetActive(false);
            imagentorreta3.SetActive(false);


            if (Input.GetKeyDown(kAlternarD)) tipotropa++;
            if (Input.GetKeyDown(kAlternarI)) tipotropa--;
            if (tipotropa < 0) tipotropa = 0;
            if (tipotropa > 3) tipotropa = 3;

            if (tipotropa == 0)
            {
                imagentropa0.SetActive(true);
                imagentropa1.SetActive(false);
                imagentropa2.SetActive(false);
                imagentropa3.SetActive(false);
                tnombre.text = "Builder";
                tprecio.text = "500";
                tdescripcion.text = "He can build things";
                if (dinero >= 500) suficientedinero = true;
                else suficientedinero = false;
            }
            if (tipotropa == 1)
            {
                tropa = tropa1;
                imagentropa0.SetActive(false);
                imagentropa1.SetActive(true);
                imagentropa2.SetActive(false);
                imagentropa3.SetActive(false);
                tnombre.text = "Minion";
                tprecio.text = "3";
                tdescripcion.text = "Ready to die";
                if (dinero >= 3) suficientedinero = true;
                else suficientedinero = false;
            }
            if (tipotropa == 2)
            {
                tropa = tropa2;
                imagentropa0.SetActive(false);
                imagentropa1.SetActive(false);
                imagentropa2.SetActive(true);
                imagentropa3.SetActive(false);
                tnombre.text = "Tank";
                tprecio.text = "6";
                tdescripcion.text = "You can hit him all you want";
                if (dinero >= 6) suficientedinero = true;
                else suficientedinero = false;
            }
            if (tipotropa == 3)
            {
                tropa = tropa3;
                imagentropa0.SetActive(false);
                imagentropa1.SetActive(false);
                imagentropa2.SetActive(false);
                imagentropa3.SetActive(true);
                tnombre.text = "Archer";
                tprecio.text = "5";
                tdescripcion.text = "Extremely powerful.. until he gets hit";
                if (dinero >= 5) suficientedinero = true;
                else suficientedinero = false;
            }
        }
        else
        {
            //hud
            hud1.SetActive(false);
            hud2.SetActive(true);

            imagentropa0.SetActive(false);
            imagentropa1.SetActive(false);
            imagentropa2.SetActive(false);
            imagentropa3.SetActive(false);

            if (Input.GetKeyDown(kAlternarD)) tipotorreta++;
            if (Input.GetKeyDown(kAlternarI)) tipotorreta--;
            if (tipotorreta < 1) tipotorreta = 1;
            if (tipotorreta > 3) tipotorreta = 3;

            if (tipotorreta == 1)
            {
                imagentorreta1.SetActive(true);
                imagentorreta2.SetActive(false);
                imagentorreta3.SetActive(false);
                tnombre.text = "Cannon";
                tprecio.text = "100";
                tdescripcion.text = "Good damage to individual targets";
                if (dinero >= 100) suficientedinero = true;
                else suficientedinero = false;
            }
            if (tipotorreta == 2)
            {
                imagentorreta1.SetActive(false);
                imagentorreta2.SetActive(true);
                imagentorreta3.SetActive(false);
                tnombre.text = "Mortar";
                tprecio.text = "200";
                tdescripcion.text = "Can hit up to 10 targets at a time";
                if (dinero >= 200) suficientedinero = true;
                else suficientedinero = false;
            }
            if (tipotorreta == 3)
            {
                imagentorreta1.SetActive(false);
                imagentorreta2.SetActive(false);
                imagentorreta3.SetActive(true);
                tnombre.text = "Dragon";
                tprecio.text = "300";
                tdescripcion.text = "He likes spicy food..";
                if (dinero >= 300) suficientedinero = true;
                else suficientedinero = false;
            }

        }
        //suficiente dinero
        //spawn tropas
        if (Input.GetKeyDown(kSpawn_Reparar) && modotropas)
        {
            if (suficientedinero)
            {
                if (tipotropa != 0)
                {
                    Instantiate(grupo, transform.position, transform.rotation);
                    Instantiate(tropa, transform.position, transform.rotation, parentTropas.transform);
                    if (tipotropa == 1) dinero -= 3;
                    if (tipotropa == 2) dinero -= 6;
                    if (tipotropa == 3) dinero -= 5;
                }
                else
                {
                    if (GameObject.FindGameObjectsWithTag(tag_constructor).Length < 3)
                    {
                        Instantiate(constructor, constructor.transform.position, constructor.transform.rotation);
                        seleccionconstructor = 1;
                        dinero -= 500;
                    }
                }
            }
        }

        //visualización del nodo seleccionado
        for (int i = 0; i < nodos.Length; i++)
        {

            if (i == seleccionnodo && modotropas) foreach (Transform t in nodos[i].transform) { if (t.CompareTag(tag_Path)) t.GetComponent<SpriteRenderer>().enabled = true; }
            else
            {
                foreach (Transform t in nodos[i].transform) if (t.CompareTag(tag_Path)) t.GetComponent<SpriteRenderer>().enabled = false;
            }
        }
        //alternar modo
        if (Input.GetKeyDown(kModo)) modotropas = !modotropas;

        //navegación nodo
        if (modotropas)
        {
            if (Input.GetKeyDown(kDerecha)) seleccionnodo += lado;
            if (Input.GetKeyDown(kIzquierda)) seleccionnodo -= lado;

            if (Input.GetKeyDown(kColocar_Enviar)) nodoactivo = seleccionnodo;
        }
        else
        {
            //navegación torretas
            for (int i = 0; i < espaciostorretas.Length; i++)
            {
                if (espaciostorretas[i].transform.position.y > espaciostorretas[seleccionespacio].transform.position.y + 1 && ((espaciostorretas[i].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude < (espaciostorretas[espacioarriba].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude || espaciostorretas[espacioarriba].transform.position.y <= espaciostorretas[seleccionespacio].transform.position.y + 1))
                {
                    espacioarriba = i;
                }
                if (espaciostorretas[i].transform.position.y < espaciostorretas[seleccionespacio].transform.position.y - 1 && ((espaciostorretas[i].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude < (espaciostorretas[espacioabajo].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude || espaciostorretas[espacioabajo].transform.position.y >= espaciostorretas[seleccionespacio].transform.position.y - 1))
                {
                    espacioabajo = i;
                }
                if (espaciostorretas[i].transform.position.x > espaciostorretas[seleccionespacio].transform.position.x + 1 && ((espaciostorretas[i].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude < (espaciostorretas[espacioderecha].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude || espaciostorretas[espacioderecha].transform.position.x <= espaciostorretas[seleccionespacio].transform.position.x + 1))
                {
                    espacioderecha = i;
                }
                if (espaciostorretas[i].transform.position.x < espaciostorretas[seleccionespacio].transform.position.x - 1 && ((espaciostorretas[i].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude < (espaciostorretas[espacioizquierda].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude || espaciostorretas[espacioizquierda].transform.position.x >= espaciostorretas[seleccionespacio].transform.position.x - 1))
                {
                    espacioizquierda = i;
                }

            }
            if (espaciostorretas[espacioarriba].transform.position.y <= espaciostorretas[seleccionespacio].transform.position.y + 1) espacioarriba = seleccionespacio;
            if (espaciostorretas[espacioabajo].transform.position.y >= espaciostorretas[seleccionespacio].transform.position.y - 1) espacioabajo = seleccionespacio;
            if (espaciostorretas[espacioderecha].transform.position.x <= espaciostorretas[seleccionespacio].transform.position.x + 1) espacioderecha = seleccionespacio;
            if (espaciostorretas[espacioizquierda].transform.position.x >= espaciostorretas[seleccionespacio].transform.position.x - 1) espacioizquierda = seleccionespacio;

            if (Input.GetKeyDown(kArriba)) seleccionespacio = espacioarriba;
            if (Input.GetKeyDown(kIzquierda)) seleccionespacio = espacioizquierda;
            if (Input.GetKeyDown(kAbajo)) seleccionespacio = espacioabajo;
            if (Input.GetKeyDown(kDerecha)) seleccionespacio = espacioderecha;
            //colocar torreta
            if (Input.GetKeyDown(kColocar_Enviar) && GameObject.FindGameObjectsWithTag(tag_constructor).Length != 0)
            {
                if (!constructoractivo.GetComponent<Constructor>().ocupado && espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().disponible && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().encargada && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().bloqueada && suficientedinero)
                {
                    constructoractivo.GetComponent<Constructor>().torreta = espaciostorretas[seleccionespacio].GetComponent<TurretSlot>();
                    espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta = tipotorreta;
                    espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().encargada = true;
                    constructoractivo.GetComponent<Constructor>().ocupado = true;
                    constructoractivo.GetComponent<Constructor>().destino = espaciostorretas[seleccionespacio].transform.position;
                    if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 1) dinero -= 100;
                    if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 2) dinero -= 200;
                    if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 3) dinero -= 300;
                }
            }
            //eliminar torreta
            if (Input.GetKeyDown(kEliminar) && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().disponible)
            {
                if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 1) dinero += 50;
                if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 2) dinero += 100;
                if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 3) dinero += 150;
                espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().disponible = true;
            }
        }
        //visualizacion de slot seleccionado
        for (int i = 0; i < espaciostorretas.Length; i++)
        {
            if (i == seleccionespacio && !modotropas) espaciostorretas[i].GetComponent<SpriteRenderer>().enabled = true;
            else espaciostorretas[i].GetComponent<SpriteRenderer>().enabled = false;
        }
        //limites seleccion nodos
        if (seleccionnodo < 0) seleccionnodo = 0;
        if (seleccionnodo > nodos.Length - 1) seleccionnodo = nodos.Length - 1;

        tdinero.text = dinero.ToString();
    }
    IEnumerator BaseDinero()
    {
        yield return new WaitForSeconds(5);
        dinero += 10;
        StartCoroutine(BaseDinero());
    }
    IEnumerator SpawnMoneda(int tiempo, int rand)
    {
        for (int i = 0; i < tiempo; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        Instantiate(pickupmoneda, nodos[rand].transform.position, pickupmoneda.transform.rotation);
        tiempo = Random.Range(1001, 5001);
        rand = Random.Range(0, nodos.Length - 1);
        StartCoroutine(SpawnMoneda(tiempo, rand));
    }
}
PickUpMoneda.cs

Code: Select all

public class PickUpMoneda : MonoBehaviour {

    int cantidad;
	void Start () {
        cantidad = Random.Range(10, 100);
        StartCoroutine(Delay());
	}
	
    void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("TropasA") || collision.CompareTag("TropasB"))
        {
            collision.GetComponent<Tropa>().grupo.GetComponent<Translacion>().cg.dinero += cantidad;
            Destroy(gameObject);
        }
    }

    IEnumerator Delay()
    {
        for (int i = 0; i < 1000; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        Destroy(gameObject);
    }
}
Proyectil.cs

Code: Select all

public class Proyectil : MonoBehaviour {

    public Vector3 origen;
    public Vector3 destino;
    public bool girahaciadireccion;
    public float speed;
    public float altura;
    public Vector3 posicionrecta;
    Vector3 posicionanterior;

	void Start () {
        origen = transform.position;
        posicionanterior = transform.position;
        posicionrecta = transform.position;
        StartCoroutine(DelayDestroy());
	}
	
	void Update () {
        posicionrecta += (destino - origen).normalized * Time.deltaTime * speed;
        transform.position = posicionrecta + (Vector3.up * Mathf.Pow((origen - destino).magnitude * altura, 2)) + (Vector3.down * Mathf.Pow(Mathf.Abs((posicionrecta - origen).magnitude - (posicionrecta - destino).magnitude) * altura, 2));
        if (girahaciadireccion) transform.rotation = Quaternion.LookRotation(Vector3.forward, transform.position - posicionanterior);
        if ((posicionrecta - destino).magnitude < 0.1f) Destroy(gameObject);
	}
    IEnumerator DelayDestroy()
    {
        yield return new WaitForSeconds((destino - origen).magnitude / speed);
        Destroy(gameObject);
    }
}
SignoExclamacion.cs

Code: Select all

public class SignoExclamacion : MonoBehaviour {

    float a = 1;

	void Start () {
        StartCoroutine(Fade());
	}
	
    IEnumerator Fade()
    {
        yield return new WaitForSeconds(0.7f);
        for (int i = 0; i < 10; i++)
        {
            a -= 0.1f;
            GetComponent<SpriteRenderer>().color = new Color(1, 1, 1, a);
            yield return new WaitForSeconds(0.03f);
        }
        Destroy(gameObject);
    }
}
Torreta1.cs

Code: Select all

public class Torreta1 : MonoBehaviour {

    public float rango;
    public float ritmoataque;
    public int daño;

    public float dist;
    int mascercano;
    public Tropa enemigo;
    public bool atacando;
    GameObject proyectil;
    public GameObject bala;

    Vector3 offsetProyectil;
    string tag_tropasEnemigas;


	void Start () {
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotA"))
        {
            tag_tropasEnemigas = "TropasB";
            offsetProyectil = new Vector3(0.47f, 0.15f, 0);
        }
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotB"))
        {
            tag_tropasEnemigas = "TropasA";
            offsetProyectil = new Vector3(-0.47f, 0.15f, 0);
        }
        StartCoroutine(Disparo());
    }
    void OnEnable()
    {
        StartCoroutine(Disparo());
    }
    void Update () {
        
        //enemigo mas cercano
        dist = Mathf.Infinity;
        mascercano = 0;
        if (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas).Length > 0)
        {
            for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_tropasEnemigas).Length; i++)
            {
                if ((GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - transform.position).magnitude < dist)
                {
                    dist = (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - transform.position).magnitude;
                    mascercano = i;
                }

            }
            enemigo = GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[mascercano].GetComponent<Tropa>();
        }
        //atacando
        if (enemigo != null)
        {
            if ((enemigo.transform.position - transform.position).magnitude <= rango)
            {
                atacando = true;
            }
            else
            {
                atacando = false;
            }
            if (Mathf.Abs(enemigo.transform.position.x - transform.position.x) > Mathf.Abs(enemigo.transform.position.y - transform.position.y))
            {
                if (enemigo.transform.position.x - transform.position.x > 0)
                {
                    GetComponent<Animator>().SetBool("Derecha", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    offsetProyectil = new Vector3(0.5f, 0.15f, 0);
                }
                else
                {
                    GetComponent<Animator>().SetBool("Izquierda", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    offsetProyectil = new Vector3(-0.5f, 0.15f, 0);
                }
            }
            if (Mathf.Abs(enemigo.transform.position.x - transform.position.x) < Mathf.Abs(enemigo.transform.position.y - transform.position.y))
            {
                if (enemigo.transform.position.y - transform.position.y > 0)
                {
                    GetComponent<Animator>().SetBool("Arriba", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    offsetProyectil = new Vector3(0, 0.5f, 0);
                }
                else
                {
                    GetComponent<Animator>().SetBool("Abajo", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    offsetProyectil = new Vector3(0, 0.5f, 0);
                }
            }
        }
        else
        {
            atacando = false;
        }
        if(transform.localPosition.y > 1) GetComponent<SpriteRenderer>().sortingOrder = 7;
        else GetComponent<SpriteRenderer>().sortingOrder = 2;
    }

    IEnumerator Disparo()
    {

        if (enemigo != null && atacando)
        {
            GetComponent<Animator>().SetBool("Ataque", true);
            StartCoroutine(HacerDañoADistancia(enemigo));
            proyectil = Instantiate(bala, transform.position + offsetProyectil, transform.rotation);
            proyectil.GetComponent<Proyectil>().destino = enemigo.transform.position;
        }
        else
        {
            GetComponent<Animator>().SetBool("Ataque", false);
        }
        for (int i = 0; i < ritmoataque * 50; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        StartCoroutine(Disparo());
    }
    IEnumerator HacerDañoADistancia(Tropa enem)
    {
        yield return new WaitForSeconds((enem.transform.position - transform.position).magnitude / bala.GetComponent<Proyectil>().speed - 0.5f);
        if (enem != null)
        {
            enem.vida -= daño;
            enem.GetComponent<Animator>().SetTrigger("Daño");
        }
    }
    
    
}
Torreta2.cs

Code: Select all

public class Torreta2 : MonoBehaviour {

    public float rango;
    public float ritmoataque;
    public int daño;

    public float dist;
    int mascercano;
    public Tropa enemigo;
    public bool atacando;
    GameObject proyectil;
    public GameObject bala;

    Vector3 offsetProyectil;
    string tag_tropasEnemigas;
    public int cantidadenemigos;


	void Start () {
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotA"))
        {
            tag_tropasEnemigas = "TropasB";
            offsetProyectil = new Vector3(0.47f, 0.15f, 0);
        }
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotB"))
        {
            tag_tropasEnemigas = "TropasA";
            offsetProyectil = new Vector3(-0.47f, 0.15f, 0);
        }
        StartCoroutine(Disparo());
    }
    void OnEnable()
    {
        StartCoroutine(Disparo());
    }
    void Update () {
        
        //enemigo mas cercano
        dist = Mathf.Infinity;
        mascercano = 0;
        if (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas).Length > 0)
        {
            for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_tropasEnemigas).Length; i++)
            {
                if ((GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - transform.position).magnitude < dist && (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - transform.position).magnitude > 2)
                {
                    dist = (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - transform.position).magnitude;
                    mascercano = i;
                }

            }
            enemigo = GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[mascercano].GetComponent<Tropa>();
        }

        //atacando
        if (enemigo != null)
        {
            if ((enemigo.transform.position - transform.position).magnitude <= rango)
            {
                atacando = true;
            }
            else
            {
                atacando = false;
            }
            if (Mathf.Abs(enemigo.transform.position.x - transform.position.x) > Mathf.Abs(enemigo.transform.position.y - transform.position.y))
            {
                if (enemigo.transform.position.x - transform.position.x > 0)
                {
                    GetComponent<Animator>().SetBool("Derecha", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    offsetProyectil = new Vector3(0.5f, 0.15f, 0);
                }
                else
                {
                    GetComponent<Animator>().SetBool("Izquierda", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    offsetProyectil = new Vector3(-0.5f, 0.15f, 0);
                }
            }
            if (Mathf.Abs(enemigo.transform.position.x - transform.position.x) < Mathf.Abs(enemigo.transform.position.y - transform.position.y))
            {
                if (enemigo.transform.position.y - transform.position.y > 0)
                {
                    GetComponent<Animator>().SetBool("Arriba", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    offsetProyectil = new Vector3(0, 0.5f, 0);
                }
                else
                {
                    GetComponent<Animator>().SetBool("Abajo", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    offsetProyectil = new Vector3(0, 0.5f, 0);
                }
            }
        }
        else
        {
            atacando = false;
        }
        if(transform.localPosition.y > 1) GetComponent<SpriteRenderer>().sortingOrder = 7;
        else GetComponent<SpriteRenderer>().sortingOrder = 2;
    }

    IEnumerator Disparo()
    {

        if (enemigo != null && atacando)
        {
            GetComponent<Animator>().SetBool("Ataque", true);
            GetComponent<Animator>().SetTrigger("Disparo");
            StartCoroutine(HacerDañoADistancia(enemigo, cantidadenemigos, 1, enemigo.transform.position));
            proyectil = Instantiate(bala, transform.position + offsetProyectil, transform.rotation);
            proyectil.GetComponent<Proyectil>().destino = enemigo.transform.position;
        }
        else
        {
            GetComponent<Animator>().SetBool("Ataque", false);
        }
        for (int i = 0; i < ritmoataque * 50; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        StartCoroutine(Disparo());
    }
    IEnumerator HacerDañoADistancia(Tropa enem, int cantidadenem, float radio, Vector3 posicionenem)
    {
        int cont = 0;
        yield return new WaitForSeconds((enem.transform.position - transform.position).magnitude / bala.GetComponent<Proyectil>().speed - 0.5f);
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_tropasEnemigas).Length; i++)
        {
            if (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i] != null)
            {
                if ((GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - posicionenem).magnitude < radio && cont <= cantidadenem)
                {
                    GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].GetComponent<Tropa>().vida -= daño;
                    GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].GetComponent<Animator>().SetTrigger("Daño");
                    cont++;
                }
            }
        }
    }
    
    
}
Torreta3.cs

Code: Select all

public class Torreta3 : MonoBehaviour {

    public float rango;
    public float ritmoataque;
    public int daño;

    public float dist;
    int mascercano;
    public Tropa enemigo;
    public bool atacando;

    string tag_tropasEnemigas;


	void Start () {
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotA"))
        {
            tag_tropasEnemigas = "TropasB";
        }
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotB"))
        {
            tag_tropasEnemigas = "TropasA";
        }
        StartCoroutine(Disparo());
    }
    void OnEnable()
    {
        StartCoroutine(Disparo());
    }
    void Update () {
        
        //enemigo mas cercano
        dist = Mathf.Infinity;
        mascercano = 0;
        if (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas).Length > 0)
        {
            for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_tropasEnemigas).Length; i++)
            {
                if ((GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - transform.position).magnitude < dist)
                {
                    dist = (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - transform.position).magnitude;
                    mascercano = i;
                }

            }
            enemigo = GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[mascercano].GetComponent<Tropa>();
        }
        //atacando
        if (enemigo != null)
        {
            if ((enemigo.transform.position - transform.position).magnitude <= rango)
            {
                atacando = true;
            }
            else
            {
                atacando = false;
            }
            if (Mathf.Abs(enemigo.transform.position.x - transform.position.x) > Mathf.Abs(enemigo.transform.position.y - transform.position.y))
            {
                if (enemigo.transform.position.x - transform.position.x > 0)
                {
                    GetComponent<Animator>().SetBool("Derecha", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                }
                else
                {
                    GetComponent<Animator>().SetBool("Izquierda", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                }
            }
            if (Mathf.Abs(enemigo.transform.position.x - transform.position.x) < Mathf.Abs(enemigo.transform.position.y - transform.position.y))
            {
                if (enemigo.transform.position.y - transform.position.y > 0)
                {
                    GetComponent<Animator>().SetBool("Arriba", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                }
                else
                {
                    GetComponent<Animator>().SetBool("Abajo", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                }
            }
        }
        else
        {
            atacando = false;
        }
        if(transform.localPosition.y > 1) GetComponent<SpriteRenderer>().sortingOrder = 7;
        else GetComponent<SpriteRenderer>().sortingOrder = 2;

       
    }

    IEnumerator Disparo()
    {
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_tropasEnemigas).Length; i++)
        {
            if (GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i] != null)
            {
                if ((GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].transform.position - transform.position).magnitude < rango)
                {
                    GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].GetComponent<Tropa>().vida -= daño;
                    GameObject.FindGameObjectsWithTag(tag_tropasEnemigas)[i].GetComponent<Animator>().SetTrigger("Daño");
                }
            }
        }
        if (enemigo != null && atacando)
        {
            GetComponent<Animator>().SetBool("Ataque", true);

        }
        else
        {
            GetComponent<Animator>().SetBool("Ataque", false);
        }
        for (int i = 0; i < ritmoataque * 50; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        StartCoroutine(Disparo());
    }
    
    
}
Translacion.cs

Code: Select all

public class Translacion : MonoBehaviour {


    public GameObject[] nodos;
    public float ubicacionfrontal;
    public float ubicaciontrasera;
    public float separacion;
    public Vector3 frente;
    public Vector3 atras;

    public int nodoactivo;
    public float magnitudactual;
    public float diferenciaubicaciones;

    public bool[] arraytropas;
    public bool lleno;
    public int cantidadtropas;

    public int numerofila;
    public int dir;
    public ControlGeneral cg;
    public bool debugnumerofila;

    float offsettiempo;
    public bool enfrentamiento;

    public bool estacionado;

    void Start () {
        offsettiempo = Time.time;
        diferenciaubicaciones = 5;
        ubicacionfrontal = 0;
        arraytropas = new bool[10];
        numerofila = 0;

    }//Reemplazar ControlGeneral y array de Translacion

    void Update() {
        //información de ControlGeneral
        nodos = cg.nodos;
        nodoactivo = cg.nodoactivo;
        
        //float ubicación --> posición real
        for (int i = 0; i < nodos.Length - 1; i++)
        {

            if (ubicacionfrontal >= i * 100f / (nodos.Length - 1) && ubicacionfrontal <= (i + 1) * 100f / (nodos.Length - 1))
            {
                frente = nodos[i].transform.position + (nodos[i + 1].transform.position - nodos[i].transform.position) * ((ubicacionfrontal - i * 100f / (nodos.Length - 1)) / (100f / (nodos.Length - 1)));
                magnitudactual = (nodos[i + 1].transform.position - nodos[i].transform.position).magnitude;
            }

            if (ubicaciontrasera >= i * 100f / (nodos.Length - 1) && ubicaciontrasera <= (i + 1) * 100f / (nodos.Length - 1))
            {
                atras = nodos[i].transform.position + (nodos[i + 1].transform.position - nodos[i].transform.position) * ((ubicaciontrasera - i * 100f / (nodos.Length - 1)) / (100f / (nodos.Length - 1)));

            }

        }

        //voy a hacerme las pastas, anda viendo el codigo <<<<<

        //movimiento hacia nodoactivo
        if (ubicacionfrontal + numerofila * 1.5f < nodoactivo * 100 / (nodos.Length - 1) + 2.5f && !enfrentamiento)
        {
            ubicacionfrontal += 0.05f * separacion / magnitudactual;
            dir = 1;
        }
        if (ubicacionfrontal + numerofila * 1.5f > nodoactivo * 100 / (nodos.Length - 1) + 2.5f)
        {
            ubicacionfrontal -= 0.05f * separacion / magnitudactual;
            dir = -1;
        }

        if (Mathf.Abs((ubicacionfrontal + numerofila * 1.5f) - (nodoactivo * 100 / (nodos.Length - 1) + 2.5f)) < 1) estacionado = true;
        else estacionado = false;

        //limites de ubicacion frontal
            if (ubicacionfrontal < 0) ubicacionfrontal = 0;
        if (ubicacionfrontal > 100) ubicacionfrontal = 100;

        //separacion ubicaciones
        diferenciaubicaciones += (5 / magnitudactual - diferenciaubicaciones) * 0.01f;
        ubicaciontrasera = ubicacionfrontal - diferenciaubicaciones;

        //limite ubicacion trasera
        if (ubicaciontrasera < 0) ubicaciontrasera = 0;

        //posicion grupo
        transform.position = atras + (frente - atras) * 0.5f;


        Debug.DrawRay(atras, frente - atras, Color.white);

        //bool lleno
        lleno = true;
        cantidadtropas = 0;
        foreach (bool b in arraytropas) if (!b) lleno = false; else cantidadtropas++;
        //debug enfrentamiento grupo vacio  
        if (cantidadtropas == 0) enfrentamiento = false;

        //fusion grupos
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(gameObject.tag).Length; i++)
        {
            if (this == GameObject.FindGameObjectsWithTag(gameObject.tag)[i].GetComponent<Translacion>())
            {
                for (int o = 0; o < GameObject.FindGameObjectsWithTag(gameObject.tag).Length; o++)
                {
                    if (Mathf.Abs(this.ubicacionfrontal - GameObject.FindGameObjectsWithTag(gameObject.tag)[o].GetComponent<Translacion>().ubicacionfrontal) < 2 && i > o && Time.time - offsettiempo > 1)
                    {
                        if (cantidadtropas + GameObject.FindGameObjectsWithTag(gameObject.tag)[o].GetComponent<Translacion>().cantidadtropas <= 10)
                        {
                            Destroy(GameObject.FindGameObjectsWithTag(gameObject.tag)[i].gameObject);
                        }
                        else
                        {
                            numerofila = GameObject.FindGameObjectsWithTag(gameObject.tag)[o].GetComponent<Translacion>().numerofila + 1;
                        }
                    }

                }
            }
            

        }
        //Debug numero fila
        debugnumerofila = false;
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(gameObject.tag).Length; i++)
        {
            if (GameObject.FindGameObjectsWithTag(gameObject.tag)[i].GetComponent<Translacion>().numerofila == numerofila - 1) debugnumerofila = true;
        }
            if (!debugnumerofila && numerofila > 0) numerofila--;
    
    }

    
}
Juan Camilo Quintero

POO1

User avatar
Gamba04
Posts: 25
Joined: Tue Jan 22, 2019 12:14 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by Gamba04 » Thu Mar 07, 2019 9:31 pm

Parte 2


Tropa.cs

Code: Select all

public class Tropa : MonoBehaviour {

    public int vida;
    public float rango;
    public float ritmoataque;
    public int dañoataque;
    public float tamaño;
    public bool ataqueadistancia;

    public GameObject flecha;
    public float dist;
    public int mascercano;
    public GameObject grupo;
    public bool entro;
    public int dir;
    public Tropa enemigotropa;
    public Constructor enemigoconstructor;
    public TurretSlot enemigotorreta;

    string tag_Grupo;
    string tag_TropaEnemiga;
    string tag_ConstructorEnemigo;
    string tag_TorretaEnemiga;

    public bool atacando;
    public GameObject signoexclamacion;
    bool exclamacion;
    int frente;
    GameObject proyectil;
    public string tipoenemigo;
    public bool prioridadtropas;
    public Vector3 areabase;
    public GameObject silueta;
    float r;
    float g;
    float b;


    void Start () {
        r = GetComponent<SpriteRenderer>().color.r;
        g = GetComponent<SpriteRenderer>().color.g;
        b = GetComponent<SpriteRenderer>().color.b;
        if (gameObject.CompareTag("TropasA"))
        {
            tag_Grupo = "GrupoA";
            tag_TropaEnemiga = "TropasB";
            tag_ConstructorEnemigo = "ConstructorB";
            tag_TorretaEnemiga = "Turret SlotB";
            frente = 1;
        }
        if (gameObject.CompareTag("TropasB"))
        {
            tag_Grupo = "GrupoB";
            tag_TropaEnemiga = "TropasA";
            tag_ConstructorEnemigo = "ConstructorA";
            tag_TorretaEnemiga = "Turret SlotA";
            frente = -1;
        }
        dir = 1;
        //adoptamiento de grupo
        dist = Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_Grupo)[0].transform.position).magnitude);
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_Grupo).Length; i++)
        {
            if (Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_Grupo)[i].transform.position).magnitude) < dist)
            {
                dist = Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_Grupo)[i].transform.position).magnitude);
                mascercano = i;
            }
        }
        grupo = GameObject.FindGameObjectsWithTag(tag_Grupo)[mascercano];

            //Anotarse a la fila
        if (!grupo.GetComponent<Translacion>().lleno)
        {
            for (int i = 0; i < grupo.GetComponent<Translacion>().arraytropas.Length; i++)
            {
                if (!grupo.GetComponent<Translacion>().arraytropas[i])
                {
                    grupo.GetComponent<Translacion>().arraytropas[i] = true;
                    entro = true;
                    break;
                }

            }

        }
        
        StartCoroutine(Ataque());
    }
	
	void Update () {
        //silueta base
        if ((areabase - transform.position).magnitude < 2.5f - frente * 0.5f)
        {
            silueta.SetActive(true);
        }
        else
        {
            silueta.SetActive(false);
        }
        //readopatmiento de grupo
        if (grupo == null || (grupo.GetComponent<Translacion>().lleno && !entro))
        {
            entro = false;
            mascercano = 0;
            //dist = Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_Grupo)[0].transform.position).magnitude);
            dist = Mathf.Infinity;
            for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_Grupo).Length; i++)
            {
                if (Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_Grupo)[i].transform.position).magnitude) < dist && !GameObject.FindGameObjectsWithTag(tag_Grupo)[i].GetComponent<Translacion>().lleno)
                {
                    dist = Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_Grupo)[i].transform.position).magnitude);
                    mascercano = i;
                }
            }
            grupo = GameObject.FindGameObjectsWithTag(tag_Grupo)[mascercano].gameObject;
            //Anotarse a la fila
            if (!grupo.GetComponent<Translacion>().lleno)
            {
                for (int i = 0; i < grupo.GetComponent<Translacion>().arraytropas.Length; i++)
                {
                    if (!grupo.GetComponent<Translacion>().arraytropas[i])
                    {
                        grupo.GetComponent<Translacion>().arraytropas[i] = true;
                        entro = true;
                        break;
                    }

                }

            }
        }
        //atracción al grupo
        GetComponent<Rigidbody2D>().AddForce((grupo.transform.position - transform.position) * 20 * Random.Range(0, 20));

        if ((grupo.transform.position - transform.position).magnitude > 2) transform.position = grupo.transform.position;

        if (grupo.GetComponent<Translacion>().frente.x > grupo.GetComponent<Translacion>().atras.x) dir = 1 * grupo.GetComponent<Translacion>().dir;
        if (grupo.GetComponent<Translacion>().frente.x < grupo.GetComponent<Translacion>().atras.x) dir = -1 * grupo.GetComponent<Translacion>().dir;

        transform.localScale = new Vector3(-dir, 1, 1) * tamaño;

        dist = Mathf.Infinity;
        prioridadtropas = false;
        //enemigo mas cercano
        if (GameObject.FindGameObjectsWithTag(tag_TropaEnemiga).Length > 0)
        {
            mascercano = 0;
            for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_TropaEnemiga).Length; i++)
            {
                if (Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_TropaEnemiga)[i].transform.position).magnitude) < dist)
                {
                    dist = Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_TropaEnemiga)[i].transform.position).magnitude);
                    mascercano = i;
                    tipoenemigo = "Tropa";
                }
            }
                enemigotropa = GameObject.FindGameObjectsWithTag(tag_TropaEnemiga)[mascercano].GetComponent<Tropa>();
            if(enemigotropa != null) if ((transform.position - enemigotropa.transform.position).magnitude <= rango) prioridadtropas = true;
        }
            //constructor mas cercano
        if (GameObject.FindGameObjectsWithTag(tag_ConstructorEnemigo).Length > 0 )
        {
            mascercano = 0;
            
            for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_ConstructorEnemigo).Length; i++)
                {
                    if (Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_ConstructorEnemigo)[i].transform.position).magnitude) < dist && !prioridadtropas)
                    {
                        dist = Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_ConstructorEnemigo)[i].transform.position).magnitude);
                        mascercano = i;
                        tipoenemigo = "Constructor";
                    }
                }
            enemigoconstructor = GameObject.FindGameObjectsWithTag(tag_ConstructorEnemigo)[mascercano].GetComponent<Constructor>();
        }
            // torreta mas cercana
        if (GameObject.FindGameObjectsWithTag(tag_TorretaEnemiga).Length > 0 && ataqueadistancia)
        {
            mascercano = 0;
            for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_TorretaEnemiga).Length; i++)
                {
                    if (Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_TorretaEnemiga)[i].transform.position).magnitude) < dist && !GameObject.FindGameObjectsWithTag(tag_TorretaEnemiga)[i].GetComponent<TurretSlot>().disponible && !prioridadtropas)
                    {
                        dist = Mathf.Abs((transform.position - GameObject.FindGameObjectsWithTag(tag_TorretaEnemiga)[i].transform.position).magnitude);
                        mascercano = i;
                        tipoenemigo = "Torreta";
                    }
                }
                enemigotorreta = GameObject.FindGameObjectsWithTag(tag_TorretaEnemiga)[mascercano].GetComponent<TurretSlot>();
        }

        //muerte
        if (vida <= 0)
        {
            //Desanotarse de la fila
            for (int i = grupo.GetComponent<Translacion>().arraytropas.Length - 1; i >= 0; i--)
            {
                if (grupo.GetComponent<Translacion>().arraytropas[i])
                {
                    grupo.GetComponent<Translacion>().arraytropas[i] = false;
                    break;
                }

            }
            Destroy(gameObject);
        }
        //atacando
        if (tipoenemigo == "Tropa")
        {
            if (enemigotropa != null)
            {
                if ((transform.position - enemigotropa.transform.position).magnitude <= rango)
                {
                    atacando = true;
                    grupo.GetComponent<Translacion>().enfrentamiento = true;
                    if (!exclamacion)
                    {
                        exclamacion = true;
                        Instantiate(signoexclamacion, transform.position + new Vector3(0.5f * frente, 0.5f, 0), transform.rotation);
                    }

                }
                else
                {
                    atacando = false;
                    exclamacion = false;
                }
            }
            else
            {
                atacando = false;
            }
        }
        if (tipoenemigo == "Constructor")
        {
            if (enemigoconstructor != null)
            {
                if ((transform.position - enemigoconstructor.transform.position).magnitude <= rango && !enemigoconstructor.protegido)
                {
                    atacando = true;
                    grupo.GetComponent<Translacion>().enfrentamiento = true;
                    if (!exclamacion)
                    {
                        exclamacion = true;
                        Instantiate(signoexclamacion, transform.position + new Vector3(0.5f * frente, 0.5f, 0), transform.rotation);
                    }
                }
                else
                {
                    atacando = false;
                    exclamacion = false;
                }
            }
            else
            {
                atacando = false;
            }
        }
        if (tipoenemigo == "Torreta" )
        {
            if (!enemigotorreta.disponible && ataqueadistancia)
            {
                if ((transform.position - enemigotorreta.transform.position).magnitude <= rango && grupo.GetComponent<Translacion>().estacionado)
                {
                    atacando = true;
                    if (!exclamacion)
                    {
                        exclamacion = true;
                        Instantiate(signoexclamacion, transform.position + new Vector3(0.5f * frente, 0.5f, 0), transform.rotation);
                    }
                }
                else
                {
                    atacando = false;
                    exclamacion = false;
                }
            }
            else
            {
                atacando = false;
            }
        }
        
        transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.y * 0.1f);

        if (!grupo.GetComponent<Translacion>().estacionado)
        {
            GetComponent<Animator>().SetBool("Corriendo", true);
        }
        else
        {
            GetComponent<Animator>().SetBool("Corriendo", false);
        }
    }

    IEnumerator Ataque()
    {
        if (atacando)
        {
            GetComponent<Animator>().SetBool("Ataque", true);
            if (tipoenemigo == "Tropa" && enemigotropa != null)
            {
                if (!ataqueadistancia)
                {
                    enemigotropa.vida -= dañoataque;
                    enemigotropa.GetComponent<Animator>().SetTrigger("Daño");
                }
                else StartCoroutine(HacerDañoADistancia(enemigotropa, null, null));
                
            }
            if (tipoenemigo == "Constructor" && enemigoconstructor != null)
            {
                if (!ataqueadistancia) enemigoconstructor.vida -= dañoataque;
                else StartCoroutine(HacerDañoADistancia(null, enemigoconstructor, null));
                //enemigo.GetComponent<Animator>().SetTrigger("Daño");
            }
            if (tipoenemigo == "Torreta" && ataqueadistancia && enemigotorreta != null)
            {
                if (!ataqueadistancia) enemigotorreta.vida -= dañoataque;
                else StartCoroutine(HacerDañoADistancia(null, null, enemigotorreta));
                //enemigo.GetComponent<Animator>().SetTrigger("Daño");
            }
            if (ataqueadistancia)
            {
                proyectil = Instantiate(flecha, transform.position, transform.rotation);
                if (tipoenemigo == "Tropa" && enemigotropa != null) proyectil.GetComponent<Proyectil>().destino = enemigotropa.transform.position;
                if (tipoenemigo == "Constructor" && enemigoconstructor != null) proyectil.GetComponent<Proyectil>().destino = enemigoconstructor.transform.position;
                if (tipoenemigo == "Torreta" && enemigotorreta != null) proyectil.GetComponent<Proyectil>().destino = enemigotorreta.transform.position;
            }
        }
        else
        {
            GetComponent<Animator>().SetBool("Ataque", false);
        }
        for (int i = 0; i < ritmoataque * 50; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        grupo.GetComponent<Translacion>().enfrentamiento = false;
        StartCoroutine(Ataque());
    }
    IEnumerator Daño()
    {
        float cr = r;
        float cg = g;
        float cb = b;
        for (int i = 0; i < 50; i++)
        {
            cg -= 0.02f * g;
            cb -= 0.02f * b;
            GetComponent<SpriteRenderer>().color = new Color(cr, cg, cb);
            yield return new WaitForSeconds(0.01f);
        }
        for (int i = 0; i < 50; i++)
        {
            cg += 0.02f * g;
            cb += 0.02f * b;
            GetComponent<SpriteRenderer>().color = new Color(cr, cg, cb);
            yield return new WaitForSeconds(0.01f);
        }
    }
    IEnumerator HacerDañoADistancia(Tropa enem, Constructor constructor, TurretSlot torreta)
    {
        if (enem != null)
        {
        yield return new WaitForSeconds((enem.transform.position - transform.position).magnitude / flecha.GetComponent<Proyectil>().speed);
            enem.vida -= dañoataque;
            enem.GetComponent<Animator>().SetTrigger("Daño");
        }
        if (torreta != null)
        {
        yield return new WaitForSeconds((torreta.transform.position - transform.position).magnitude / flecha.GetComponent<Proyectil>().speed);
            torreta.vida -= dañoataque;
        }
        if (constructor != null)
        {
        yield return new WaitForSeconds((constructor.transform.position - transform.position).magnitude / flecha.GetComponent<Proyectil>().speed);
            constructor.vida -= dañoataque;
        }
    }
}
TurretSlot.cs

Code: Select all

public class TurretSlot : MonoBehaviour {

    public bool disponible;
    public bool encargada;
    public bool bloqueada;
    public int tipotorreta;
    public GameObject torreta1;
    public GameObject torreta2;
    public GameObject torreta3;
    public TurretSlot torretacentral;

    public int vida;

    void Start () {
        disponible = true;
        tipotorreta = 1;
        vida = 1000;
	}
	
	void Update () {
        if (!disponible && !bloqueada)
        {
            if (torretacentral != null)
            {
                torretacentral.bloqueada = true;
                torretacentral.disponible = true;
            }

            if (tipotorreta == 1)
            {
                torreta1.SetActive(true);
                torreta2.SetActive(false);
                torreta3.SetActive(false);
            }
            if (tipotorreta == 2)
            {
                torreta1.SetActive(false);
                torreta2.SetActive(true);
                torreta3.SetActive(false);
            }
            if (tipotorreta == 3)
            {
                torreta1.SetActive(false);
                torreta2.SetActive(false);
                torreta3.SetActive(true);
            }
        }
        else
        {
            if (torretacentral != null)
            {
                torretacentral.bloqueada = false;
            }

            torreta1.SetActive(false);
            torreta2.SetActive(false);
            torreta3.SetActive(false);
        }
        if (vida <= 0)
        {
            disponible = true;
            vida = 1000;
        }
	}
}
Mas adelante se hará una reconstrucción del código para proveer un mejor diseño..
Juan Camilo Quintero

POO1

User avatar
Gamba04
Posts: 25
Joined: Tue Jan 22, 2019 12:14 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by Gamba04 » Thu Mar 07, 2019 9:34 pm

Videos:

Links de drive temporales: (debido a un inconveniente de parte de Martin)

https://drive.google.com/open?id=11LVdW ... eGDa1oYa7W

https://drive.google.com/open?id=1Ny-zc ... i7BoYQEg67

Recomendable ver en camara rapida, mi computador es un poco lento...
Juan Camilo Quintero

POO1

User avatar
Gamba04
Posts: 25
Joined: Tue Jan 22, 2019 12:14 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by Gamba04 » Fri Mar 08, 2019 12:05 am

Seguimiento

¿Qué hemos hacho?
  • Se programaron las torretas Mortero y Dragón. Junto con el desarrollo del mortero se modificó el sistema de proyectiles de manera que en vez de ser una trayectoria de línea recta se realiza una parábola que termina en el objetivo indicado, variando con atributos de altura y velocidad que son definidos para cada tipo de proyectil. Esta torreta hace daño en área donde cae y golpea a un máximo de 10 enemigos. El dragón hace daño cada frame con su fuego a un rango muy pequeño, pero siendo capaz de golpear a una cantidad ilimitada de tropas, lo que le da el puesto de la torreta más valiosa hasta ahora. Se implementó un sistema de dinero, en el cual los jugadores deben tener la cantidad suficiente de dinero y pagar el precio de cada tropa y cada torreta que coloquen. Estos empiezan con cierta cantidad definida de dinero y cada 5 segundos se le agrega una cantidad de dinero a ambos jugadores. Además, con valores aletorios de delay y ubicación aparecen en el mapa unas monedas que desaparecen al tiempo si no son recolectadas, y en caso de ser recolectadas se le adiciona una cantidad aleatoria de dinero al equipo que la recolecte. También se avanzó el sistema de UI que le muestra al jugador la información de las tropas y torretas que tiene seleccionadas para colocar.
    Junto con esto se corrigieron muchos errores y se pulieron detalles.

    Se dibujaron las flechas y bolas de cañón, junto con avances de animaciones y diseños de personajes y torretas.
¿Qué vamos a hacer?
  • Se va a implementar una gran cantidad de animaciones faltantes y nos enfocaremos un poco en la parte gráfica. Además continuaremos en desarrollar métodos de conseguir dinero en el juego, que son mediante tropas ladronas que consiguen plata al tener enemigos al alcance y torreta generadora de dinero. También se mejorará la interfaz de modo que se entienda y organice todo bien en cuanto a información visual y de una manera más estética. Se implementará la posibilidad de reparar torretas y futuramente mejorarlas, al igual que las tropas, subiendo sus stats y lógicamente sus costos.
Dificultades
  • Entre más acciones se realizan por las tropas y torretas, para atacar exitosamente a los enemigos, el juego se vuelve más exigente hacia el computador. Se buscarán estrategias de optimización para mejorarlo. Hay un problema por resolver en cuanto a la moneda aleatoria ya que se programó muy recientemente este sistema, pero pronto se solucionará.
Juan Camilo Quintero

POO1

User avatar
xacarana
Site Admin
Posts: 1170
Joined: Fri Jan 15, 2016 6:13 pm

Re: Neugier Battles - Wintergarnele Studios

Post by xacarana » Tue Mar 12, 2019 12:14 pm

Image

Traten de crear un solo post por avance.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
wintuh
Posts: 33
Joined: Tue Jan 22, 2019 12:13 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by wintuh » Tue Mar 12, 2019 10:24 pm

Sprint #6

Fecha inicio: 7/04/2019
Fecha finalización: 14/04/2019

Actividad #1
Refinamiento e implementación de apartado gráfico animado para nuevos objetos
  • Sprite de base mortero (Martín) :: 3
  • Sprite de base del lanzallamas/dragón (Martín) :: 3
  • Animaciones base del arquero (Martín) :: 4
  • Diseño de etapas de destrucción torretas (Martín) :: 2
  • Monedita flotante (Juan Camilo y Martín) :: 2
Actividad #2
Introducción de mecánicas nuevas con relación al flujo del juego
  • Sistema de vidas que se reduce al llegar enemigos :: (1)
  • Slider de vida que cambia de color con el porcentaje de vida :: (2)
  • Reparación de torretas mediante constructor :: (3)
  • Programar animaciones de feedback visual en todo el juego :: (3)
  • Implementación de moneda aleatoria, con un tiempo de vida limitado aleatorio y un rango de dinero aleatorio dado a quien la recoja :: (3)
  • Implementación de un límite de tropas activas, con feedback visual en la interfaz :: (1)
  • Implementación de una nueva torreta de dinero, la cual le genera dinero al jugador cada cierto tiempo :: (2)
  • Tiempo de vida de las torretas, estas se destruyen al cierto tiempo de ser construidas, y ya no da dinero venderlas :: (2)
  • Implementar animación básica para el fin de la partida, indicando quien gana :: (1)
  • Restringir acceso a tropas y torretas, de tal manera que se tengan que desbloquear con dinero :: (3)
  • Lograr llamar la atención de Xaca Rana :: (Mathf.Infinity)
  • Balancear todos los valores de precio, ataque, resistencia, etc... de las torretas vidas, y demás factores para asegurar una mejor jugabilidad :: (4)
  • Corrección de errores sutiles :: (3)
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

User avatar
wintuh
Posts: 33
Joined: Tue Jan 22, 2019 12:13 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by wintuh » Tue Mar 12, 2019 10:26 pm

Animación de pegar del tank: Image
Sprite Arquero (Base) : Image
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

User avatar
wintuh
Posts: 33
Joined: Tue Jan 22, 2019 12:13 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by wintuh » Thu Mar 14, 2019 11:50 pm

Este es el avance de animación para el 14/04/2019

Este es el Mortero:

Image


Estos son los frames del mortero:

Image

Este es la primera propuesta del arquero:

Image


Esta es la segunda propuesta del arquero:

Image

Este es el diseño de la decadencia de torretas:

Image
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

User avatar
Gamba04
Posts: 25
Joined: Tue Jan 22, 2019 12:14 pm
Location: Medellín

Re: Neugier Battles - Wintergarnele Studios

Post by Gamba04 » Fri Mar 15, 2019 2:13 am

Parte 1

Constructor.cs

Code: Select all

public class Constructor : MonoBehaviour {

    public ControlGeneral cg;
    public bool ocupado;
    public bool reparando;
    public Vector3 prehome;
    public Vector3 home;
    public Vector3 destino;
    public int dir;
    public int velocidad;
    public TurretSlot torreta;
    public GameObject resplandor;
    public int numero = 0;
    string tag_constructor;

    public bool protegido;

    public int vida;

    void Start () {
        vida = 100;
        if (gameObject.CompareTag("ConstructorA"))
        {
            tag_constructor = "ConstructorA";
            cg = GameObject.Find("Control General A").GetComponent<ControlGeneral>();
        }
        if (gameObject.CompareTag("ConstructorB"))
        {
            tag_constructor = "ConstructorB";
            cg = GameObject.Find("Control General B").GetComponent<ControlGeneral>();
        }
        //StartCoroutine(UpdatePosition());
        prehome = transform.position;
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_constructor).Length; i++)
        {
            if (GameObject.FindGameObjectsWithTag(tag_constructor)[i] == gameObject) numero = i;
        }
        home = prehome + Vector3.down * numero * 0.5f;
        destino = home;
        dir = 1;
        velocidad = 1;
	}
	
	void Update () {
        GetComponent<SpriteRenderer>().sortingOrder = numero + 6;
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(tag_constructor).Length; i++)
        {
            if (GameObject.FindGameObjectsWithTag(tag_constructor)[i] == gameObject) numero = i;
        }
        home = prehome + Vector3.down * numero * 0.5f;


        transform.position += (destino - transform.position).normalized * 0.01f * velocidad;

        //instante en el que llega a la torreta
        if ((transform.position - destino).magnitude < 0.1f)
        {
            if (ocupado)
            {
                ocupado = false;
                destino = home;
                torreta.disponible = false;
                StartCoroutine(torreta.DelayTorreta());
                torreta.encargada = false;
                torreta.vida = torreta.maxvida;
                StartCoroutine(DelayConstruir());
                GetComponent<Animator>().SetTrigger("Construir");
                if (reparando) /*torreta.GetComponent<Animator>().SetTrigger("Reparar")*/ ;
                else torreta.GetComponent<Animator>().SetTrigger("Construir");
                reparando = false;
                
            }
            else if ((transform.position - destino).magnitude < 0.02f)
            {
                transform.position = destino;
                GetComponent<Animator>().SetBool("Corriendo", false);
            }
        }
        else
        {
            GetComponent<Animator>().SetBool("Corriendo", true);
        }
        //cambio de direccion
        if (destino.x >= transform.position.x) dir = 1;
        else dir = -1;

        transform.localScale = new Vector3(-dir, 1, 1);

        if (vida <= 0)
        {
            if(torreta != null) torreta.encargada = false;
            Destroy(gameObject);
        }
        //reestablecimiento de base
        if ((destino - home).magnitude <= 1.5f && !ocupado)
        {
            destino = home;
        }
        //zona segura
        if ((transform.position - home).magnitude < 1.5f)
        {
            protegido = true;
        }
        else
        {
            protegido = false;
        }

        //torreta bloqueada
        if (ocupado && torreta.bloqueada)
        {
            ocupado = false;
            reparando = false;
            destino = home;
            torreta.encargada = false;
            if (torreta.tipotorreta == 1) cg.dinero += 100;
            if (torreta.tipotorreta == 2) cg.dinero += 200;
            if (torreta.tipotorreta == 3) cg.dinero += 300;
        }

        if (reparando && torreta.disponible && ocupado)
        {
            ocupado = false;
            reparando = false;
            destino = home;
            torreta.encargada = false;
        }
	}
    IEnumerator DelayConstruir()
    {
        velocidad = 0;
        yield return new WaitForSeconds(1);
        velocidad = 1;
    }

}
ControlGeneral.cs

Code: Select all

public class ControlGeneral : MonoBehaviour {

    public HeaderAttribute headerkeys = new HeaderAttribute("Keys");
    public KeyCode kIzquierda;
    public KeyCode kDerecha;
    public KeyCode kArriba;
    public KeyCode kAbajo;
    public KeyCode kAlternarD;
    public KeyCode kAlternarI;
    public KeyCode kColocar_Enviar;
    public KeyCode kEliminar;
    public KeyCode kSpawn_Reparar;
    public KeyCode kAlternarConstructor;
    public KeyCode kModo;
    public GameObject grupo;
    public GameObject tropa;
    public bool modotropas;
    public int seleccionnodo;
    public int nodoactivo;
    public GameObject[] espaciostorretas;
    public int seleccionespacio;
    public int espacioarriba;
    public int espacioabajo;
    public int espacioderecha;
    public int espacioizquierda;
    public GameObject[] nodos;
    public int tipotropa;
    public GameObject tropa1;
    public GameObject tropa2;
    public GameObject tropa3;
    public GameObject imagentropa0;
    public GameObject imagentropa1;
    public GameObject imagentropa2;
    public GameObject imagentropa3;
    public int tipotorreta;
    public GameObject imagentorreta0;
    public GameObject imagentorreta1;
    public GameObject imagentorreta2;
    public GameObject imagentorreta3;
    public GameObject constructoractivo;
    public int seleccionconstructor;
    public GameObject constructor;
    public GameObject parentTropas;
    public GameObject pickupmoneda;

    public HeaderAttribute headertags = new HeaderAttribute("Tags");
    string tag_tropas;
    string tag_constructor;
    string tag_turretslot;
    string tag_Path;
    string tag_grupo;

    int lado;
    public GameObject hud1;
    public GameObject hud2;
    public int dinero;
    public int poblacion;
    public HeaderAttribute headertextos = new HeaderAttribute("Textos");
    public Text tdinero;
    public Text tnombre;
    public Text tprecio;
    public Text tpoblacion;
    public Text tdescripcion;
    public bool suficientedinero;

    public float vida;
    public GameObject barravida;

    public Animator gameoveranim;
    public GameObject gameoverflechita;
    public bool gameover;

    public bool bloqueadoTropa2;
    public bool bloqueadoTropa3;
    public bool bloqueadoTorreta1;
    public bool bloqueadoTorreta2;
    public bool bloqueadoTorreta3;

    public int cantidadmoneda;
    public GameObject monedita;

    void Start()
    {
        gameoveranim.enabled = false;
        GameObject[] nodosorigen;
        nodosorigen = GameObject.FindGameObjectsWithTag("Path");
        nodos = new GameObject[nodosorigen.Length];
        if (gameObject.name == "Control General A")
        {
            tag_tropas = "TropasA";
            tag_constructor = "ConstructorA";
            tag_turretslot = "Turret SlotA";
            tag_Path = "PathA";
            tag_grupo = "GrupoA";
            lado = 1;
            //organizacion del array de nodos
            for (int i = 0; i < nodosorigen.Length; i++)
            {
                nodos[int.Parse(nodosorigen[i].name)] = nodosorigen[i];
            }
        }
        if (gameObject.name == "Control General B")
        {
            tag_tropas = "TropasB";
            tag_constructor = "ConstructorB";
            tag_turretslot = "Turret SlotB";
            tag_Path = "PathB";
            tag_grupo = "GrupoB";
            lado = -1;
            //organizacion del array de nodos
            for (int i = 0; i < nodosorigen.Length; i++)
            {
                nodos[nodosorigen.Length - int.Parse(nodosorigen[i].name) - 1] = nodosorigen[i];
            }
        }

        modotropas = true;
        espaciostorretas = GameObject.FindGameObjectsWithTag(tag_turretslot);

        tipotropa = 0;
        seleccionconstructor = 1;
        dinero = 600;
        vida = 100;
        bloqueadoTorreta1 = true;
        bloqueadoTorreta2 = true;
        bloqueadoTorreta3 = true;
        bloqueadoTropa2 = true;
        bloqueadoTropa3 = true;
        cantidadmoneda = 100;
        StartCoroutine(BaseDinero());
        StartCoroutine(SpawnMoneda(Random.Range(1, (nodos.Length - 1) / 2)));

    }
	
	void Update () {
        //fps
        if (Application.targetFrameRate != 30) Application.targetFrameRate = 30;

        grupo = GameObject.FindGameObjectsWithTag(tag_grupo)[GameObject.FindGameObjectsWithTag(tag_grupo).Length - 1];

        if (GameObject.FindGameObjectsWithTag(tag_constructor).Length == 0)
        {
            constructoractivo = null;
            seleccionconstructor = 0;
        }
        else
        {
            if (Input.GetKeyDown(kAlternarConstructor)) seleccionconstructor++;

            if (seleccionconstructor > GameObject.FindGameObjectsWithTag(tag_constructor).Length) seleccionconstructor = 1;

            if (seleccionconstructor == 1) constructoractivo = GameObject.FindGameObjectsWithTag(tag_constructor)[0];
            if (seleccionconstructor == 2) constructoractivo = GameObject.FindGameObjectsWithTag(tag_constructor)[1];
            if (seleccionconstructor == 3) constructoractivo = GameObject.FindGameObjectsWithTag(tag_constructor)[2];

            foreach (GameObject c in GameObject.FindGameObjectsWithTag(tag_constructor)) if (c == constructoractivo) c.GetComponent<Constructor>().resplandor.SetActive(true);
                else c.GetComponent<Constructor>().resplandor.SetActive(false);
        }

        if (modotropas)
        {
            //hud
            hud1.SetActive(true);
            hud2.SetActive(false);

            imagentorreta0.SetActive(false);
            imagentorreta1.SetActive(false);
            imagentorreta2.SetActive(false);
            imagentorreta3.SetActive(false);


            if (Input.GetKeyDown(kAlternarD)) tipotropa++;
            if (Input.GetKeyDown(kAlternarI)) tipotropa--;
            if (tipotropa < 0) tipotropa = 0;
            if (tipotropa > 3) tipotropa = 3;

            if (tipotropa == 0)
            {
                imagentropa0.SetActive(true);
                imagentropa1.SetActive(false);
                imagentropa2.SetActive(false);
                imagentropa3.SetActive(false);
                tnombre.text = "Builder";
                tprecio.text = "200";
                tdescripcion.text = "He can build things";
                if (dinero >= 200) suficientedinero = true;
                else suficientedinero = false;
            }
            if (tipotropa == 1)
            {
                tropa = tropa1;
                imagentropa0.SetActive(false);
                imagentropa1.SetActive(true);
                imagentropa2.SetActive(false);
                imagentropa3.SetActive(false);
                tnombre.text = "Minion";
                tprecio.text = "20";
                tdescripcion.text = "Ready to die";
                if (dinero >= 20) suficientedinero = true;
                else suficientedinero = false;
            }
            if (tipotropa == 2)
            {
                if (!bloqueadoTropa2)
                {
                    tropa = tropa2;
                    imagentropa0.SetActive(false);
                    imagentropa1.SetActive(false);
                    imagentropa2.SetActive(true);
                    imagentropa3.SetActive(false);
                    tnombre.text = "Tank";
                    tprecio.text = "40";
                    tdescripcion.text = "You can hit him all you want";
                    if (dinero >= 40) suficientedinero = true;
                    else suficientedinero = false;
                }
                else
                {
                    imagentropa0.SetActive(false);
                    imagentropa1.SetActive(false);
                    imagentropa2.SetActive(true);
                    imagentropa3.SetActive(false);
                    tnombre.text = "Tank";
                    tprecio.text = "500";
                    if (dinero >= 500) suficientedinero = true;
                    else suficientedinero = false;
                    tdescripcion.text = (gameObject.name == "Control General A")? (suficientedinero)? "Locked, press X to unlock" : "Locked, not enough money" : (suficientedinero) ? "Locked, press M to unlock" : "Locked, not enough money";
                }
            }
            if (tipotropa == 3)
            {
                if (!bloqueadoTropa3)
                {
                    tropa = tropa3;
                    imagentropa0.SetActive(false);
                    imagentropa1.SetActive(false);
                    imagentropa2.SetActive(false);
                    imagentropa3.SetActive(true);
                    tnombre.text = "Archer";
                    tprecio.text = "25";
                    tdescripcion.text = "Extremely powerful.. until he gets hit";
                    if (dinero >= 25) suficientedinero = true;
                    else suficientedinero = false;
                }
                else
                {
                    tropa = tropa3;
                    imagentropa0.SetActive(false);
                    imagentropa1.SetActive(false);
                    imagentropa2.SetActive(false);
                    imagentropa3.SetActive(true);
                    tnombre.text = "Archer";
                    tprecio.text = "700";
                    if (dinero >= 700) suficientedinero = true;
                    else suficientedinero = false;
                    tdescripcion.text = (gameObject.name == "Control General A") ? (suficientedinero) ? "Locked, press X to unlock" : "Locked, not enough money" : (suficientedinero) ? "Locked, press M to unlock" : "Locked, not enough money";
                }
            }
        }
        else
        {
            //hud
            hud1.SetActive(false);
            hud2.SetActive(true);

            imagentropa0.SetActive(false);
            imagentropa1.SetActive(false);
            imagentropa2.SetActive(false);
            imagentropa3.SetActive(false);

            if (Input.GetKeyDown(kAlternarD)) tipotorreta++;
            if (Input.GetKeyDown(kAlternarI)) tipotorreta--;
            if (tipotorreta < 0) tipotorreta = 0;
            if (tipotorreta > 3) tipotorreta = 3;

            if (tipotorreta == 0)
            {
                imagentorreta0.SetActive(true);
                imagentorreta1.SetActive(false);
                imagentorreta2.SetActive(false);
                imagentorreta3.SetActive(false);
                tnombre.text = "Mine";
                tprecio.text = "100";
                tdescripcion.text = "Who doesnt like money?";
                if (dinero >= 100) suficientedinero = true;
                else suficientedinero = false;
            }
            if (tipotorreta == 1)
            {
                if (!bloqueadoTorreta1)
                {
                    imagentorreta0.SetActive(false);
                    imagentorreta1.SetActive(true);
                    imagentorreta2.SetActive(false);
                    imagentorreta3.SetActive(false);
                    tnombre.text = "Cannon";
                    tprecio.text = "50";
                    tdescripcion.text = "Good damage to individual targets";
                    if (dinero >= 50) suficientedinero = true;
                    else suficientedinero = false;
                }
                else
                {
                    imagentorreta0.SetActive(false);
                    imagentorreta1.SetActive(true);
                    imagentorreta2.SetActive(false);
                    imagentorreta3.SetActive(false);
                    tnombre.text = "Cannon";
                    tprecio.text = "100";
                    if (dinero >= 100) suficientedinero = true;
                    else suficientedinero = false;
                    tdescripcion.text = (gameObject.name == "Control General A") ? (suficientedinero) ? "Locked, press F to unlock" : "Locked, not enough money" : (suficientedinero) ? "Locked, press J to unlock" : "Locked, not enough money";

                }
            }
            if (tipotorreta == 2)
            {
                if (!bloqueadoTorreta2)
                {
                    imagentorreta0.SetActive(false);
                    imagentorreta1.SetActive(false);
                    imagentorreta2.SetActive(true);
                    imagentorreta3.SetActive(false);
                    tnombre.text = "Mortar";
                    tprecio.text = "100";
                    tdescripcion.text = "Can hit up to 10 targets at a time";
                    if (dinero >= 100) suficientedinero = true;
                    else suficientedinero = false;
                }
                else
                {
                    imagentorreta0.SetActive(false);
                    imagentorreta1.SetActive(false);
                    imagentorreta2.SetActive(true);
                    imagentorreta3.SetActive(false);
                    tnombre.text = "Mortar";
                    tprecio.text = "300";
                    if (dinero >= 300) suficientedinero = true;
                    else suficientedinero = false;
                    tdescripcion.text = (gameObject.name == "Control General A") ? (suficientedinero) ? "Locked, press F to unlock" : "Locked, not enough money" : (suficientedinero) ? "Locked, press J to unlock" : "Locked, not enough money";
                }
            }
            if (tipotorreta == 3)
            {
                if (!bloqueadoTorreta3)
                {
                    imagentorreta0.SetActive(false);
                    imagentorreta1.SetActive(false);
                    imagentorreta2.SetActive(false);
                    imagentorreta3.SetActive(true);
                    tnombre.text = "Dragon";
                    tprecio.text = "300";
                    tdescripcion.text = "He likes spicy food..";
                    if (dinero >= 300) suficientedinero = true;
                    else suficientedinero = false;
                }
                else
                {
                    imagentorreta0.SetActive(false);
                    imagentorreta1.SetActive(false);
                    imagentorreta2.SetActive(false);
                    imagentorreta3.SetActive(true);
                    tnombre.text = "Dragon";
                    tprecio.text = "700";
                    if (dinero >= 700) suficientedinero = true;
                    else suficientedinero = false;
                    tdescripcion.text = (gameObject.name == "Control General A") ? (suficientedinero) ? "Locked, press F to unlock" : "Locked, not enough money" : (suficientedinero) ? "Locked, press J to unlock" : "Locked, not enough money";
                }
            }

        }
        //suficiente dinero
        //spawn tropas
        if (Input.GetKeyDown(kSpawn_Reparar) && modotropas)
        {
            if (suficientedinero)
            {
                if (tipotropa != 0)
                {
                    if ((tipotropa == 2 && bloqueadoTropa2) || (tipotropa == 3 && bloqueadoTropa3))
                    {
                        if (tipotropa == 2)
                        {
                            dinero -= 500;
                            bloqueadoTropa2 = false;
                        }
                        if (tipotropa == 3)
                        {
                            dinero -= 700;
                            bloqueadoTropa3 = false;
                        }
                    }
                    else
                    {
                        if (poblacion < 50)
                        {
                            Instantiate(grupo, transform.position, transform.rotation);
                            Instantiate(tropa, transform.position, transform.rotation, parentTropas.transform);
                            if (tipotropa == 1) dinero -= 20;
                            if (tipotropa == 2) dinero -= 40;
                            if (tipotropa == 3) dinero -= 25;
                        }
                    }
                }
                else
                {
                    if (GameObject.FindGameObjectsWithTag(tag_constructor).Length < 3)
                    {
                        Instantiate(constructor, constructor.transform.position, constructor.transform.rotation);
                        seleccionconstructor = 1;
                        dinero -= 200;
                    }
                }
            }
        }

        //visualización del nodo seleccionado
        for (int i = 0; i < nodos.Length; i++)
        {

            if (i == seleccionnodo && modotropas) foreach (Transform t in nodos[i].transform) {
                    if (t.CompareTag(tag_Path)) t.GetComponent<SpriteRenderer>().enabled = true;
                }
            else
            {
                foreach (Transform t in nodos[i].transform) if (t.CompareTag(tag_Path)) t.GetComponent<SpriteRenderer>().enabled = false;
            }
        }
        //alternar modo
        if (Input.GetKeyDown(kModo)) modotropas = !modotropas;

        //navegación nodo
        if (modotropas)
        {
            if (Input.GetKeyDown(kDerecha)) seleccionnodo += lado;
            if (Input.GetKeyDown(kIzquierda)) seleccionnodo -= lado;

            if (Input.GetKeyDown(kColocar_Enviar)) nodoactivo = seleccionnodo;
        }
        else
        {
            //navegación torretas
            for (int i = 0; i < espaciostorretas.Length; i++)
            {
                if (espaciostorretas[i].transform.position.y > espaciostorretas[seleccionespacio].transform.position.y + 1 && ((espaciostorretas[i].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude < (espaciostorretas[espacioarriba].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude || espaciostorretas[espacioarriba].transform.position.y <= espaciostorretas[seleccionespacio].transform.position.y + 1))
                {
                    espacioarriba = i;
                }
                if (espaciostorretas[i].transform.position.y < espaciostorretas[seleccionespacio].transform.position.y - 1 && ((espaciostorretas[i].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude < (espaciostorretas[espacioabajo].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude || espaciostorretas[espacioabajo].transform.position.y >= espaciostorretas[seleccionespacio].transform.position.y - 1))
                {
                    espacioabajo = i;
                }
                if (espaciostorretas[i].transform.position.x > espaciostorretas[seleccionespacio].transform.position.x + 1 && ((espaciostorretas[i].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude < (espaciostorretas[espacioderecha].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude || espaciostorretas[espacioderecha].transform.position.x <= espaciostorretas[seleccionespacio].transform.position.x + 1))
                {
                    espacioderecha = i;
                }
                if (espaciostorretas[i].transform.position.x < espaciostorretas[seleccionespacio].transform.position.x - 1 && ((espaciostorretas[i].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude < (espaciostorretas[espacioizquierda].transform.position - espaciostorretas[seleccionespacio].transform.position).magnitude || espaciostorretas[espacioizquierda].transform.position.x >= espaciostorretas[seleccionespacio].transform.position.x - 1))
                {
                    espacioizquierda = i;
                }

            }
            if (espaciostorretas[espacioarriba].transform.position.y <= espaciostorretas[seleccionespacio].transform.position.y + 1) espacioarriba = seleccionespacio;
            if (espaciostorretas[espacioabajo].transform.position.y >= espaciostorretas[seleccionespacio].transform.position.y - 1) espacioabajo = seleccionespacio;
            if (espaciostorretas[espacioderecha].transform.position.x <= espaciostorretas[seleccionespacio].transform.position.x + 1) espacioderecha = seleccionespacio;
            if (espaciostorretas[espacioizquierda].transform.position.x >= espaciostorretas[seleccionespacio].transform.position.x - 1) espacioizquierda = seleccionespacio;

            if (Input.GetKeyDown(kArriba)) seleccionespacio = espacioarriba;
            if (Input.GetKeyDown(kIzquierda)) seleccionespacio = espacioizquierda;
            if (Input.GetKeyDown(kAbajo)) seleccionespacio = espacioabajo;
            if (Input.GetKeyDown(kDerecha)) seleccionespacio = espacioderecha;
            //colocar torreta
            if (Input.GetKeyDown(kColocar_Enviar) && suficientedinero)
            {
                if ((tipotorreta == 1 && bloqueadoTorreta1) || (tipotorreta == 2 && bloqueadoTorreta2) || (tipotorreta == 3 && bloqueadoTorreta3))
                {
                    if (tipotorreta == 1)
                    {
                        dinero -= 100;
                        bloqueadoTorreta1 = false;
                    }
                    if (tipotorreta == 2)
                    {
                        dinero -= 300;
                        bloqueadoTorreta2 = false;
                    }
                    if (tipotorreta == 3)
                    {
                        dinero -= 700;
                        bloqueadoTorreta3 = false;
                    }
                }
                else
                {
                    if (GameObject.FindGameObjectsWithTag(tag_constructor).Length != 0)
                    {
                        if (!constructoractivo.GetComponent<Constructor>().ocupado && espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().disponible && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().encargada && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().bloqueada)
                        {
                            constructoractivo.GetComponent<Constructor>().torreta = espaciostorretas[seleccionespacio].GetComponent<TurretSlot>();
                            espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta = tipotorreta;
                            espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().encargada = true;
                            constructoractivo.GetComponent<Constructor>().ocupado = true;
                            constructoractivo.GetComponent<Constructor>().destino = espaciostorretas[seleccionespacio].transform.position;
                            if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 0) dinero -= 100;
                            if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 1) dinero -= 50;
                            if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 2) dinero -= 100;
                            if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 3) dinero -= 300;
                        }
                    }
                }
            }
            //reparar torreta
            if ((espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 1 && dinero >= 10) || (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 2 && dinero >= 20) || (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 3 && dinero >= 30))
            {
                if (Input.GetKeyDown(kSpawn_Reparar) && GameObject.FindGameObjectsWithTag(tag_constructor).Length != 0)
                {
                    if (!constructoractivo.GetComponent<Constructor>().ocupado && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().disponible && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().encargada && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().bloqueada)
                    {
                        constructoractivo.GetComponent<Constructor>().torreta = espaciostorretas[seleccionespacio].GetComponent<TurretSlot>();
                        espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().encargada = true;
                        constructoractivo.GetComponent<Constructor>().ocupado = true;
                        constructoractivo.GetComponent<Constructor>().reparando = true;
                        constructoractivo.GetComponent<Constructor>().destino = espaciostorretas[seleccionespacio].transform.position;
                        if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 0) dinero -= 10;
                        if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 1) dinero -= 10;
                        if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 2) dinero -= 20;
                        if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 3) dinero -= 60;

                    }
                }
            }
            //eliminar torreta
            if (Input.GetKeyDown(kEliminar) && !espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().disponible)
            {
                /*
                if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 1) dinero += 50;
                if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 2) dinero += 100;
                if (espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().tipotorreta == 3) dinero += 150;
                */

                espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().disponible = true;
                StopCoroutine(espaciostorretas[seleccionespacio].GetComponent<TurretSlot>().DelayTorreta()); ;
            }
        }
        //visualizacion de slot seleccionado
        for (int i = 0; i < espaciostorretas.Length; i++)
        {
            if (i == seleccionespacio && !modotropas)
            {
                espaciostorretas[i].GetComponent<SpriteRenderer>().enabled = true;
                espaciostorretas[i].GetComponent<TurretSlot>().mostrarArea = true;
            }
            else
            {
                espaciostorretas[i].GetComponent<SpriteRenderer>().enabled = false;
                espaciostorretas[i].GetComponent<TurretSlot>().mostrarArea = false;
            }
        }
        //limites seleccion nodos
        if (seleccionnodo < 0) seleccionnodo = 0;
        if (seleccionnodo > nodos.Length - 1) seleccionnodo = nodos.Length - 1;

        tdinero.text = dinero.ToString();

        //vida
        if (vida > 100) vida = 100;
        if (vida <= 0)
        {
            StartCoroutine(GameOver1());
        }
        //color vida
        barravida.GetComponent<RectTransform>().sizeDelta = new Vector2(vida * 7, 10);
        //barravida.GetComponent<Image>().color = Color.LerpUnclamped(new Color(1, 0, 0), new Color(0, 1, 0), vida / 100);
        if (vida >= 50) barravida.GetComponent<Image>().color = new Color((100 - vida) / 50, 1, 0);
        if (vida < 50) barravida.GetComponent<Image>().color = new Color(1, vida / 50, 0);

        //poblacion
        poblacion = GameObject.FindGameObjectsWithTag(tag_tropas).Length;
        tpoblacion.text = poblacion + "/50";

        if (gameover && Input.anyKeyDown)
        {
            StartCoroutine(GameOver2());
        }
    }
    IEnumerator BaseDinero()
    {
        yield return new WaitForSeconds(5);
        dinero += 10;
        StartCoroutine(BaseDinero());
    }
    IEnumerator SpawnMoneda(int rand)
    {
        for (int i = 0; i < 1500; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        monedita = Instantiate(pickupmoneda, nodos[rand].transform.position, pickupmoneda.transform.rotation);
        monedita.GetComponent<PickUpMoneda>().cantidad = cantidadmoneda;
        rand = Random.Range(1,(nodos.Length - 1) / 2);
        StartCoroutine(SpawnMoneda(rand));
    }
    IEnumerator GameOver1()
    {
        gameoveranim.enabled = true;
        gameoverflechita.SetActive(false);
        yield return new WaitForSeconds(5);
        gameover = true;
    }
    IEnumerator GameOver2()
    {
        gameoveranim.SetTrigger("Click");
        yield return new WaitForSeconds(3);
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }

}
PickUpMoneda.cs

Code: Select all

public class PickUpMoneda : MonoBehaviour {

    public int cantidad;
    float distA;
    float distB;
    int mascercanoA;
    int mascercanoB;


	void Start () {
        //cantidad = Random.Range(100, 400);
        StartCoroutine(Delay());
	}

    void Update()
    {

        if (GameObject.FindGameObjectsWithTag("TropasA").Length > 0)
        {
            distA = Mathf.Infinity;
            mascercanoA = 0;
            for (int i = 0; i < GameObject.FindGameObjectsWithTag("TropasA").Length; i++)
            {
                if ((GameObject.FindGameObjectsWithTag("TropasA")[i].transform.position - transform.position).magnitude < distA)
                {
                    distA = (GameObject.FindGameObjectsWithTag("TropasA")[i].transform.position - transform.position).magnitude;
                    mascercanoA = i;
                }
            }
            Debug.DrawRay(transform.position, GameObject.FindGameObjectsWithTag("TropasA")[mascercanoA].transform.position - transform.position, Color.red);
        }
        if (GameObject.FindGameObjectsWithTag("TropasB").Length > 0)
        {
            distB = Mathf.Infinity;
            mascercanoB = 0;
            for (int i = 0; i < GameObject.FindGameObjectsWithTag("TropasB").Length; i++)
            {
                if ((GameObject.FindGameObjectsWithTag("TropasB")[i].transform.position - transform.position).magnitude < distB)
                {
                    distB = (GameObject.FindGameObjectsWithTag("TropasB")[i].transform.position - transform.position).magnitude;
                    mascercanoB = i;
                }
            }
            Debug.DrawRay(transform.position, GameObject.FindGameObjectsWithTag("TropasB")[mascercanoB].transform.position - transform.position, Color.green);
            
        }
    }

    void OnTriggerStay2D(Collider2D collision)
    {
        if (mascercanoA < GameObject.FindGameObjectsWithTag("TropasA").Length)
        {
            if (collision.gameObject == GameObject.FindGameObjectsWithTag("TropasA")[mascercanoA])
            {
                collision.GetComponent<Tropa>().grupo.GetComponent<Translacion>().cg.dinero += cantidad;
                collision.GetComponent<Tropa>().grupo.GetComponent<Translacion>().cg.cantidadmoneda += 20;
                Destroy(gameObject);
            }
        }
        if (mascercanoB < GameObject.FindGameObjectsWithTag("TropasB").Length)
        {
            if (collision.gameObject == GameObject.FindGameObjectsWithTag("TropasB")[mascercanoB])
            {
                collision.GetComponent<Tropa>().grupo.GetComponent<Translacion>().cg.dinero += cantidad;
                collision.GetComponent<Tropa>().grupo.GetComponent<Translacion>().cg.cantidadmoneda += 20;
                Destroy(gameObject);
            }
        }
    }

    IEnumerator Delay()
    {
        for (int i = 0; i < 1000; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        Destroy(gameObject);
    }
}
Proyectil.cs

Code: Select all

public class Proyectil : MonoBehaviour {

    public Vector3 origen;
    public Vector3 destino;
    public bool girahaciadireccion;
    public float speed;
    public float altura;
    public Vector3 posicionrecta;
    Vector3 posicionanterior;

	void Start () {
        origen = transform.position;
        posicionanterior = transform.position;
        posicionrecta = transform.position;
        StartCoroutine(DelayDestroy());
	}
	
	void Update () {
        posicionrecta += (destino - origen).normalized * Time.deltaTime * speed;
        transform.position = posicionrecta + (Vector3.up * Mathf.Pow((origen - destino).magnitude * altura, 2)) + (Vector3.down * Mathf.Pow(Mathf.Abs((posicionrecta - origen).magnitude - (posicionrecta - destino).magnitude) * altura, 2));
        if (girahaciadireccion) transform.rotation = Quaternion.LookRotation(Vector3.forward, transform.position - posicionanterior);
        if ((posicionrecta - destino).magnitude < 0.1f) Destroy(gameObject);
	}
    IEnumerator DelayDestroy()
    {
        yield return new WaitForSeconds((destino - origen).magnitude / speed);
        Destroy(gameObject);
    }
}
SignoExclamacion.cs

Code: Select all

public class SignoExclamacion : MonoBehaviour {

    float a = 1;

	void Start () {
        StartCoroutine(Fade());
	}
	
    IEnumerator Fade()
    {
        yield return new WaitForSeconds(0.7f);
        for (int i = 0; i < 10; i++)
        {
            a -= 0.1f;
            GetComponent<SpriteRenderer>().color = new Color(1, 1, 1, a);
            yield return new WaitForSeconds(0.03f);
        }
        Destroy(gameObject);
    }
}
Juan Camilo Quintero

POO1

Post Reply