Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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;
            }
        }