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 » Thu Apr 25, 2019 11:58 pm

¿Qué hemos hecho?

Programación:

Principalmente se implementó un minijuego de combate con las caras de ambos integrantes del equipo. Este minijuego va a ser accedido a manera de "easter egg" al final de los créditos, y su único propósito es divertir y hacer reír a quienes lo encuentren. No hay vidas, y tiene mecanismos un tanto alocados, con un video trippy que hizo martín. También se terminó el mapa del juego, agregandole sombras y texturas que le dan más vida al dibujo. Se implementó una transición animada que aparece entre cada cambio de escena. Al igual que una pequeña animación básica del menu de pausa, en vez de aparecer instantáneamente.

Animación:

Se implentaron animaciones de las mejoras de los personajes. Dos para el tank nivel 2, y una para el Nigglet nivel 2. También cuando un jugador gana, un amiguito apuntará cual lado gana, y otro indicará el ganador. Se implementaron nuevo apartado gráfico chetadísimo en el hud, pantalla de carga, etc... Bastantes avances gráficos que le dan mucha vida al juego

Evidencias:

Code: Select all

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

public class JugadorMinijuego : MonoBehaviour {

    public KeyCode kizq;
    public KeyCode kder;
    public KeyCode karr;
    public KeyCode kabj;
    public string axis;

    public float speed;
    public float downspeed;
    public int jump;

    public bool tocandopiso;
    public bool cooldownsalto;

    public Vector3 ultimacolision;

    Vector3 basescale;

    int dir;

    public GameObject plataforma1;
    public GameObject plataforma2;

	void Start () {
        dir = 1;
        basescale = transform.localScale;
        StartCoroutine(LoopPlataformas());
    }

    private void FixedUpdate()
    {
        GetComponent<Rigidbody2D>().AddForce(Vector2.right * Input.GetAxisRaw(axis) * speed);
        GetComponent<Rigidbody2D>().AddForce(Vector2.right * GetComponent<Rigidbody2D>().velocity.x * - 5);
        
        if (Input.GetKey(kabj) && !tocandopiso) GetComponent<Rigidbody2D>().AddForce(Vector2.down * downspeed);
    }
    void Update () {

        transform.localScale = new Vector3(dir *basescale.x, basescale.y, 1);
        if (Input.GetKeyDown(kizq)) dir = -1;
        if (Input.GetKeyDown(kder)) dir = 1;



        if (Input.GetKeyDown(karr) && tocandopiso && !cooldownsalto)
        {
            GetComponent<Rigidbody2D>().AddForce(Vector2.up * jump);
            if (transform.position.y - ultimacolision.y < 0.5f)
            {
                GetComponent<Rigidbody2D>().velocity = new Vector2(0, GetComponent<Rigidbody2D>().velocity.y);
                GetComponent<Rigidbody2D>().AddForce((ultimacolision.x > transform.position.x) ? Vector2.left * 500 : Vector2.right * 500);
            }
            tocandopiso = false;
            StartCoroutine(CoolDownSalto());
        }

        if((transform.position + Vector3.down * 0.5f - ultimacolision).magnitude > 1.5f || ultimacolision.y > transform.position.y) tocandopiso = false;


        Debug.DrawRay(transform.position + Vector3.down * 0.5f, ultimacolision - transform.position + Vector3.down * 0.5f);

        if (transform.position.y < -10 || transform.position.y > 100)
        {
            transform.position = Vector3.zero;
            basescale = new Vector3(Random.Range(0.5f, 5), Random.Range(0.5f, 5), 1);
        }
    }


    void OnCollisionEnter2D(Collision2D collision)
    {
        ultimacolision = collision.contacts[0].point;
        if (collision.contacts[0].point.y < transform.position.y)
        {
            tocandopiso = true;
        }

        if (collision.gameObject.CompareTag("PersonajeMinijuego"))
        {
            collision.gameObject.GetComponent<Rigidbody2D>().AddForce(GetComponent<Rigidbody2D>().velocity * 20);
        }
    }

    void OnCollisionStay2D(Collision2D collision)
    {
        ultimacolision = collision.contacts[0].point;
        if (collision.contacts[0].point.y < transform.position.y)
        {
            tocandopiso = true;
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
    }

    IEnumerator CoolDownSalto()
    {
        cooldownsalto = true;
        yield return new WaitForSeconds(0.2f);
        cooldownsalto = false;
    }
    IEnumerator LoopPlataformas()
    {
        for (int i = 0; i < 100; i++)
        {
            plataforma1.transform.position += Vector3.up * 0.01f;
            plataforma2.transform.Rotate(0, 0, 1);
            yield return new WaitForSeconds(0.01f);
        }
        for (int i = 0; i < 100; i++)
        {
            plataforma1.transform.position -= Vector3.up * 0.01f;
            plataforma2.transform.Rotate(0, 0, -1);
            yield return new WaitForSeconds(0.01f);
        }
        StartCoroutine(LoopPlataformas());
    }
}
JugadorMinijuego.cs

Image
Animación walk de TANK 2

Image
Animación de walk de TANK 2

Image
Nigglet 2 walk

Image
¡Ganador!

Image
¡Este es el ganador!


Easter Egg
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 Apr 26, 2019 12:08 am

Transicion entre escenas y ajustes gráficos al fondo
Juan Camilo Quintero

POO1

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

Re: Neugier Battles - Wintergarnele Studios

Post by wintuh » Wed May 01, 2019 12:00 am

Sprint 12

Sprint de tutorial!

Actividad 1

Implementar un tutorial

Reconstruir scripts de control general y mecanicas limitadas especificamente para el tutorial (Juan Camilo) :: 5

Programar HUD del tutorial (Juan Camilo) :: 3

Hacer íconos y hud del tutorial (Martín) :: 3

Hacer los sprites correspondientes (Martín) :: 5

Avances del Nigglet 2:

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

Martín Jaramillo Nicholls

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

Re: Neugier Battles - Wintergarnele Studios

Post by xacarana » Thu May 02, 2019 12:31 pm

Image

Van muy bien, no pierdan el ritmo, pero recuerden publicar el día de la clase.
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 » Thu May 02, 2019 11:47 pm

¿Qué hemos hecho?

En cuanto a diseño de mecánicas y así, estructuramos como sería el tutorial, y acto seguido, lo estamos desarrollando. Este consta de una línea, con un personaje el cuál será el guía a lo largo de este para enseñarle a los jugadores a jugar. Planteando las mecánicas base y a su vez, tacticas no muy complejas, para dejarle estas, a los jugadores. El guía va a constar de varias animaciones, para explicar, moverse por la pantalla (Sin estar cortado porque fue un consejo que nos dio Xaca) y señalar cosas.

En gráficos, se tiene una base de el mapa del tutorial, con ambas bases establecidas con un diseño ya planteado. Este tendrá varios elementos clickeables con los cuales interactuar para generar pequeños movimientos, dándole más vida al juego.

¿Qué vamos a hacer?

En el cercano futuro, se terminará el tutorial, para luego empezar a refinar todo el código, para que este tenga un mejor diseño y a su vez, sea más "clean code". También trabajaremos en más animaciones para darle el sentimiento de progreso a los jugadores

Complicaciones

Nada, 0, todo bien, vamos melos

Adelantos místicos:

Image
Esta es la idea de mostrar cosas en el tutorial

Image
Aquí explicaría algo

Image
Y así se desplazaría

Image
Ya el nigglet punch está coloreado

Image
Esta es la base del mapa de tutorial que constra de una sola línea

Image
Gradualmente le iremos poniendo más cosas al mapa, como este amiguito que saluda

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class BotonTutorial : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler,IPointerDownHandler,IPointerUpHandler {

    public static int pagina;
    public Color desselect;
    public Color over;
    public Color click;

    public GameObject anim0;
    public GameObject anim1;
    public GameObject anim2;
    public GameObject anim3;
    public GameObject anim4;
    public GameObject anim5;

    public Text page;

	void Start () {
        BotonTutorial.pagina = 0;
        GameObject.Find("Transicion").GetComponent<Animator>().SetTrigger("Intro");
    }

    void Update () {
        page.text = BotonTutorial.pagina.ToString();

        anim0.SetActive((BotonTutorial.pagina == 0) ? true : false);
        anim1.SetActive((BotonTutorial.pagina == 1) ? true : false);
        anim2.SetActive((BotonTutorial.pagina == 2) ? true : false);
        anim3.SetActive((BotonTutorial.pagina == 3) ? true : false);
        anim4.SetActive((BotonTutorial.pagina == 4) ? true : false);
        anim5.SetActive((BotonTutorial.pagina == 5) ? true : false);
	}

    public void OnPointerEnter(PointerEventData eventData)
    {
        GetComponent<Text>().color = over;

    }
    public void OnPointerExit(PointerEventData eventData)
    {
        GetComponent<Text>().color = desselect;

    }
    public void OnPointerDown(PointerEventData eventData)
    {
        if (gameObject.name == "Next")
        {
            if (BotonTutorial.pagina < 5) BotonTutorial.pagina++;
            else StartCoroutine(Boton.Delay("Main"));

        }
        if (gameObject.name == "Previous")
        {
            if (BotonTutorial.pagina > 0) BotonTutorial.pagina--;

        }

        GetComponent<Text>().color = click;
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        GetComponent<Text>().color = desselect;

    }

}
Este es el código del tutorial.
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

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

Re: Neugier Battles - Wintergarnele Studios

Post by xacarana » Fri May 03, 2019 3:28 pm

Image

Bien, recuerden incluir las mejoras en la presentación y contarnos como estan asignando las tareas de programación.
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 May 07, 2019 11:58 pm

Sprint 13

Actividad 1:

Terminar el tutorial y empezar a refinar código

Refinamiento de código para que quede mejor diseñado (Juan Camilo) :: 4
Terminar el tutorial con todas las animaciones (Juan Camilo) :: 3

Actividad 2:

Gráficas del tutorial (Martín) :: 4
Adelantar sprites de evolución (Martín) :: 4
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

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

Re: Neugier Battles - Wintergarnele Studios

Post by xacarana » Thu May 09, 2019 12:17 pm

Iban muy bien, pero no publicaron evidencia de avance.
Image

¡Strike!

Image
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 » Thu May 09, 2019 11:55 pm

¿Qué hemos hecho?

Quedó listo la estructura del tutorial con los sprites correspondientes. Esto incluye un personaje amigable rojo el cuál se mueve por la pantalla caminando y se detiene a explicar los aspectos claves del juego. Se compuso la música de acción para el combate principal, y se trasladó la música que ya había para el tutorial. En el tutorial el texto sale de una manera amigable para que los usuario entiendan las mecánicas más importantes de Neugier.


Image Image
Personajes que alentarán al jugador en el tutorial, irán de muchos colores

Image
Así el personaje explicará las mecánicas
Image
Y así se desplazará

Image
Esta es una flecha para el tutorial

Image

Este es el guion (sin tilde porque es monosílaba) del tutorial.

Image

Image

Aquí está nuestro amiguito del tutorial en acción



¿Qué vamos a hacer?

Animación: Terminar los sprites que faltan para entregar el juego completo.

Programación: Implementar nuevas animaciones, corregir y balancear detalles del juego, repasar mucho el código para la presentación.

Dificultades

Dificultades:

Martín tuvo un lunes complicado ya que tuvo que quedarse hasta tarde en un hospital acompañando a un familiar que estaba siendo operado del manguito rotador. Juan Camilo abordó una cantidad elevada de proyectos los cuales está balanceando para que todo se pueda dar.
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 May 14, 2019 11:00 pm

SPRINT FINAL FINALOSO PARA ENTREGAR BIEN MELOSO #14

Actividad #1

Animación

Se completará todo lo que se pueda con respecto a las mejoras de las tropas y torretas (Martín) :: 5

Actividad #2
Programación

Terminar de pulir detalles generales del juego (Juan Camilo y Martín) :: 3
Implementar ultimas animaciones de los niveles de los personajes (Juan Camilo) :: 2
Terminar el tutorial (Juan Camilo)

Actividad #3
Presentación

Realizar video Trailer oficial del juego (Juan Camilo y Martín) :: 4
Se harán piezas gráficas para la presentación final (Martín y Juan Camilo) :: 3
PAUSA (Juan camilo) :: 4


AVANCES LOCOS
Los elementos en la tabla tienen 3 números correspondientes a las mejoras
Image

Image
Este es el tank 2 por detrás

Code: Select all

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

public class Portal : MonoBehaviour {

    public GameObject otroportal;

	void Start () {
		
	}
	
	void Update () {
        if (!otroportal.activeInHierarchy)
        {
            transform.localScale = Vector3.one * 5;
            GetComponent<Image>().color = new Color(GetComponent<Image>().color.r, GetComponent<Image>().color.g, GetComponent<Image>().color.b, 0.3f);
        }
        else
        {
            transform.localScale = Vector3.one * 10;
            GetComponent<Image>().color = new Color(GetComponent<Image>().color.r, GetComponent<Image>().color.g, GetComponent<Image>().color.b, 0.7f);
        }
        transform.Rotate(0, 0, 100);
	}
}
Código de los portales locos
Programación y diseño orientado a objetos (pdoo1)

Martín Jaramillo Nicholls

Post Reply