Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI #57

Open
wants to merge 87 commits into
base: master
Choose a base branch
from
Open

UI #57

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
e70ce18
Update respecto de la plantilla original
FrancoEsposta Apr 25, 2024
e615e91
Fix de caracter extraño
FrancoEsposta Apr 25, 2024
dd212ee
Agrego contenido provisto por la catedra
FrancoEsposta Apr 25, 2024
8182851
Fix problema con Sign.png
FrancoEsposta Apr 27, 2024
908562c
Primera iteración sobre una camara libre para navegar el mapa
FrancoEsposta Apr 28, 2024
c4ca281
Limpio cosas innecesarias para la camara
FrancoEsposta Apr 29, 2024
5335521
Borro codigo que no va para la camara libre
FrancoEsposta Apr 29, 2024
dfd31ce
Agrego lo necesario para crear un terreno plano basico
FrancoEsposta Apr 29, 2024
a957449
Arreglo un problema en el constructor de Terrain y agrego ejemplo de …
FrancoEsposta Apr 29, 2024
e13563a
Iterando para meter texturas en el piso
FrancoEsposta Apr 29, 2024
faeebf7
Rebase de la camara libre para poder navegar el escenario
FrancoEsposta Apr 30, 2024
7c003a3
Merge pull request #2 from abmango/FreeCamera
FrancoEsposta Apr 30, 2024
ef0ef0c
Merge pull request #1 from abmango/terreno-base
FrancoEsposta Apr 30, 2024
0707292
Agrego primitivas de cubos un poco customizadas
FrancoEsposta Apr 30, 2024
d4ac6f5
plataformas listas
camilazzati Apr 30, 2024
de26282
Agrego primitiva para rampas
Apr 30, 2024
2d5d40e
Agrego lista para primitivas geométricas del escenario
Apr 30, 2024
7402193
Agrego otras plataformas
Apr 30, 2024
a748b25
Agrego primitiva para pirámides
Apr 30, 2024
d7a9517
agrego bolita
camilazzati Apr 30, 2024
1df0de1
Merge branch 'fbertani'
FrancoEsposta Apr 30, 2024
003ae1c
Merge branch 'rampa'
Apr 30, 2024
3a28a55
Modificación de la posición de la esfera.
abmango Apr 30, 2024
b609ec4
Variables en desuso comentadas
abmango Apr 30, 2024
1a9d016
Agrego integrantes en el README
FrancoEsposta Apr 30, 2024
ade8bbd
Merge branch 'master' of github.com:abmango/tgc-monogame-tp
FrancoEsposta Apr 30, 2024
b7fee36
Acomodo el punto inicial de la camara
FrancoEsposta Apr 30, 2024
93a8d52
.
camilazzati Apr 30, 2024
4801d6c
Acomodo la camara atras del personaje
FrancoEsposta Apr 30, 2024
c5c8685
Arreglo forma de mover la camara
FrancoEsposta Apr 30, 2024
690a45f
cartelitos
camilazzati Apr 30, 2024
65f0cd6
.
camilazzati Apr 30, 2024
9135b89
Agrego nuevas geometrías
May 4, 2024
1c80421
Corrijo triángulos de LightningPrimitive
May 4, 2024
cde1a0a
Saco BasicEffect
FrancoEsposta May 18, 2024
07d85c1
Merge branch 'master' of github.com:abmango/tgc-monogame-tp
FrancoEsposta May 18, 2024
fcee0e3
Arreglo problemas del merge
FrancoEsposta May 18, 2024
63807af
Limpieza de variables y codigo sin usar
FrancoEsposta May 18, 2024
03c568e
Corrijo normales de RupeePrimitive
May 21, 2024
e255cea
Agrego FollowCamera
May 21, 2024
a63e0e8
Corrijo inicialización de la variable posición de la bola
May 21, 2024
b71b6b4
Agregada cinemática. Falta corregir la aceleración a los costados
abmango May 21, 2024
3068bed
Reduzco la cantidad de triángulos de la esfera
May 22, 2024
78e3bfb
Agrego entidad de personaje principal con cambio de materiales usando…
FrancoEsposta May 22, 2024
abab36f
Cinemática completa
abmango May 22, 2024
4364ff5
Fix del movimiento del personaje y ciclos de update con texturas
FrancoEsposta May 22, 2024
1bad6ea
Primer intento de limpieza de código
FrancoEsposta May 21, 2024
9965cf0
Muevo la creacion de stages a una clase particular para limpiar la cl…
FrancoEsposta May 25, 2024
955a64f
Agrego métodos a implementar en Stage
May 28, 2024
37e47f6
agrego rotacion a la esfera al moverse
LColamonici May 29, 2024
ee5a616
Agrego un 2do nivel
Jun 1, 2024
31bd72f
fuente de luz creada (falta tocar posicion y cantidad de luz)
LColamonici Jun 1, 2024
0e49c7d
corregida iluminacion y algunas texturas, agregado movimiento de cama…
LColamonici Jun 5, 2024
91be9a8
Merge branch 'master' into rotacion_y_fisica
LColamonici Jun 5, 2024
7ac59dd
Merge pull request #3 from abmango/rotacion_y_fisica
abmango Jun 5, 2024
6feda2c
camara funcionando y cambiando direccion de la pelota, falta skybox
LColamonici Jun 15, 2024
0337377
implementacion skybox (falta)
LColamonici Jun 21, 2024
c383c58
Procesamiento de colisiones.
abmango Jun 22, 2024
1410793
Colisiones - Problemas con movimiento en piso
abmango Jun 24, 2024
1f20169
Hay movimiento pero faltan ajustes.
abmango Jun 24, 2024
5a48c58
movimiento de la camara
LColamonici Jun 25, 2024
bd8cf2d
avance grande en manejo de colisiones (falta limpiar el codigo)
LColamonici Jun 28, 2024
5534be6
Colisiones resueltas.
abmango Jun 29, 2024
f578374
Limpieza de código
abmango Jun 29, 2024
6c17698
Agrego pantalla de título y menú
Jun 30, 2024
d55bfc8
Modificaciones en TextHelper
Jun 30, 2024
0f96fe7
Correcciones en TitleScreen
Jun 30, 2024
ae56365
Agrego SpriteFont al ContentManager
Jun 30, 2024
7848b21
Elimino archivo de más incluidos en el último commit
Jun 30, 2024
e42f5c3
Resuelto colisiones con OBB
abmango Jul 1, 2024
d33eff4
Agrego UIManager y Menu
Jul 1, 2024
4129a8b
Integro UIManager en TGCGame
Jul 1, 2024
2153719
skybox funcionando
LColamonici Jul 1, 2024
2183e14
correccion en skybox
LColamonici Jul 1, 2024
78bf74d
Terminado colisiones en Stage 01
abmango Jul 1, 2024
8f7a82d
Agregado modificador de velocidad según material de la esfera
abmango Jul 2, 2024
7ad4455
Actualización de escenario 2.
abmango Jul 2, 2024
2313ade
Correción en el giro cuando hay velocidad cero
Jul 2, 2024
7661026
Agregado procesamiento de checkpoints
abmango Jul 2, 2024
43bd190
Merge branch 'master' into giro_velocidad_cero
abmango Jul 2, 2024
96f03ae
Merge pull request #5 from abmango/giro_velocidad_cero
abmango Jul 2, 2024
d64754a
Se agrega chequeo de último checkpoint que cambia efecto (a modificar)
abmango Jul 2, 2024
0a92a6b
Cambio de escenario al cruzar el último checkpoint del nivel
abmango Jul 3, 2024
2a67ace
Agregados efectos de sonido y música de fondo
abmango Jul 3, 2024
42fe999
Merge UI with Master
abmango Jul 3, 2024
f49fe51
Corrección de UI.
abmango Jul 3, 2024
c9baab8
Terminado escenario 2
abmango Jul 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,15 @@ Los recursos usados se almacenan utilizando [Git LFS](https://git-lfs.github.com

TGC, Tgcito | Apellido, Nombre
------------ | -------------
| <img src="https://github.com/tgc-utn/tgc-utn.github.io/blob/master/images/robotgc.png" height="500"> | <img src="https://github.com/tgc-utn/tgc-utn.github.io/blob/master/images/trofeotp.png" height="500"> |
| Mango Alexis Brian |
| Lazzati Camila |
| Bertani Luis Federico |
| Luca Colamonici |
| Esposta Franco Nahuel |

## Capturas

![screenshot1](https://github.com/tgc-utn/tgc-monogame-tp/blob/master/TGC.MonoGame.TP/Icon.bmp)
![screenshot2](https://github.com/tgc-utn/tgc-monogame-tp/blob/master/TGC.MonoGame.TP/Icon.bmp)
![screenshot3](https://github.com/tgc-utn/tgc-monogame-tp/blob/master/TGC.MonoGame.TP/Icon.bmp)
![screenshot4](https://github.com/tgc-utn/tgc-monogame-tp/blob/master/TGC.MonoGame.TP/Icon.bmp)
![screenshot5](https://github.com/tgc-utn/tgc-monogame-tp/blob/master/TGC.MonoGame.TP/Icon.bmp)
**WIP**

## Game Play

[![Watch the video](https://img.youtube.com/vi/pgEwUC0jvH4/0.jpg)](https://www.youtube.com/playlist?list=PLRM4L32DjvnazuMl8wZlbpEYL5Qh63ulG)
**WIP**
97 changes: 97 additions & 0 deletions TGC.MonoGame.TP/Camera/Camera.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
using Microsoft.Xna.Framework;

namespace TGC.MonoGame.TP.Camera
{
/// <summary>
/// The minimum behavior that a camera should have.
/// </summary>
public abstract class Camera
{
public const float DefaultFieldOfViewDegrees = MathHelper.PiOver4;
public const float DefaultNearPlaneDistance = 0.1f;
public const float DefaultFarPlaneDistance = 2000;

public Camera(float aspectRatio, float nearPlaneDistance = DefaultNearPlaneDistance,
float farPlaneDistance = DefaultFarPlaneDistance) : this(aspectRatio, nearPlaneDistance, farPlaneDistance,
DefaultFieldOfViewDegrees)
{
}

public Camera(float aspectRatio, float nearPlaneDistance, float farPlaneDistance, float fieldOfViewDegrees)
{
BuildProjection(aspectRatio, nearPlaneDistance, farPlaneDistance, fieldOfViewDegrees);
}

/// <summary>
/// Aspect ratio, defined as view space width divided by height.
/// </summary>
public float AspectRatio { get; set; }

/// <summary>
/// Distance to the far view plane.
/// </summary>
public float FarPlane { get; set; }

/// <summary>
/// Field of view in the y direction, in radians.
/// </summary>
public float FieldOfView { get; set; }

/// <summary>
/// Distance to the near view plane.
/// </summary>
public float NearPlane { get; set; }

/// <summary>
/// Direction where the camera is looking.
/// </summary>
public Vector3 FrontDirection { get; set; }

/// <summary>
/// The perspective projection matrix.
/// </summary>
public Matrix Projection { get; set; }

/// <summary>
/// Position where the camera is located.
/// </summary>
public Vector3 Position { get; set; }

/// <summary>
/// Represents the positive x-axis of the camera space.
/// </summary>
public Vector3 RightDirection { get; set; }

/// <summary>
/// Vector up direction (may differ if the camera is reversed).
/// </summary>
public Vector3 UpDirection { get; set; }

/// <summary>
/// The created view matrix.
/// </summary>
public Matrix View { get; set; }

/// <summary>
/// Build a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane
/// distances.
/// </summary>
/// <param name="aspectRatio">The aspect ratio, defined as view space width divided by height.</param>
/// <param name="nearPlaneDistance">The distance to the near view plane.</param>
/// <param name="farPlaneDistance">The distance to the far view plane.</param>
/// <param name="fieldOfViewDegrees">The field of view in the y direction, in degrees.</param>
public void BuildProjection(float aspectRatio, float nearPlaneDistance, float farPlaneDistance,
float fieldOfViewDegrees)
{
Projection = Matrix.CreatePerspectiveFieldOfView(fieldOfViewDegrees, aspectRatio, nearPlaneDistance,
farPlaneDistance);
}

/// <summary>
/// Allows updating the internal state of the camera if this method is overwritten.
/// By default it does not perform any action.
/// </summary>
/// <param name="gameTime">Holds the time state of a <see cref="Game" />.</param>
public abstract void Update(GameTime gameTime);
}
}
157 changes: 157 additions & 0 deletions TGC.MonoGame.TP/Camera/FollowCamera.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics;

namespace TGC.MonoGame.TP
{
/// <summary>
/// Una camara que sigue objetos
/// </summary>
class FollowCamera
{
private const float AxisDistanceToTarget = 5f;

private const float AngleFollowSpeed = 0.03f;

private const float AngleThreshold = 0.85f;

public Matrix Projection { get; private set; }

public Matrix View { get; private set; }

private Vector3 CurrentBackwardVector { get; set; } = Vector3.Forward;

private float BackwardVectorInterpolator { get; set; } = 0f;

private Vector3 PastBackwardVector { get; set; } = Vector3.Forward;
//private Effect ballEffect;
/// <summary>
/// Crea una FollowCamera que sigue a una matriz de mundo
/// </summary>
/// <param name="aspectRatio"></param>
public Point ScreenCenter;
public FollowCamera(float aspectRatio, Point HalfSize)
{
ScreenCenter=HalfSize;
// Orthographic camera
// Projection = Matrix.CreateOrthographic(screenWidth, screenHeight, 0.01f, 10000f);
//ballEffect = Content.Load<Effect>(ContentFolderEffects + "PBR");
// Perspective camera
// Uso 60° como FOV, aspect ratio, pongo las distancias a near plane y far plane en 0.1 y 100000 (mucho) respectivamente
Projection = Matrix.CreatePerspectiveFieldOfView(MathF.PI / 3f, aspectRatio, 0.1f, 100000f);
}

/// <summary>
/// Actualiza la Camara usando una matriz de mundo actualizada para seguirla
/// </summary>
/// <param name="gameTime">The Game Time to calculate framerate-independent movement</param>
/// <param name="followedWorld">The World matrix to follow</param>

private Vector2 pastMousePosition=Vector2.Zero;
private float MouseSensitivity=0.3f;
public Vector3 CamPosition;
public float CamRotation=0;
public bool camMoving=false;

public void Update(GameTime gameTime, Matrix followedWorld)
{
// Obtengo el tiempo
var elapsedTime = Convert.ToSingle(gameTime.ElapsedGameTime.TotalSeconds);

var mouseState = Mouse.GetState();

if (true)
{
var mouseDelta = mouseState.Position.ToVector2();
if(!camMoving)
{
Mouse.SetPosition(ScreenCenter.X, ScreenCenter.Y);
mouseDelta = new Vector2(0, ScreenCenter.Y);
camMoving=true;
}

mouseDelta *= MouseSensitivity * elapsedTime;
CamRotation-=mouseDelta.X;
followedWorld=Matrix.CreateRotationY(CamRotation) * followedWorld;
//var size = GraphicsDevice.Viewport.Bounds.Size;
//Mouse.SetPosition(screenCenter.X, screenCenter.Y);
//Mouse.SetCursor(MouseCursor.Crosshair);
Mouse.SetPosition(0, ScreenCenter.Y);
Mouse.SetCursor(MouseCursor.Crosshair);
pastMousePosition=mouseState.Position.ToVector2();
}

/*else
{
Mouse.SetCursor(MouseCursor.Arrow);
camMoving=false;
CamRotation=0;
//Mouse.SetPosition(ScreenCenter.X, ScreenCenter.Y);
}*/

// Obtengo la posicion de la matriz de mundo que estoy siguiendo
var followedPosition = followedWorld.Translation;

// Obtengo el vector Backward de la matriz de mundo que estoy siguiendo
var followedBackward = followedWorld.Forward;

// Si el producto escalar entre el vector Backward anterior
// y el actual es mas grande que un limite,
// muevo el Interpolator (desde 0 a 1) mas cerca de 1
if (Vector3.Dot(followedBackward, PastBackwardVector) > AngleThreshold)
{
// Incremento el Interpolator
BackwardVectorInterpolator += elapsedTime * AngleFollowSpeed;

// No permito que Interpolator pase de 1
BackwardVectorInterpolator = MathF.Min(BackwardVectorInterpolator, 1f);

// Calculo el vector Backward a partir de la interpolacion
// Esto mueve el vector Backward para igualar al vector Backward que sigo
// En este caso uso la curva x^2 para hacerlo mas suave
// Interpolator se convertira en 1 eventualmente
CurrentBackwardVector = Vector3.Lerp(CurrentBackwardVector, followedBackward, BackwardVectorInterpolator );
}
else
// Si el angulo no pasa de cierto limite, lo pongo de nuevo en cero
BackwardVectorInterpolator = 0f;

// Guardo el vector Derecha para usar en la siguiente iteracion
PastBackwardVector = followedBackward;

// Calculo la posicion del a camara
// tomo la posicion que estoy siguiendo, agrego un offset en los ejes Y y Derecha
var offsetedPosition = followedPosition
+ CurrentBackwardVector * AxisDistanceToTarget
+ Vector3.Up * AxisDistanceToTarget * 5f;

// Calculo el vector Arriba actualizado
// Nota: No se puede usar el vector Arriba por defecto (0, 1, 0)
// Como no es correcto, se calcula con este truco de producto vectorial

// Calcular el vector Adelante haciendo la resta entre el destino y el origen
// y luego normalizandolo (Esta operacion es cara!)
// (La siguiente operacion necesita vectores normalizados)
var forward = followedPosition - offsetedPosition;
forward.Normalize();

// Obtengo el vector Derecha asumiendo que la camara tiene el vector Arriba apuntando hacia arriba
// y no esta rotada en el eje X (Roll)
var right = Vector3.Cross(forward, Vector3.Up);

// Una vez que tengo la correcta direccion Derecha, obtengo la correcta direccion Arriba usando
// otro producto vectorial
var cameraCorrectUp = Vector3.Cross(right, forward);

// Calculo la matriz de Vista de la camara usando la Posicion, La Posicion a donde esta mirando,
// y su vector Arriba
CamPosition=offsetedPosition;

View = Matrix.CreateLookAt(offsetedPosition, followedPosition, cameraCorrectUp);

}
}
}
Loading