예제 #1
0
 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;
 }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
    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;
    }
예제 #5
0
 public void Jugador()
 {
     Modo = ModoCamara.USUARIO_MOVIENDO;
 }
예제 #6
0
 public void Fn_SetOrbitar(int _lado)
 {
     Modo = ModoCamara.ORBITAR;
     Lado = _lado;
 }
예제 #7
0
        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);
        }
예제 #8
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);
        }
예제 #9
0
 public abstract void Update(GameModel gameModel, TgcThirdPersonCamera camaraInterna, ModoCamara modoCamara);
예제 #10
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;
            }
        }