ARZ VEGA - Epcot

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

Moderator: julianmartinez16

User avatar
SebasARZ25
Posts: 16
Joined: Thu Jul 26, 2018 6:28 am

Re: ARZ VEGA - Epcot

Post by SebasARZ25 » Thu Aug 23, 2018 3:43 am

¿Que hicimos?
  • Se creo el escenario conforme el diseño hecho en papel. Se dejó a un lado el escenario modelado que se tenia debido a que era mas complicado manipularlo dentro de Unity.
  • Se creo el NavMesh del escenario.
  • Se genero el movimiento de unidad de infantería dirigida por el jugador.
  • Organización optima de la cámara de forma que el jugador pueda ver todo el terreno y al mismo tiempo se sienta un angulo cómodo (se piensa colocar al menos una cámara adicional con el fin de que el jugador pueda controlar sus unidades desde varios puntos del escenario)
¿Que vamos a hacer?
  • Implementar todo el código que llevamos hasta ahora en un mismo proyecto.
  • Programar la inteligencia artificial del desplazamiento de los enemigos.
  • Programar el despliegue de torres.
  • Debemos organizar la planeación y continuar avanzando fuertemente con el proyecto, debido a que nos estamos quedando.
¿Que problemas tuvimos?
  • Tenemos dificultad para reunirnos.
  • Dificultad entendiendo el Unity y el código para el desplazamiento de la unidad.
  • Dificultad con la distribución de elementos para que el NavMesh se pueda crear funcional mente.
  • Dificultad con la nube de Unity, se intento subir un proyecto a la nube para poder trabajar simultáneamente y que este se actualice en tiempo real pero aun no logramos comprender muy bien el funcionamiento de la nube de Unity.
  • Dificultad con los tutoriales de Unity debido a que son en ingles.
  • Se intento subir repositorio a GitHub pero no se tuvo exito.
Juan Sebastian Ariza Jimenez
Programación orientada a objetos

User avatar
SebasARZ25
Posts: 16
Joined: Thu Jul 26, 2018 6:28 am

Codigo Torre

Post by SebasARZ25 » Tue Aug 28, 2018 5:57 am

Code: Select all

namespace TowerDefense.Towers
{
	
	public class Tower : Targetable
	{
	
		public TowerLevel[] levels;

		
		public string towerName;

		
		public IntVector2 dimensions;

		
		public LayerMask enemyLayerMask;

		
		public int currentLevel { get; protected set; }

		
		public TowerLevel currentTowerLevel { get; protected set; }

		
		public bool isAtMaxLevel
		{
			get { return currentLevel == levels.Length - 1; }
		}

		
		public TowerPlacementGhost towerGhostPrefab
		{
			get { return levels[currentLevel].towerGhostPrefab; }
		}

		
		public IntVector2 gridPosition { get; private set; }

		
		public IPlacementArea placementArea { get; private set; }

		
		public int purchaseCost
		{
			get { return levels[0].cost; }
		}

		
		public Action towerDeleted;

		
		public Action towerDestroyed;

		
		public virtual void Initialize(IPlacementArea targetArea, IntVector2 destination)
		{
			placementArea = targetArea;
			gridPosition = destination;

			if (targetArea != null)
			{
				transform.position = placementArea.GridToWorld(destination, dimensions);
				transform.rotation = placementArea.transform.rotation;
				targetArea.Occupy(destination, dimensions);
			}

			SetLevel(0);
			if (LevelManager.instanceExists)
			{
				LevelManager.instance.levelStateChanged += OnLevelStateChanged;
			}
		}

	
		public int GetCostForNextLevel()
		{
			if (isAtMaxLevel)
			{
				return -1;
			}
			return levels[currentLevel + 1].cost;
		}

		
		public void KillTower()
		{
			// Invoke base kill method
			Kill();
		}

		
		public int GetSellLevel()
		{
			return GetSellLevel(currentLevel);
		}

		public int GetSellLevel(int level)
		{
			
			if (LevelManager.instance.levelState == LevelState.Building)
			{
				int cost = 0;
				for (int i = 0; i <= level; i++)
				{
					cost += levels[i].cost;
				}

				return cost;
			}
			return levels[currentLevel].sell;
		}

		
		public virtual bool UpgradeTower()
		{
			if (isAtMaxLevel)
			{
				return false;
			}
			SetLevel(currentLevel + 1);
			return true;
		}

		
		public virtual bool DowngradeTower()
		{
			if (currentLevel == 0)
			{
				return false;
			}
			SetLevel(currentLevel - 1);
			return true;
		}

		
		public virtual bool UpgradeTowerToLevel(int level)
		{
			if (level < 0 || isAtMaxLevel || level >= levels.Length)
			{
				return false;
			}
			SetLevel(level);
			return true;
		}

		public void Sell()
		{
			Remove();
		}

		
		public override void Remove()
		{
			base.Remove();
			
			placementArea.Clear(gridPosition, dimensions);
			Destroy(gameObject);
		}

		protected virtual void OnDestroy()
		{
			if (LevelManager.instanceExists)
			{
				LevelManager.instance.levelStateChanged += OnLevelStateChanged;
			}
		}

		
		protected void SetLevel(int level)
		{
			if (level < 0 || level >= levels.Length)
			{
				return;
			}
			currentLevel = level;
			if (currentTowerLevel != null)
			{
				Destroy(currentTowerLevel.gameObject);
			}

			
			LevelState levelState = LevelManager.instance.levelState;
			bool initialise = levelState == LevelState.AllEnemiesSpawned || levelState == LevelState.SpawningEnemies;
			currentTowerLevel.SetAffectorState(initialise);
		}

		
		protected virtual void ScaleHealth()
		{
			configuration.SetMaxHealth(currentTowerLevel.maxHealth);
			
			if (currentLevel == 0)
			{
				configuration.SetHealth(currentTowerLevel.maxHealth);
			}
			else
			{
				int currentHealth = Mathf.FloorToInt(configuration.normalisedHealth * currentTowerLevel.maxHealth);
				configuration.SetHealth(currentHealth);
			}
		}

		
		protected virtual void OnLevelStateChanged(LevelState previous, LevelState current)
		{
			bool initialise = current == LevelState.AllEnemiesSpawned || current == LevelState.SpawningEnemies;
			currentTowerLevel.SetAffectorState(initialise);
		}
	}
}
Image

Image

Image

¿Que hicimos?
  • Se crearon el molde de las torres con sus propiedades
  • Se creo una torre en nivel 1 y nivel 2
  • Las torres pueden tener diferentes valores de salud, costo y venta; ademas de nombre, descripción y icono
¿Que se va a hacer?
  • Se implementarán mas torres
  • Modelado basico de torres y mejoras de torre, para que se pueda diferenciar facilmente entre cada torre y sus mejoras
  • Revisar errores y que lo que se hizo funciona
¿Que problemas tuvimos?
  • Es dificil tener una metologia de aprendizaje y ejecucion al mismo tiempo
  • Dificultad para reunirnos
  • Los tutoriales del profesor no funcionan del todo bien cuando se implementan en 3D, por lo tanto se esta usando de referencia un tutorial de Unity
  • En la documentación de Unity hay dificultades debido a que es en ingles y a veces es difícil entender el contexto de lo que se esta escrito; esto retrasa el trabajo
Juan Sebastian Ariza Jimenez
Programación orientada a objetos

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

Re: ARZ VEGA - Epcot

Post by xacarana » Tue Sep 04, 2018 6:17 am

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

User avatar
SebasARZ25
Posts: 16
Joined: Thu Jul 26, 2018 6:28 am

Re: ARZ VEGA - Epcot

Post by SebasARZ25 » Thu Sep 06, 2018 6:05 am

¿Que se hizo?
Se adelanto trabajo considerable debido a los defict que se tuvieron.
Se crearon los caminos para que las unidades caminen por el escenario hasta llegar a la torre principal.
Se creo la detección de unidades para la torre.
Se crearon las bases para desplegar la torre.
Se pregunto en Asesoría como funciona GitHub y se creo un repositorio con los archivos de Unity.
También en Asesoría recomendaron otros tutoriales que pueden servir de referencia para el proyecto y mas sencillos de entender.
Se subió y compartió el proyecto en la nube de Unity para poder trabajar en equipo en tiempo real en cualquier momento desde cualquier lugar, ademas también sirve como repositorio gracias a que si se llega a borrar el proyecto en un computador se puede recuperar todo descargándolo desde la nube.
¿Que se va a hacer?
Hacer que las torres detecten mas de una unidad.
Crear unidades con diferentes características.
Generar el disparo de las torres y unidades.
¿Que problemas tuvimos?
Se estaba usando de referencia un tutorial escrito de Tower Defense de Unity para la creación del juego pero debido a que este es de dificultad intermedio habían cosas que no quedaban claras y luego de invertir mucho tiempo haciéndolos no se veía una aplicación directa.
Por comodidad se volvieron a usar los toturiales del profesor y se solucionaron los problemas de código para que funcionaran también en 3D.
Dificultades con el trabajo en equipo.
Problemas con GitHub de escritorio a la hora de publicar el repositorio.
Last edited by SebasARZ25 on Thu Sep 06, 2018 6:14 am, edited 3 times in total.
Juan Sebastian Ariza Jimenez
Programación orientada a objetos

User avatar
SebasARZ25
Posts: 16
Joined: Thu Jul 26, 2018 6:28 am

Re: ARZ VEGA - Epcot

Post by SebasARZ25 » Thu Sep 06, 2018 6:09 am

Muestra del progreso


Poner torres

Code: Select all

public class PonerTorres : MonoBehaviour {

    public GameObject torre;
	void OnMouseDown()
    {
        GameObject temp;
        Vector3 pos = this.transform.position;
        pos.y = pos.y + 0.9f;
        temp = Instantiate(torre);
        temp.transform.position = pos;
        temp.layer = 5;
    
	}
}

Detección de enemigo

Code: Select all

public class Torre : MonoBehaviour {
    public GameObject enemigo;
    private float distancia_umbral = 4;

	void Start () {
		
	}
	
	void Update () {
        float distancia = (enemigo.transform.position - this.transform.position).magnitude;

        if(distancia <= distancia_umbral)
        {
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.red);
        }
		
	}
}
Movimiento de unidad

Code: Select all

public class Unidad : MonoBehaviour {

    public GameObject ruta;
    private int indice;
    private Vector3 posicion_siguiente;
    private float vel = 1;
    private float distancia_punto = 0.5f;

	void Start () {
        posicion_siguiente = ruta.transform.GetChild(0).position;
		
	}
	void Update () {
        Vector3 dir = posicion_siguiente - this.transform.position;

        this.transform.position += dir * vel * Time.deltaTime;

        if (dir.magnitude <= distancia_punto)
        {
            if(indice+1 < ruta.transform.childCount)
            {
                indice++;
                posicion_siguiente = ruta.transform.GetChild(indice).position;
                Debug.Log("xs" + posicion_siguiente.x + "ys" + posicion_siguiente.y + "zs" + posicion_siguiente.z);
            }
        }
		
	}
}
Juan Sebastian Ariza Jimenez
Programación orientada a objetos

User avatar
atv234
Posts: 75
Joined: Tue Jan 19, 2016 12:05 pm

ARZ VEGA - Epcot

Post by atv234 » Mon Sep 10, 2018 7:15 pm

Image

:geek: :geek: :geek: :geek:
Last edited by atv234 on Wed Sep 12, 2018 9:55 pm, edited 1 time in total.
Daniel Vega Balbin

Programación y diseño orientado a objetos :evil: :ugeek:

User avatar
SebasARZ25
Posts: 16
Joined: Thu Jul 26, 2018 6:28 am

Re: ARZ VEGA - Epcot

Post by SebasARZ25 » Tue Sep 11, 2018 1:05 am

Creación de varias unidades

Code: Select all


    public static ArrayList unidades = new ArrayList();

    // Use this for initialization
    void Start()
    {
        GameObject unidad = GameObject.Find("Unidad_01");
        GameObject temp;
        Vector3 incremento = new Vector3(0, 1);
        Vector3 posicion_actual = unidad.transform.position;
        for (int i = 0; i < 10; i++)
        {
            temp = (GameObject)Instantiate(unidad, posicion_actual + incremento, Quaternion.identity);
            posicion_actual = temp.transform.position;
            unidades.Add(temp);
        }


    }

¿Que hicimos?

Hicimos que se puedan generar varias unidades y que estas se puedan reciclar para evitar gastos de memoria innecesarios.

¿Que vamos a hacer?

Crear el disparo del enemigo, y buscar nuevas fuentes de referencia para seguir puliendo y mejorando el proyecto.

¿Que problemas tuvimos?

Se generan demasiadas unidades.
Hubo un error con el Script desconocido, que no dejaba asignar el script a la cámara.
Hubo que crear el script directamente desde la cámara para que este pudiese agregarse.
Parciales en otras materias causan un agotamiento de tiempo.
Juan Sebastian Ariza Jimenez
Programación orientada a objetos

User avatar
atv234
Posts: 75
Joined: Tue Jan 19, 2016 12:05 pm

Nuevo git

Post by atv234 » Tue Sep 11, 2018 7:24 am

Daniel Vega Balbin

Programación y diseño orientado a objetos :evil: :ugeek:

User avatar
atv234
Posts: 75
Joined: Tue Jan 19, 2016 12:05 pm

Diagrama Clases

Post by atv234 » Wed Sep 12, 2018 9:36 pm

Image
Daniel Vega Balbin

Programación y diseño orientado a objetos :evil: :ugeek:

User avatar
atv234
Posts: 75
Joined: Tue Jan 19, 2016 12:05 pm

Re: ARZ VEGA - Epcot

Post by atv234 » Thu Sep 13, 2018 6:09 am

¿Que hicimos?
Intentar las diferentes implementaciones de la barra de vida, diseño de diagrama de clases


¿Que vamos a hacer?
Preparar muy bn la pre entrega con un mini ejecutable del juego

¿Que dificultades?
Semana de muchos parciales e entregas, ensayo y error de como se vería mejor la barra de vida para que quede como final del juego
Daniel Vega Balbin

Programación y diseño orientado a objetos :evil: :ugeek:

Post Reply