Neugier Battles - Wintergarnele Studios

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

Moderator: julianmartinez16

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

Re: Neugier Battles - Wintergarnele Studios

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

Parte 2

Torreta0.cs

Code: Select all

public class Torreta0 : MonoBehaviour {


    public float ritmodinero;
    public int cantidad;
    public ControlGeneral cg;


	void Start () {
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotA"))
        {
            cg = GameObject.Find("Control General A").GetComponent<ControlGeneral>();
        }
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotB"))
        {
            cg = GameObject.Find("Control General B").GetComponent<ControlGeneral>();
        }
        StartCoroutine(Dinero());
    }
    void OnEnable()
    {
        StartCoroutine(Dinero());
    }
    void Update () {
        if(transform.localPosition.y > 1) GetComponent<SpriteRenderer>().sortingOrder = 7;
        else GetComponent<SpriteRenderer>().sortingOrder = 2;
    }

    IEnumerator Dinero()
    { 
        for (int i = 0; i < ritmodinero * 50; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        cg.dinero += cantidad;
        StartCoroutine(Dinero());
    }  
}
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;
    public GameObject cañoncito;

    Vector3 offsetProyectil;
    string tag_tropasEnemigas;


	void Start () {
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotA"))
        {
            tag_tropasEnemigas = "TropasB";
            offsetProyectil = cañoncito.transform.right * -0.5f + cañoncito.transform.up * 0.15f;
        }
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotB"))
        {
            tag_tropasEnemigas = "TropasA";
            offsetProyectil = cañoncito.transform.right * 0.5f + cañoncito.transform.up * 0.15f;
        }
    }
    void OnEnable()
    {
        StartCoroutine(Disparo());
        StartCoroutine(EncontrarEnemigo());
    }
    void Update() {

        //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);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward,Vector3.Cross(Vector3.forward, (enemigo.transform.position - transform.position)));
                    offsetProyectil = cañoncito.transform.right * 0.5f + cañoncito.transform.up * 0.15f;
                }
                else
                {
                    GetComponent<Animator>().SetBool("Izquierda", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    if(atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward,Vector3.Cross((enemigo.transform.position - transform.position), Vector3.forward));
                    offsetProyectil = cañoncito.transform.right * -0.5f + cañoncito.transform.up * 0.15f;
                }
            }
            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);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, (enemigo.transform.position - transform.position));
                    offsetProyectil = cañoncito.transform.up * 0.5f;
                }
                else
                {
                    GetComponent<Animator>().SetBool("Abajo", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, -(enemigo.transform.position - transform.position));
                    offsetProyectil = cañoncito.transform.up * -0.5f;
                }
            }
        }
        else
        {
            atacando = false;
        }
        if (transform.localPosition.y > 1)
        {
            GetComponent<SpriteRenderer>().sortingOrder = 7;
            GetComponentInParent<TurretSlot>().torretaLista = false;
        }
        else
        {
            GetComponent<SpriteRenderer>().sortingOrder = 2;
            GetComponentInParent<TurretSlot>().torretaLista = true;
        }
    }

    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");
        }
    }
    IEnumerator EncontrarEnemigo()
    {
        //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>();
        }
        yield return new WaitForSeconds(0.5f);
        StartCoroutine(EncontrarEnemigo());
    }
    
}
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;
    public GameObject cañoncito;


    Vector3 offsetProyectil;
    string tag_tropasEnemigas;
    public int cantidadenemigos;


	void Start () {
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotA"))
        {
            tag_tropasEnemigas = "TropasB";
        }
        if (GetComponentInParent<TurretSlot>().gameObject.CompareTag("Turret SlotB"))
        {
            tag_tropasEnemigas = "TropasA";
        }
        offsetProyectil = Vector3.up;
    }
    void OnEnable()
    {
        StartCoroutine(Disparo());
        StartCoroutine(EncontrarEnemigo());
    }
    void Update () {
        
        
        //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);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.Cross(Vector3.forward, (enemigo.transform.position - transform.position)));
                    offsetProyectil = cañoncito.transform.right * 0.5f + cañoncito.transform.up * 0.15f;
                }
                else
                {
                    GetComponent<Animator>().SetBool("Izquierda", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.Cross((enemigo.transform.position - transform.position), Vector3.forward));
                    offsetProyectil = cañoncito.transform.right * -0.5f + cañoncito.transform.up * 0.15f;
                }
            }
            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);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, (enemigo.transform.position - transform.position));
                    offsetProyectil = cañoncito.transform.up * 0.5f;
                }
                else
                {
                    GetComponent<Animator>().SetBool("Abajo", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, -(enemigo.transform.position - transform.position));
                    offsetProyectil = cañoncito.transform.up * -0.5f;
                }
            }*/
        }
        else
        {
            atacando = false;
        }
        if (transform.localPosition.y > 1)
        {
            GetComponent<SpriteRenderer>().sortingOrder = 7;
            GetComponentInParent<TurretSlot>().torretaLista = false;
        }
        else
        {
            GetComponent<SpriteRenderer>().sortingOrder = 2;
            GetComponentInParent<TurretSlot>().torretaLista = true;
        }
    }

    IEnumerator Disparo()
    {

        if (enemigo != null && atacando)
        {
            GetComponent<Animator>().SetTrigger("Disparo");
            yield return new WaitForSeconds(1);
            StartCoroutine(HacerDañoADistancia(enemigo, cantidadenemigos, 1, enemigo.transform.position));
            proyectil = Instantiate(bala, transform.position + offsetProyectil, transform.rotation);
            proyectil.GetComponent<Proyectil>().destino = enemigo.transform.position;
        }

        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++;
                }
            }
        }
    }
    IEnumerator EncontrarEnemigo()
    {
        //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>();
        }
        yield return new WaitForSeconds(0.5f);
        StartCoroutine(EncontrarEnemigo());
    }

}
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;
    public GameObject cañoncito;


    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";
        }
    }
    void OnEnable()
    {
        StartCoroutine(Disparo());
        StartCoroutine(EncontrarEnemigo());
    }
    void Update () {
        
        
        //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);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.Cross(Vector3.forward, (enemigo.transform.position - transform.position)));
                }
                else
                {
                    GetComponent<Animator>().SetBool("Izquierda", true);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Abajo", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.Cross((enemigo.transform.position - transform.position), Vector3.forward));
                }
            }
            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);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, (enemigo.transform.position - transform.position));
                }
                else
                {
                    GetComponent<Animator>().SetBool("Abajo", true);
                    GetComponent<Animator>().SetBool("Izquierda", false);
                    GetComponent<Animator>().SetBool("Derecha", false);
                    GetComponent<Animator>().SetBool("Arriba", false);
                    if (atacando) cañoncito.transform.rotation = Quaternion.LookRotation(Vector3.forward, -(enemigo.transform.position - transform.position));
                }
            }
        }
        else
        {
            atacando = false;
        }
        if (transform.localPosition.y > 1)
        {
            GetComponent<SpriteRenderer>().sortingOrder = 7;
            GetComponentInParent<TurretSlot>().torretaLista = false;
        }
        else
        {
            GetComponent<SpriteRenderer>().sortingOrder = 2;
            GetComponentInParent<TurretSlot>().torretaLista = true;
        }

       
    }

    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());
    }
    IEnumerator EncontrarEnemigo()
    {
        //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>();
        }
        yield return new WaitForSeconds(0.5f);
        StartCoroutine(EncontrarEnemigo());
    }

}
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 <= 5)
                        {
                            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--;
    
    }

    
}
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 float valortropa;

    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;
    public GameObject triggermeta;
    public ControlGeneral controlenemigo;


    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;
            triggermeta = GameObject.Find("Trigger B");
            controlenemigo = GameObject.Find("Control General B").GetComponent<ControlGeneral>();
        }
        if (gameObject.CompareTag("TropasB"))
        {
            tag_Grupo = "GrupoB";
            tag_TropaEnemiga = "TropasA";
            tag_ConstructorEnemigo = "ConstructorA";
            tag_TorretaEnemiga = "Turret SlotA";
            frente = -1;
            triggermeta = GameObject.Find("Trigger A");
            controlenemigo = GameObject.Find("Control General A").GetComponent<ControlGeneral>();
        }
        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));
        //teleport al grupo
        if ((grupo.transform.position - transform.position).magnitude > 3) 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)
        {
            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)
            {
                if (((ataqueadistancia && (transform.position - enemigotorreta.transform.position).magnitude <= rango) || (!ataqueadistancia && (transform.position - enemigotorreta.transform.position).magnitude <= rango * 2)) && 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);
        }
    }
    void OnTriggerEnter2D(Collider2D collision)
    {
        //llega a meta
        if (collision.gameObject == triggermeta)
        {
            controlenemigo.vida -= valortropa;
            //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);
        }
        
    }

    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,enemigotropa.transform.position));
                
            }
            if (tipoenemigo == "Constructor" && enemigoconstructor != null)
            {
                if (!ataqueadistancia) enemigoconstructor.vida -= dañoataque;
                else StartCoroutine(HacerDañoADistancia(null, enemigoconstructor, null, enemigoconstructor.transform.position));
                enemigoconstructor.GetComponent<Animator>().SetTrigger("Daño");
            }
            if (tipoenemigo == "Torreta" && enemigotorreta != null)
            {
                if (!ataqueadistancia) enemigotorreta.vida -= dañoataque;
                else StartCoroutine(HacerDañoADistancia(null, null, enemigotorreta, enemigotorreta.transform.position));
                enemigotorreta.GetComponent<Animator>().SetTrigger("Daño");
            }
            if (ataqueadistancia)
            {
                if (tipoenemigo == "Tropa" && enemigotropa != null)
                {
                    proyectil = Instantiate(flecha, transform.position, transform.rotation);
                    proyectil.GetComponent<Proyectil>().destino = enemigotropa.transform.position;
                }
                if (tipoenemigo == "Constructor" && enemigoconstructor != null)
                {
                    proyectil = Instantiate(flecha, transform.position, transform.rotation);
                    proyectil.GetComponent<Proyectil>().destino = enemigoconstructor.transform.position;
                }
                if (tipoenemigo == "Torreta" && enemigotorreta != null)
                {
                    proyectil = Instantiate(flecha, transform.position, transform.rotation);
                    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, Vector3 destino)
    {
        yield return new WaitForSeconds((destino - transform.position).magnitude / flecha.GetComponent<Proyectil>().speed);
        if (enem != null)
        {
            enem.vida -= dañoataque;
            enem.GetComponent<Animator>().SetTrigger("Daño");
        }
        if (torreta != null)
        {
            torreta.vida -= dañoataque;
        }
        if (constructor != null)
        {
            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 torreta0;
    public GameObject torreta1;
    public GameObject torreta2;
    public GameObject torreta3;
    public TurretSlot torretacentral;

    public int vida;
    public int maxvida;

    public bool mostrarArea;
    public bool torretaLista;
    public GameObject area1;
    public GameObject area2;
    public GameObject area3;

    void Start () {
        disponible = true;
        tipotorreta = 0;
        vida = 1000;
        maxvida = 100;
	}
	
	void Update () {


        if (mostrarArea && torretaLista)
        {
            area1.SetActive(true);
            area2.SetActive(true);
            area3.SetActive(true);
        }
        else
        {
            area1.SetActive(false);
            area2.SetActive(false);
            area3.SetActive(false);
        }
        if (tipotorreta == 0) maxvida = 500;
        if (tipotorreta == 1) maxvida = 200;
        if (tipotorreta == 2) maxvida = 500;
        if (tipotorreta == 3) maxvida = 1000;

        if (!disponible && !bloqueada)
        {
            if (torretacentral != null)
            {
                torretacentral.bloqueada = true;
                torretacentral.disponible = true;
            }

            if (tipotorreta == 0)
            {
                torreta0.SetActive(true);
                torreta1.SetActive(false);
                torreta2.SetActive(false);
                torreta3.SetActive(false);
            }

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

            torreta0.SetActive(false);
            torreta1.SetActive(false);
            torreta2.SetActive(false);
            torreta3.SetActive(false);
        }
        if (vida <= 0)
        {
            disponible = true;
            vida = maxvida;
        }
	}
    public IEnumerator DelayTorreta()
    {
        for (int i = 0; i < 10000; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        GetComponent<Animator>().SetBool("Time Out", true);
        for (int i = 0; i < 300; i++)
        {
            yield return new WaitForEndOfFrame();
        }
        GetComponent<Animator>().SetBool("Time Out", false);
        disponible = true;
    }
}
Juan Camilo Quintero

POO1

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

Re: Neugier Battles - Wintergarnele Studios

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

Videos



Juan Camilo Quintero

POO1

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

Re: Neugier Battles - Wintergarnele Studios

Post by wintuh » Tue Mar 19, 2019 11:18 pm

Sprint #7

Fecha inicio: 14/03/2019
Fecha finalización: 21/03/2019

Actividad #1
Programación: mejora de torretas y tropas
  • Implementar niveles 1-3 de las tropas (Juan Camilo) :: (4)
  • Implementar niveles 1-3 de las torretas (Juan Camilo) :: (4)
  • Implementar sistema de mejora de nivel para tropas y torretas (Juan Camilo) :: (4)
  • Implementar sistema de imagenes UI de los niveles de tropas y torretas (Juan Camilo) :: (5)
  • Reconstruir sistema de indicaciones de los controles, de una manera mucho mas responsiva e intuitva (Juan Camilo) :: (3.5)
  • Corregir errores a nivel general :: (3)
Activdad #2
Animación: Más animaciones
  • Sprite de torreta lanzallamas (Martín) :: 3
  • Todas las animaciones del arquero (Martín) :: 3
  • Torreta cañón siendo destruida en 3 etapas (Martín) :: 3
  • Concept de diferentes mejoras (Juan Camilo Y Martín) :: 2
  • Hacer un test con partículas (Martín) :: 2
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

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

Re: Neugier Battles - Wintergarnele Studios

Post by wintuh » Tue Mar 19, 2019 11:27 pm

Avance del 19/03/2019, parte de animación y sprites

Estos son los frames del lanzallamas: Image

Este es el ataque del arquero: Image

Este es el idle del arquero: Image

Este es el walk cycle del arquero: Image
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

Post Reply