public void update(float elapsedTime, Terreno terreno) { if (mesh != null) { tiempo += elapsedTime; var posicionUltima = mesh.Posicion(); var distanciaRecorridaXZ = velocidadInicialXZ * tiempo /** elapsedTime*/; var distanciaRecorridaY = FastMath.Pow2(tiempo) * -0.5f * Gravedad + velocidadInicialY * tiempo /** elapsedTime*/; var x = mesh.Posicion().X + proporcionalX * distanciaRecorridaXZ; var z = mesh.Posicion().Z + proporcionalZ * distanciaRecorridaXZ; //TODO. Por el momentos nos manejamos con Y siempre positivas mesh.Posicion(new Vector3(x, mesh.Posicion().Y + distanciaRecorridaY, z)); //TODO necesitamos el tamaƱo del elemento para poder saber cuando choca contra en terreno if (mesh.MinimoPunto().Y - mesh.FactorCorreccion() < terreno.CalcularAltura(mesh.MinimoPunto().X, mesh.MinimoPunto().Z)) { //Esto debe ser cuando colosiona con el terreno. mesh.Posicion(posicionUltima); mesh = null; tiempo = 0; Finalizo = true; } } }
private void moverse(float elapsedTime, Terreno terreno) { //Aplicamos el movimiento //TODO Ver si es correcta la forma que aplico para representar que se esta a la altura del terreno. var xm = FastMath.Sin(Mesh.Rotation.Y) * velocidadCaminar; var zm = FastMath.Cos(Mesh.Rotation.Y) * velocidadCaminar; var movementVector = new Vector3(xm, 0, zm); Mesh.move(movementVector * elapsedTime); Mesh.Position = new Vector3(Mesh.Position.X, terreno.CalcularAltura(Mesh.Position.X, Mesh.Position.Z), Mesh.Position.Z); }