/// <summary> /// Actualizar colisiones y camara /// </summary> /// <returns>Nueva posicion de la camara</returns> public Vector3 update() { Device device = GuiController.Instance.D3dDevice; float elapsedTime = GuiController.Instance.ElapsedTime; camera.updateCamera(); //Capturar eventos de algunas teclas //Jump if (GuiController.Instance.D3dInput.keyPressed(Microsoft.DirectX.DirectInput.Key.Space)) { //Salta si esta en el piso if (onGround) { //Vector3 velocity = GuiController.Instance.FpsCamera.Velocity; velocidad.Y = jumpSpeed; } } time += elapsedTime; Vector3 camPos = camera.getPosition(); Vector3 camLookAt = camera.getLookAt(); /* * if (noClip) * camera.JumpSpeed = 100.0f; * else * camera.JumpSpeed = 0f; */ //Detecto las colisiones if (!firstTime && !noClip) { Vector3 lookDir = camLookAt - camPos; //aplico la velocidad Vector3 aceleracion = new Vector3(0, -gravity, 0); //aplico la gravedad velocidad = velocidad + elapsedTime * aceleracion; camPos = camPos + velocidad * elapsedTime; camPos.Y -= kEpsilon * 1.5f; //aplico las colisiones //traceType = TYPE_SPHERE; //camPos = TraceSphere(antCamPos, camPos, 25.0f); camPos = TraceBox(antCamPos, camPos, playerBB.PMin, playerBB.PMax); //dist if (bCollided) { //float dist = Vector3.Dot(vCollisionNormal, velocidad); //velocidad = velocidad - vCollisionNormal*dist; } // actualizo la posicion de la camara //Camara.setCamera(camPos, camPos + lookDir); camera.move(camPos - camera.getPosition()); if (!OnGround) { //Vector3 aceleracion = new Vector3(0, -9.8f, 0); //aplico la gravidad //velocidad = velocidad + elapsedTime*aceleracion; } else { if (velocidad.Y < 0) { velocidad.Y = 0; } } } antCamPos = camPos; firstTime = false; return(camPos); }