Golem Clash - Black Hole Studios

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

Moderator: julianmartinez16

User avatar
Sofial1224
Posts: 22
Joined: Tue Jan 22, 2019 12:15 pm

Re: Golem Clash - Black Hole Studios

Post by Sofial1224 » Thu Feb 28, 2019 10:16 pm

Sprint #5:

Fecha de inicio: 25/2/2019
Fecha de finalización: 1/3/2019


Clase #2 (jueves):
Completar digitalización de enemigos (3)
Comenzar organización del mapa en unity (2)

Que hemos hecho?
Terminamos de digitalizar los enemigos y comenzamos a organizar el mapa en unity con los colliders

Image

Image

Que vamos a hacer?
Vamos a empezar con la programacion del movimiento de los enemigos y a digitalizar las torretas
Sofia Alvarez Villanueva
PDOO1

User avatar
Sofial1224
Posts: 22
Joined: Tue Jan 22, 2019 12:15 pm

Re: Golem Clash - Black Hole Studios

Post by Sofial1224 » Tue Mar 05, 2019 10:36 pm

Sprint #6:

Fecha de inicio: 4/3/2019
Fecha de finalización: 8/3/2019


Clase #1 (martes):
Inicio de programacion en unity (3)

Que hemos hecho?
El enemigo se mueve por el mapa y llega a la base del jugador, una vez allí le hace daño y se destruye el objeto cuando esta fuera de la pantalla.






Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WaypointArray : MonoBehaviour
{
    public Transform[] waypoints;
}

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FortHealth : MonoBehaviour
{
    public byte health;

    // Start is called before the first frame update
    void Start()
    {
        health = 100;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyAI : MonoBehaviour
{
    [SerializeField]
    private float speed;
    [SerializeField]
    private byte damage;

    private WaypointArray wp;
    private byte wpcounter;

    void Start()
    {
        wp = GameObject.FindGameObjectWithTag("Waypoints").GetComponent<WaypointArray>();
    }

    void Update()
    {
        transform.position = Vector2.MoveTowards(transform.position, wp.waypoints[wpcounter].position, speed* Time.deltaTime);

        if (Vector2.Distance(transform.position, wp.waypoints[wpcounter].position) < 0.02)
        {
            if (wpcounter < wp.waypoints.Length - 1)
            {
                wpcounter++;
            }
            else
            {
                GameObject.FindGameObjectWithTag("Player").GetComponent<FortHealth>().health -= damage;
                Destroy(gameObject);
            }
        }
    }
}
Que vamos a hacer?
Vamos a digitalizar los sprites de las torretas y a comenzar con la programación de estas
Sofia Alvarez Villanueva
PDOO1

User avatar
StevanAlzate
Posts: 17
Joined: Tue Jan 22, 2019 12:13 pm

Re: Golem Clash - Black Hole Studios

Post by StevanAlzate » Thu Mar 07, 2019 9:53 pm

Sprint #6:

Fecha de inicio: 4/3/2019
Fecha de finalización: 8/3/2019

Clase #2 (Jueves):
    Inicio de programacion en unity (3)

    Que hemos hecho?
    Hicimos los scripts de bala y torreta con su debido rango y daño a los enemigos que pasen.

    Code: Select all

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class bullet : MonoBehaviour
    {
        [SerializeField]
        private float speed;
        private float damage;
        public GameObject enemyTarget;
    
        void Update()
        {
            transform.position = Vector2.MoveTowards(transform.position, enemyTarget.transform.position, speed * Time.deltaTime);
            
        }
    
        void OnTriggerEnter2D(Collider2D other)
        {
            if (other.tag == "Enemy")
            {
                other.GetComponent<EnemyAI>().health -= damage;
                Destroy(gameObject);
            }
        }
    }
    

    Code: Select all

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class TurretAI : MonoBehaviour
    {
        private GameObject target;
        [SerializeField]
        private GameObject bullet;
        [SerializeField]
        private float fireRate;
        [SerializeField]
        private float areaRadius;
        private bool locked;
    
        private GameObject b;
    
    
        void Start()
        {
            transform.GetComponent<CircleCollider2D>().radius = 6.0f * areaRadius;
            StartCoroutine(Shoot());
        }
    
        
        void Update()
        {
            
        }
    
        void OnTriggerEnter2D(Collider2D other)
        {
            if (other.tag == "Enemy")
            {
                target = other.gameObject;
                locked = true;
            }
        }
    
        void OnTriggerExit2D (Collider2D other)
        {
            if (other == target)
            {
                locked = false;
    
            }
        }
    
    
        IEnumerator Shoot()
        {
            if(locked) b = Instantiate(bullet, transform.position, transform.rotation);
            b.GetComponent<bullet>().enemyTarget = target;
            yield return new WaitForSeconds(fireRate);
            StartCoroutine(Shoot());
        }
    }
    
    Que vamos a hacer?
    Vamos a acabar los scripts de las torretas.

    Que nos ha dado dificultades?
    Algunos colliders no están funcionando, seguimos buscando la razón.
    Esteban Alzate

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

    Re: Golem Clash - Black Hole Studios

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

    Image
    Andrés Bedoya Tobón
    Profesor
    "I only smile in the dark, I only smile when it's complicated" Raybiez

    User avatar
    Sofial1224
    Posts: 22
    Joined: Tue Jan 22, 2019 12:15 pm

    Re: Golem Clash - Black Hole Studios

    Post by Sofial1224 » Wed Mar 13, 2019 1:03 pm

    Sprint #7:

    Fecha de inicio: 11/3/2019
    Fecha de finalización: 15/3/2019


    Clase #1 (martes):
    Continuación de programación en unity (3)

    Que hemos hecho?
    Arreglamos los scripts del funcionamiento las balas y las torretas que no estaban funcionando.

    Balas

    Code: Select all

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class bullet : MonoBehaviour
    {
        [SerializeField]
        private float speed;
        public Transform enemyTarget;
    
        void Update()
        {
            transform.position = Vector2.MoveTowards(transform.position, enemyTarget.position, speed * Time.deltaTime);
    
        }
    
    }
    Torretas

    Code: Select all

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class TurretAI : MonoBehaviour
    {
        [Header("Publics")]
        public Transform target;
        public GameObject bullet;
    
        [Header("Characteristics")]
        [SerializeField]
        private float fireRate;
        [SerializeField]
        private float range;
        [SerializeField]
        private float damage;
        
    
        void Start()
        {
            InvokeRepeating("UpdateTarget", 0f, 0.5f);
        }
    
        void OnDrawGizmosSelected()
        {
            Gizmos.color = Color.red;
            Gizmos.DrawWireSphere(transform.position, range);
        }
    
        void UpdateTarget()
        {
            GameObject[] enemyArray = GameObject.FindGameObjectsWithTag("Enemy");
            GameObject nearestEnemy = null;
            float shortestDistance = Mathf.Infinity;
    
            foreach (GameObject enemy in enemyArray)
            {
                float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
                if (distanceToEnemy < shortestDistance)
                {
                    shortestDistance = distanceToEnemy;
                    nearestEnemy = enemy;
                }
            }
    
            if (nearestEnemy != null && shortestDistance <= range)
            {
                target = nearestEnemy.transform;
            }
            else target = null;
    
        }
    }
    Que vamos a hacer?
    Vamos a digitalizar los dibujos de las torretas y a programar el disparo.
    Sofia Alvarez Villanueva
    PDOO1

    User avatar
    StevanAlzate
    Posts: 17
    Joined: Tue Jan 22, 2019 12:13 pm

    Re: Golem Clash - Black Hole Studios

    Post by StevanAlzate » Fri Mar 15, 2019 2:34 pm

    Sprint #7:

    Fecha de inicio: 11/3/2019
    Fecha de finalización: 15/3/2019

    Clase #1 (Jueves):
    Scripts del disparo de la torreta (3)
    Dibujo digital de las torretas (2)

    Que hemos hecho?
    Hicimos que las torretas identifiquen al enemigo más cercano y le disparen hasta que salga de rango o muera, digitalizamos los dibujos de las torretas.

    Code: Select all

     [Header("Publics")]
        public Transform target;
        public GameObject bullet;
    
        [Header("Characteristics")]
        [SerializeField]
        private float fireRate;
        [SerializeField]
        private float range;
      
    
        void Start()
        {
            InvokeRepeating("UpdateTarget", 0f, 0.5f);
        }
    
        void OnDrawGizmosSelected()
        {
            Gizmos.color = Color.red;
            Gizmos.DrawWireSphere(transform.position, range);
        }
    
        void UpdateTarget()
        {
            GameObject[] enemyArray = GameObject.FindGameObjectsWithTag("Enemy");
            GameObject nearestEnemy = null;
            float shortestDistance = Mathf.Infinity;
    
            foreach (GameObject enemy in enemyArray)
            {
                float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
                if (distanceToEnemy < shortestDistance)
                {
                    shortestDistance = distanceToEnemy;
                    nearestEnemy = enemy;
                }
            }
    
            if (nearestEnemy != null && shortestDistance <= range)
            {
                target = nearestEnemy.transform;
                StartCoroutine(Shoot());
            }
            else target = null;
    
        }  
    
        IEnumerator Shoot()
        {
            if (target != null)
            {
                GameObject b = (GameObject)Instantiate(bullet, transform.position, transform.rotation);
                b.GetComponent<bullet>().enemyTarget = target;
                yield return new WaitForSeconds(fireRate);
                StartCoroutine(Shoot());
            }
        }
    Image



    Que nos ha dado dificultades?
    Hubo un problema con los códigos por el mal funcionamiento de colliders, pero ya lo arreglamos.
    Esteban Alzate

    User avatar
    Sofial1224
    Posts: 22
    Joined: Tue Jan 22, 2019 12:15 pm

    Re: Golem Clash - Black Hole Studios

    Post by Sofial1224 » Tue Mar 19, 2019 7:10 pm

    Sprint #7:

    Fecha de inicio: 18/3/2019
    Fecha de finalización: 22/3/2019


    Clase #1 (martes):
    Continuación de programación en unity (3)
    Sprites de cursores (2)

    Que hemos hecho?
    Hubo cambios estéticos en el mapa para que cupieran más torretas, se puso espacios para las torretas que cambian de color cuando tienen el mouse encima y un cursor personalizado del juego que cambia a un martillo donde se pueda construir.

    Image

    Image

    Image

    Script sitio para construir

    Code: Select all

    public class Spot : MonoBehaviour
    {
        [SerializeField]
        private Color mousecolor;
    
        private Color startColor;
        private Renderer rend;
        private GameObject cursor;
        private GameObject cursor2;
    
    
        void Start()
        {
            rend = GetComponent<Renderer>();
            startColor = rend.material.color;
            cursor = GameObject.FindGameObjectWithTag("Cursor");
            cursor2 = GameObject.FindGameObjectWithTag("Cursor2");
        }
        
        void OnMouseEnter()
        {
            rend.material.color = mousecolor;
            cursor.GetComponent<Renderer>().enabled = false;
            cursor2.GetComponent<Renderer>().enabled = true;
        }
    
        void OnMouseExit()
        {
            rend.material.color = startColor;
            cursor2.GetComponent<Renderer>().enabled = false;
            cursor.GetComponent<Renderer>().enabled = true;
        }
        
    }
    
    Script cursor
    public class CursorReplacement : MonoBehaviour
    {
    
        void Start()
        {
            Cursor.visible = false;
    
        }
    
        void Update()
        {
            Vector2 cursorPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position = cursorPosition;
        }
    }
    
    Script cursor

    Code: Select all

    public class CursorReplacement : MonoBehaviour
    {
    
        void Start()
        {
            Cursor.visible = false;
    
        }
    
        void Update()
        {
            Vector2 cursorPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position = cursorPosition;
        }
    }
    


    Que vamos a hacer?
    Vamos a hacer que las torretas se puedan poner en los lugares de construcción y programaremos la moneda que se consigue recogiendo los materiales que sueltan los enemigos.
    Sofia Alvarez Villanueva
    PDOO1

    User avatar
    Sofial1224
    Posts: 22
    Joined: Tue Jan 22, 2019 12:15 pm

    Re: Golem Clash - Black Hole Studios

    Post by Sofial1224 » Thu Mar 21, 2019 11:17 pm

    Sprint #7:

    Fecha de inicio: 18/3/2019
    Fecha de finalización: 22/3/2019


    Clase #2 (jueves):
    Continuación de programación en unity (3)

    Que hemos hecho?
    En el juego ya se pueden construir y destruir torretas y ya se acumula dinero que se gana con el tiempo y con lo que los enemigos sueltan al ser eliminados.



    Que vamos a hacer?

    Vamos a continuar con la programación en unity y a realizar las animaciones de los enemigos
    Sofia Alvarez Villanueva
    PDOO1

    User avatar
    Sofial1224
    Posts: 22
    Joined: Tue Jan 22, 2019 12:15 pm

    Re: Golem Clash - Black Hole Studios

    Post by Sofial1224 » Tue Mar 26, 2019 9:55 pm

    Sprint #8:

    Fecha de inicio: 25/3/2019
    Fecha de finalización: 29/3/2019


    Clase #1 (martes):
    Continuación de programación en unity (3)

    Que hemos hecho?
    Pusimos un sistema de hordas de enemigos, en el cual los enemigos de mayor dificultad van apareciendo a medida que avanza el juego

    Code: Select all

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class WaveSpawn : MonoBehaviour
    {
        [Header("Checkers")]
        [SerializeField] private byte wave;
        [SerializeField] private int difficulty;
    
        [SerializeField] private Text waveText;
        [SerializeField] private GameObject[] enemies;
        
        [SerializeField] private byte enemyAdd;
        [SerializeField] private byte timeBetweenWaves;
    
        private float countdown;
        private GameObject randomEnemy;
    
        void Start()
        {
            waveText.text = "Wave  " + wave.ToString();
    
            countdown = 3f;
            difficulty = 0;
        }
    
        void Update()
        {
            waveText.text = "Wave  " + wave.ToString();
    
            if (countdown <= 0f)
            {
                StartCoroutine(SpawnWave());
                countdown = timeBetweenWaves;
            }
    
            countdown -= Time.deltaTime;
        }
    
        private GameObject GetEnemy (int difficulty)
        {
            return enemies[Random.Range(0, difficulty)];
        }
    
        IEnumerator SpawnWave()
        {
            wave++;
    
            for (int i = 0; i < wave; i++)
            {
                randomEnemy = GetEnemy(difficulty);
                Instantiate(randomEnemy, transform.position, transform.rotation);
                yield return new WaitForSeconds(1);
                i++;
            }
    
            if ((wave%enemyAdd) == 0)
            {
                difficulty++;
            }
    
            if (difficulty > enemies.Length)
            {
                difficulty = enemies.Length;
            }
        }
    }
    Que vamos a hacer?
    Vamos a continuar con la programación en unity, resolver problemas que se presentaron y comenzar con las animaciones de los enemigos
    Sofia Alvarez Villanueva
    PDOO1

    User avatar
    Sofial1224
    Posts: 22
    Joined: Tue Jan 22, 2019 12:15 pm

    Re: Golem Clash - Black Hole Studios

    Post by Sofial1224 » Thu Mar 28, 2019 10:23 pm

    Sprint #8:

    Fecha de inicio: 25/3/2019
    Fecha de finalización: 29/3/2019


    Clase #2 (jueves):
    Continuación de programación en unity (3)

    Que hemos hecho?
    Se está aplicando un cambio a la manera de construir del juego para que sea más sencilla de utilizar, por lo que el script de construcción ha cambiado casi por completo y se diseñó una interfaz propia para construir

    Image

    Nuevo Script de Construcción

    Code: Select all

    public class Spot : MonoBehaviour
    {
        [Header("No Cambiables")]
        [SerializeField] private Color mousecolor;
        [SerializeField] private Color nopecolor;
    
        [SerializeField] private GameObject player;
    
        private Color startColor;
        private Renderer rend;
        private GameObject cursor;
        private GameObject cursor2;
        private string mouseState;
    
        [Header("Cambiables")]
        [SerializeField] private GameObject PTower;
        [SerializeField] private GameObject MTower;
    
        private bool turretPlaced;
        private GameObject placedTurret;
    
        private int cost;
    
        private int currency;
        private GameObject child;
    
        void Start()
        {
            mouseState = GameObject.FindGameObjectWithTag("Mouse").GetComponent<MouseState>().state;
    
            turretPlaced = false;
    
            rend = GetComponent<Renderer>();
            startColor = rend.material.color;
    
            cursor = GameObject.FindGameObjectWithTag("Cursor");
            cursor2 = GameObject.FindGameObjectWithTag("Cursor2");
        } 
    
        void OnMouseEnter()
        {      
            if (mouseState == "PTower" || mouseState == "MTower" || mouseState == "Upgrade")
            {
                rend.material.color = mousecolor;
            }
            else rend.material.color = nopecolor;
        }
    
        void OnMouseExit()
        {
            rend.material.color = startColor;
        }
    
        void OnMouseDown()
        {
            if (mouseState == "PTower")
            {
                cost = PTower.GetComponent<TurretAI>().cost;
            }
            else if (mouseState == "MTower")
                {
                    cost = MTower.GetComponent<TurretAI>().cost;
                }
    
            if (cost <= currency && (mouseState == "PTower" || mouseState == "MTower") && !turretPlaced)
            {
                if (mouseState == "PTower")
                {                
                    player.GetComponent<FortHealth>().currency -= cost;
                    placedTurret = Instantiate( PTower, transform.position, transform.rotation);
                }
                if (mouseState == "MTower")
                {             
                    player.GetComponent<FortHealth>().currency -= cost;
                    placedTurret = Instantiate( MTower, transform.position, transform.rotation);              
                }
    
                turretPlaced = true;
                ChangeCursor();
            }
    
            if (mouseState == "Destroy" && turretPlaced)
            {
                player.GetComponent<FortHealth>().currency += (cost / 2);
                Destroy(placedTurret);
                turretPlaced = false;
            }
    
            if (mouseState == "Upgrade" && turretPlaced)
            {
                placedTurret.GetComponent<TurretAI>().fireRate += 0.5f;
                player.GetComponent<FortHealth>().currency -= (cost / 2);
            }
    
            else return;
        }
    
    
    
        public void ChangeCursor()
        {
            if (cursor.GetComponent<Renderer>().enabled)
            {
                cursor.GetComponent<Renderer>().enabled = false;
                cursor2.GetComponent<Renderer>().enabled = true;
            }
    
            else if (cursor2.GetComponent<Renderer>().enabled)
            {
                cursor2.GetComponent<Renderer>().enabled = false;
                cursor.GetComponent<Renderer>().enabled = true;
            }
    
            else return;
        }
    
    }
    
    Que vamos a hacer?
    Vamos a terminar el nuevo sistema de construcción, lo que incluye 2 torres distintas y un sistema de mejoras y de destrucción de torres.
    Sofia Alvarez Villanueva
    PDOO1

    Post Reply