public Partida(GameModel gameModel, Vehiculo vehiculoP1) { this.gameModel = gameModel; sma = SMA(30); matchTime = matchInitialTime * 60; // Preparamos el mundo físico con todos los elementos que pertenecen a el world = new NivelUno(vehiculoP1, gameModel); //Configuramos el player para que sea el Listener gameModel.DirectSound.ListenerTracking = world.player1.Mesh; // Inicializo el HUD hud = new HUD(world.player1, matchTime); // Configuramos la Cámara en tercera persona para que siga a nuestro Player 1 camaraInterna = new TgcThirdPersonCamera(new TGCVector3(world.player1.RigidBody.CenterOfMassPosition), new TGCVector3(0, 2, 0), modoCamara.AlturaCamara(), modoCamara.ProfundidadCamara()); this.gameModel.Camara = camaraInterna; // Creamos una flecha que representara el vector UP del auto directionArrow = new TgcArrow { BodyColor = Color.Red, HeadColor = Color.Green, Thickness = 0.1f, HeadSize = new TGCVector2(0.6f, 1f) }; var sm = gameModel.SoundManager; sm.LoadMp3(levelSong); sm.Mp3Player.play(true); // Font para mensaje de pausa var pauseFont = UtilMethods.createFont("Minecraft", 100); // Font para mensaje de fin de juego var gameOverFont = UtilMethods.createFont("Twisted Stallions", 200); // Font para vida enemigo //var enemyHPFont = UtilMethods.createFont("Minecraft", 40); //Leo las dimensiones de la ventana var screenHeight = D3DDevice.Instance.Device.Viewport.Height; var screenWidth = D3DDevice.Instance.Device.Viewport.Width; //Pause pauseMsg = new TgcText2D { Text = "PAUSE", Color = Color.White, Position = new Point(0, (int)(screenHeight * 0.46f)), }; pauseMsg.changeFont(pauseFont); ////Enemy HP //enemyHP = new TgcText2D //{ // Color = Color.White, //}; //enemyHP.changeFont(enemyHPFont); //GameOver gameOverMsg = new TgcText2D { Position = new Point(0, (int)(screenHeight * 0.4f)), }; gameOverMsg.changeFont(gameOverFont); }
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); }
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; } }