public void Fn_Default() { Modo = ModoCamara.INMOVIL; Lado = 0.0f; minOchenta = 10; lastMousePos = Vector3.zero; transform.position = PosIn; transform.rotation = RotIn; currentCameraDistance = minZoomDistance; minZoomDistance = 10.0f; maxZoomDistance = 50.0f; }
public static float ProfundidadCamara(this ModoCamara m) { switch (m) { case ModoCamara.NORMAL: return(18f); case ModoCamara.CERCA: return(12f); case ModoCamara.LEJOS: return(28f); default: return(0f); } }
public static float AlturaCamara(this ModoCamara m) { switch (m) { case ModoCamara.NORMAL: return(1f); case ModoCamara.CERCA: return(0.2f); case ModoCamara.LEJOS: return(4.5f); default: return(0f); } }
void Start() { Modo = ModoCamara.INMOVIL; Cursor.visible = true; //currentCameraDistance = minZoomDistance + ((maxZoomDistance - minZoomDistance) / 2.0f); zoomSpeed = 10.0f; rotationSpeed = 50.0f; mouseRotationMultiplier = 0.2f; mouseZoomMultiplier = 5.0f; Lado = 0; minZoomDistance = 10.0f; maxZoomDistance = 50.0f; currentCameraDistance = minZoomDistance; lastMousePos = Vector3.zero; PosIn = transform.position; RotIn = transform.rotation; }
public void Jugador() { Modo = ModoCamara.USUARIO_MOVIENDO; }
public void Fn_SetOrbitar(int _lado) { Modo = ModoCamara.ORBITAR; Lado = _lado; }
public override void Update(GameModel gameModel, TgcThirdPersonCamera camaraInterna, ModoCamara modoCamara) { // Determinar que la simulación del mundo físico se va a procesar 60 veces por segundo world.StepSimulation(1 / 60f, 30); // Actualizar parametros del Shader explosionFX.SetValue("time", time); // Actualizar variables de control UpdateControlVariables(gameModel.ElapsedTime); // Actualizar variables del jugador que requieren calculos complejos una sola vez player1.UpdateInternalValues(); enemy.UpdateInternalValues(); // Si el jugador cayó a más de 100 unidades en Y, se lo hace respawnear if (player1.RigidBody.CenterOfMassPosition.Y < -100) { player1.Respawn(inflictDmg, initialPosP1, 0f); } // Si el enemigo cayó a más de 100 unidades en Y, se lo hace respawnear if (enemy.RigidBody.CenterOfMassPosition.Y < -100) { enemy.Respawn(false, initialPosEnemy, FastMath.PI); } // Intenta enderezar si hace falta player1.TryStraighten(gameModel.ElapsedTime); enemy.TryStraighten(gameModel.ElapsedTime); // Manejar los inputs del teclado y joystick player1.ReactToInputs(gameModel, this); // Accion del enemigo enemy.TakeAction(gameModel, this); // Activar Información de Debug if (gameModel.Input.keyPressed(Key.F5)) { showInfo = !showInfo; } // Metodo que se encarga de manejar las colisiones según corresponda CollisionsHandler(gameModel); // Ajustar la posicion de la cámara segun la colisión con los objetos del escenario AdjustCameraPosition(camaraInterna, modoCamara); }
protected void AdjustCameraPosition(TgcThirdPersonCamera camaraInterna, ModoCamara modoCamara) { //if (!Player1.collision) //{ // currentCameraPosition = camaraInterna.Position; //} if (camaraInterna.OffsetHeight == 0.1f) { return; } camaraInterna.OffsetHeight = 0.1f; camaraInterna.OffsetForward = 30; //Pedirle a la camara cual va a ser su proxima posicion TGCVector3 position; TGCVector3 target; camaraInterna.CalculatePositionTarget(out position, out target); //Detectar colisiones entre el segmento de recta camara-personaje y todos los objetos del escenario TGCVector3 q; var minDistSq = FastMath.Pow2(camaraInterna.OffsetForward); foreach (var obstaculo in escenario.TgcScene.Meshes) { if (obstaculo.Name.Equals("Arbusto") || obstaculo.Name.Equals("Pasto") || obstaculo.Name.Equals("Flores")) { continue; } //Hay colision del segmento camara-personaje y el objeto if (TgcCollisionUtils.intersectSegmentAABB(target, position, obstaculo.BoundingBox, out q)) { //Si hay colision, guardar la que tenga menor distancia var distSq = TGCVector3.Subtract(q, target).LengthSq(); //Hay dos casos singulares, puede que tengamos mas de una colision hay que quedarse con el menor offset. //Si no dividimos la distancia por 2 se acerca mucho al target. minDistSq = FastMath.Min(distSq / 2, minDistSq); } } //Acercar la camara hasta la minima distancia de colision encontrada (pero ponemos un umbral maximo de cercania) var newOffsetForward = FastMath.Sqrt(minDistSq); if (FastMath.Abs(newOffsetForward) < 10f) { newOffsetForward = 10f; } if (newOffsetForward > modoCamara.ProfundidadCamara()) { newOffsetForward = modoCamara.ProfundidadCamara(); } if (modoCamara.AlturaCamara() > 1) { camaraInterna.OffsetHeight = 1.1f; } else { camaraInterna.OffsetHeight = modoCamara.AlturaCamara(); } camaraInterna.OffsetForward = newOffsetForward; //Asignar la ViewMatrix haciendo un LookAt desde la posicion final anterior al centro de la camara camaraInterna.CalculatePositionTarget(out position, out target); camaraInterna.SetCamera(position, target); }
public abstract void Update(GameModel gameModel, TgcThirdPersonCamera camaraInterna, ModoCamara modoCamara);
private void ManageInputs(GameModel gameModel) { var Input = gameModel.Input; var sm = gameModel.SoundManager; if (endMatch) { if (Input.keyPressed(Key.Return) || Input.buttonPressed(Button.START)) { toStartMenu = true; } return; } // Si pausado me fijo si quitaron la pausa if (paused) { if (Input.keyPressed(Key.Return) || Input.buttonPressed(Button.START)) { paused = false; sm.Mp3Player.resume(); } return; } // Dibujar el Vector UP if (Input.keyPressed(Key.F1)) { drawUpVector = !drawUpVector; } // Girar la cámara unos grados if (Input.keyPressed(Key.F2)) { if (anguloCamara == 0.33f) { anguloCamara = -anguloCamara; } else { anguloCamara += 0.33f; } } // Rotar 90° la cámara if (Input.keyPressed(Key.F3)) { halfsPI = (halfsPI + FastMath.PI_HALF) % FastMath.TWO_PI; } // Acercar la cámara if (Input.keyPressed(Key.F4) || Input.buttonPressed(Button.R3)) { modoCamara = modosCamara.getNextOption(modoCamara); camaraInterna.OffsetHeight = modoCamara.AlturaCamara(); camaraInterna.OffsetForward = modoCamara.ProfundidadCamara(); } // Mirar hacia atras if (Input.keyDown(Key.C) || Input.buttonDown(Button.L1)) { mirarHaciaAtras = true; halfsPI = 0; } else { mirarHaciaAtras = false; } if (gameModel.Input.keyPressed(Key.Return) || Input.buttonPressed(Button.START)) { paused = true; sm.Mp3Player.pause(); } if (gameModel.Input.keyPressed(Key.Escape)) { endMatch = true; toStartMenu = true; } }