示例#1
0
        /// <summary>
        /// Crea un partido con todos sus componentes Cancha, Arcos, Jugadores y Pelota
        /// </summary>
        /// <param name="alumnoEjemplosMediaDir"> Carpeta donde estan los recursos </param>
        /// <returns> Un partido listo para comenzar a jugar :)</returns>
        public Partido CrearPartido(string pathRecursos, TgcD3dInput input, Dictionary<string, TgcStaticSound> sonidos, TgcThirdPersonCamera camara)
        {
            string nombreEquipoLocal = "SKTS";
            string nombreEquipoVisitante = "TGCV";

            Partido partido = Partido.Instance;

            partido.Sonidos = sonidos;
            partido.Marcador = this.CrearMarcador(nombreEquipoLocal, nombreEquipoVisitante);
            partido.Cancha = this.CrearCancha(pathRecursos);
            partido.ArcoLocal = this.CrearArco(pathRecursos, partido.Cancha, -1);
            partido.ArcoVisitante = this.CrearArco(pathRecursos, partido.Cancha, 1);
            partido.Pelota = this.CrearPelota(pathRecursos, partido.Cancha);
            partido.EquipoLocal = EquipoFactory.Instance.CrearEquipoHumanoIA(nombreEquipoLocal, pathRecursos, input, partido);
            partido.EquipoVisitante = EquipoFactory.Instance.CrearEquipoIA(nombreEquipoVisitante, pathRecursos, partido);

            //Creo la pelota con todos sus obstaculos
            List<IColisionablePelota> obstaculosPelota = new List<IColisionablePelota>();
            obstaculosPelota.AddRange(partido.ArcoLocal.GetColisionables());
            obstaculosPelota.AddRange(partido.ArcoVisitante.GetColisionables());
            obstaculosPelota.Add(partido.Cancha);
            obstaculosPelota.AddRange(partido.Cancha.LimitesCancha);
            obstaculosPelota.AddRange(partido.EquipoLocal.JugadoresColisionables());
            obstaculosPelota.AddRange(partido.EquipoVisitante.JugadoresColisionables());

            partido.Pelota.CollisionManager = new PelotaCollisionManager(obstaculosPelota);
            //partido.Pelota.CollisionManager = new SphereCollisionManager(obstaculosPelota);

            //Cargo las colisiones de los jugadores
            EquipoFactory.Instance.CargarColisionesEquipos(partido.EquipoLocal, partido.EquipoVisitante, partido);

            partido.Camara = camara;

            return partido;
        }
示例#2
0
 public TgcFpsCamera(TgcD3dInput input)
 {
     Input = input;
     positionEye = new Vector3();
     mouseCenter = new Point(
         D3DDevice.Instance.Device.Viewport.Width / 2,
         D3DDevice.Instance.Device.Viewport.Height / 2);
     RotationSpeed = 0.1f;
     MovementSpeed = 500f;
     JumpSpeed = 500f;
     directionView = new Vector3(0, 0, -1);
     leftrightRot = FastMath.PI_HALF;
     updownRot = -FastMath.PI / 10.0f;
     cameraRotation = Matrix.RotationX(updownRot) * Matrix.RotationY(leftrightRot);
 }
示例#3
0
        /// <summary> Crea un equipo con un jugador humano y el resto IA</summary>
        /// <param name="pathRecursos"> De donde saco el mesh</param>
        /// <param name="input"> Input por teclado</param>
        /// <param name="pelota"> La pelota del partido</param>
        /// <returns> Un equipo formado con un humano y el resto IA pero sin colisiones</returns>
        public Equipo CrearEquipoHumanoIA(string nombre, string pathRecursos, TgcD3dInput input, Partido partido)
        {
            List<Jugador> jugadores = new List<Jugador>();
            jugadores.Add(this.CrearJugadorIA(pathRecursos, Settings.Default.textureTeam1, new Vector3(0, 1, 30), 45f, partido.Pelota));
            jugadores.Add(this.CrearJugadorHumano(pathRecursos, Settings.Default.textureTeam1, new Vector3(-180, 1, -150), 270, partido.Pelota, input));
            jugadores.Add(this.CrearJugadorIA(pathRecursos, Settings.Default.textureTeam1, new Vector3(-400, 1, -150), 270f, partido.Pelota));
            jugadores.Add(this.CrearJugadorIA(pathRecursos, Settings.Default.textureTeam1, new Vector3(-400, 1, 150), 270f, partido.Pelota));
            jugadores.Add(this.CrearArqueroIA(pathRecursos, Settings.Default.textureTeam1, new Vector3(partido.ArcoLocal.Red.GetPosition().X + 60, 1, partido.ArcoLocal.Red.GetPosition().Z), 270f, partido.Pelota));

            Equipo equipo = new Equipo(nombre, jugadores, partido.ArcoLocal, partido.ArcoVisitante);

            foreach (Jugador jugador in equipo.Jugadores)
            {
                jugador.EquipoPropio = equipo;
            }

            return equipo;
        }
示例#4
0
 /// <summary>
 /// Crea el jugador que hay que manejar manualmente
 /// </summary>
 /// <param name="pathRecursos"> De donde saco el mesh</param>
 /// /// /// <param name="pelota">La pelota del partido</param>
 /// <returns> El jugador controlado manualmente</returns>
 private Jugador CrearJugadorHumano(string pathRecursos, string textura, Vector3 posicion, float angulo, Pelota pelota, TgcD3dInput input)
 {
     return this.CrearJugador(pathRecursos, textura, posicion, angulo, new JugadorManualStrategy(input), pelota);
 }
示例#5
0
        /// <summary>
        /// Estado: Cuando se esta arrastrando el mouse para armar el cuadro de seleccion
        /// </summary>
        private void doSelectingObject()
        {
            TgcD3dInput input = GuiController.Instance.D3dInput;

            //Mantiene el mouse apretado
            if (input.buttonDown(TgcD3dInput.MouseButtons.BUTTON_LEFT))
            {
                //Definir recuadro
                Vector2 mousePos = new Vector2(input.Xpos, input.Ypos);
                Vector2 min      = Vector2.Minimize(initMousePos, mousePos);
                Vector2 max      = Vector2.Maximize(initMousePos, mousePos);

                rectMesh.updateMesh(min, max);
            }
            //Solo el mouse
            else if (input.buttonUp(TgcD3dInput.MouseButtons.BUTTON_LEFT))
            {
                //Definir recuadro
                Vector2   mousePos = new Vector2(input.Xpos, input.Ypos);
                Vector2   min      = Vector2.Minimize(initMousePos, mousePos);
                Vector2   max      = Vector2.Maximize(initMousePos, mousePos);
                Rectangle r        = new Rectangle((int)min.X, (int)min.Y, (int)(max.X - min.X), (int)(max.Y - min.Y));

                //Usar recuadro de seleccion solo si tiene un tamaño minimo
                if (r.Width > 1 && r.Height > 1)
                {
                    //Limpiar seleccionar anterior si no estamos agregando en forma aditiva
                    if (!selectiveObjectsAdditive)
                    {
                        clearSelection();
                    }

                    //Buscar que primitivas caen dentro de la seleccion y elegirlos
                    int i = 0;
                    EditPolyPrimitive p = iteratePrimitive(currentPrimitive, i);
                    while (p != null)
                    {
                        //Ver si hay colision contra la proyeccion de la primitiva y el rectangulo 2D
                        Rectangle primRect;
                        if (p.projectToScreen(mesh.Transform, out primRect))
                        {
                            if (r.IntersectsWith(primRect))
                            {
                                //Agregar el objeto en forma aditiva
                                if (selectiveObjectsAdditive)
                                {
                                    selectOrRemovePrimitiveIfPresent(p);
                                }
                                //Agregar el objeto en forma simple
                                else
                                {
                                    selectPrimitive(p);
                                }
                            }
                        }
                        p = iteratePrimitive(currentPrimitive, ++i);
                    }
                }
                //Si el recuadro no tiene tamaño suficiente, hacer seleccion directa
                else
                {
                    doDirectSelection(selectiveObjectsAdditive);
                }

                currentState = State.SelectObject;

                /*
                 * //Si quedo algo seleccionado activar gizmo
                 * if (selectionList.Count > 0)
                 * {
                 *  activateTranslateGizmo();
                 * }
                 */

                //Actualizar panel de Modify con lo que se haya seleccionado, o lo que no
                updateUiPanel();
            }



            //Dibujar recuadro
            rectMesh.render();
        }
示例#6
0
 /// <summary>
 ///  Constructor de la camara a partir de un TgcD3dInput y un positionEye, moveSpeed y jumpSpeed. Los atributos mouseCenter a partir del centro del a pantalla, RotationSpeed 1.0f,
 ///  el directionView (0,0,-1)
 /// </summary>
 /// <param name="positionEye"></param>
 /// <param name="moveSpeed"></param>
 /// <param name="jumpSpeed"></param>
 /// <param name="input"></param>
 public TgcFpsCamera(TGCVector3 positionEye, float moveSpeed, float jumpSpeed, TgcD3dInput input)
     : this(positionEye, input)
 {
     this.MovementSpeed = moveSpeed;
     this.JumpSpeed     = jumpSpeed;
 }
示例#7
0
 /// <summary>
 ///     Constructor de la camara a partir de un TgcD3dInput y un positionEye. Los atributos mouseCenter a partir del centro del a pantalla, RotationSpeed 1.0f,
 ///     MovementSpeed y JumpSpeed 500f, el directionView (0,0,-1)
 /// </summary>
 /// <param name="positionEye"></param>
 /// <param name="input"></param>
 public TgcFpsCamera(TGCVector3 positionEye, TgcD3dInput input) : this(input)
 {
     this.positionEye = positionEye;
 }
示例#8
0
        public void Update(TgcD3dInput Input, float elapsedTime)
        {
            if (ilumnacionActiva == false)
            {
                tiempoDesprotegido += elapsedTime;
            }
            else
            {
                tiempoDesprotegido = 0;
            }
            if (ilumnacionActiva)
            {
                iluminadorPrincipal.Update(this, elapsedTime);
            }


            if (tiempoDesprotegido >= tiempoLimiteDesprotegido)
            {
                this.perdio = true;
            }

            if (Input.keyPressed(Key.Tab))
            {
                EquiparProximoItem();
            }

            if (Input.keyPressed(Key.N))
            {
                if (visionNocturna)
                {
                    visionNocturnaActivada = !visionNocturnaActivada;
                }
            }
            if (visionNocturnaActivada)
            {
                tiempoDesprotegido    = 0;
                tiempoVisionNocturna += elapsedTime;
            }
            if (tiempoVisionNocturna >= tiempoLimiteVisionNocturna)
            {
                visionNocturnaActivada = false;
            }
            if (Input.keyPressed(Key.R))
            {
                if (itemSelecionadoActivo)
                {
                    itemSelecionado.desactivar(this);
                    objetoEquipado        = true;
                    itemSelecionadoActivo = false;
                }
                else
                {
                    itemSelecionado.accion(this);
                    objetoEquipado        = true;
                    itemSelecionadoActivo = true;
                }
            }

            if (Input.keyPressed(Key.G) && pistas.Count != 0)
            {
                AbrirAgenda(0);
            }



            if (agendaActiva && Input.keyPressed(Key.Space))
            {
                pistaActual = (pistaActual + 1) % pistas.Count;
                HUD.Instance.seleccionarPaginaActual(pistas[pistaActual]);
            }

            if (agendaActiva && Input.keyPressed(Key.Space))
            {
                pistaActual = (pistaActual + 1) % pistas.Count;
                HUD.Instance.paginaActual = pistas[pistaActual];
                GameModel.sonidoNota.play(false);
            }

            HUD.Instance.Update(elapsedTime);
        }
示例#9
0
 public TgcFpsCamera(Vector3 positionEye, float moveSpeed, float jumpSpeed, TgcD3dInput input)
     : this(positionEye, input)
 {
     MovementSpeed = moveSpeed;
     JumpSpeed = jumpSpeed;
 }
示例#10
0
 public CamaraGod(Vector3 positionEye, float moveSpeed, float jumpSpeed, TgcD3dInput input)
     : this(positionEye, input)
 {
     MovementSpeed = moveSpeed;
     JumpSpeed     = jumpSpeed;
 }
示例#11
0
 public CamaraGod(bool lockCam, Vector3 positionEye, TgcD3dInput input) : this(positionEye, input)
 {
     LockCam = true;
 }
示例#12
0
 public CamaraGod(Vector3 positionEye, TgcD3dInput input) : this(input)
 {
     this.positionEye = positionEye;
 }
示例#13
0
        public void update(float dt, C_Hoja[] hojas, C_Earth the_earth, C_Earth the_earth2, C_Water water, TgcSkyBox skyBox)
        {
            time += dt;
            TgcD3dInput d3dInput = GuiController.Instance.D3dInput;

            //gravedad (si no estoy en contacto con algo, caer)
            if (glued == null)
            {
                playMove.Y -= 30f * dt;
            }
            else
            {
                playMove.Y = 0;
            }
            //si estoy en el suelo y BARRA ESPACIADORA => Saltar
            if (move_able & d3dInput.keyDown(Key.Space) && (glued != null))
            {
                playMove.Y = 30f;
                sound_b.render();
            }
            //M => Bolquear movimiento
            if (d3dInput.keyDown(Key.M))
            {
                move_able = !move_able;
            }

            //calcular movimiento hacia adelante y costado
            float moveForward = 0f;
            float moveLateral = 0f;

            if (move_able & d3dInput.keyDown(Key.W))
            {
                moveForward = 1f;
            }
            if (move_able & d3dInput.keyDown(Key.S))
            {
                moveForward = -1f;
            }
            if (move_able & d3dInput.keyDown(Key.A))
            {
                moveLateral = 1f;
            }
            if (move_able & d3dInput.keyDown(Key.D))
            {
                moveLateral = -1f;
            }

            //rotar camara
            rotation = 0;
            if (d3dInput.keyDown(Key.Q))
            {
                rotation = 1;
            }
            if (d3dInput.keyDown(Key.E))
            {
                rotation = -1;
            }

            //calcular vectores de movimiento, basado en camara
            playMove.X = playMove.Z = 0f;
            if (moveLateral != 0 | moveForward != 0)
            {
                Vector3 camDir = GuiController.Instance.CurrentCamera.getLookAt() - GuiController.Instance.CurrentCamera.getPosition();
                camDir.Y = 0;
                Vector3 moveDir = Vector3.Normalize(camDir);
                playMove.X = moveDir.X * moveForward - moveDir.Z * moveLateral;
                playMove.Z = moveDir.Z * moveForward + moveDir.X * moveLateral;
                //"normalizar" para tener velocidad maxima
                float modXZ = (float)Math.Sqrt(playMove.X * playMove.X + playMove.Z * playMove.Z);
                playMove.X = playMove.X * 75f / modXZ;
                playMove.Z = playMove.Z * 75f / modXZ;
            }

            //si esta en contacto con una hoja, moverse con ella
            if (glued != null)
            {
                if (glued.id == 'h')
                {
                    C_Hoja h = (C_Hoja)glued;
                    playMove += h.vel;
                }
            }
            Vector3 old_pos = pos;

            pos += playMove * dt;
            mesh.BoundingBox.move(playMove * dt);

            bool collide = false;

            TgcCollisionUtils.BoxBoxResult result;

            //si choca contra una cara del skybox, frenarla
            foreach (TgcMesh face in skyBox.Faces)
            {
                result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, face.BoundingBox);
                if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                {
                    collide = true;
                    break;
                }
            }
            if (collide)
            {
                Vector3 dif = old_pos - pos;
                dif.Y = 0f;
                pos  += dif;
                mesh.BoundingBox.move(dif);
            }


            //cuando esta muriendo, si deja de estar en contacto con agua (la termino de atravesar) resetear
            if (dieing)
            {
                result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, water.BoundingBox());
                if (result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                {
                    sound_c.render();
                }
                if (result != TgcCollisionUtils.BoxBoxResult.Adentro && result != TgcCollisionUtils.BoxBoxResult.Atravesando)
                {
                    reset(the_earth);
                }
                return;
            }


            //chequear si sihue en contacto con el objeto con el que estaba en contacto
            if (glued != null)
            {
                result = TgcCollisionUtils.BoxBoxResult.Afuera;
                if (glued.id == 'e')
                {
                    C_Earth e = (C_Earth)glued;
                    result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, e.BoundingBox());
                }
                else if (glued.id == 'h')
                {
                    C_Hoja h = (C_Hoja)glued;
                    result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, h.BoundingBox());
                }
                else if (glued.id == 'w')
                {
                    C_Water w = (C_Water)glued;
                    result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, w.BoundingBox());
                }

                if (result == TgcCollisionUtils.BoxBoxResult.Encerrando || result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                {
                    return;
                }
                glued = null;
            }

            //colisionar con hojas
            foreach (C_Hoja x in hojas)
            {
                result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, x.BoundingBox());
                if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                {
                    glued = x;
                    return;
                }
            }
            //colisionar con la tierra
            result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, the_earth.BoundingBox());
            if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
            {
                glued = the_earth;
                return;
            }
            //colisionar con la otra tierra
            result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, the_earth2.BoundingBox());
            if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
            {
                glued = the_earth2;
                return;
            }
            //colisionar con agua
            result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, water.BoundingBox());
            if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
            {
                dieing = true;
            }
            return;
        }
示例#14
0
        /// <summary>
        /// Actualizar y dibujar seleccion
        /// </summary>
        public void render()
        {
            TgcD3dInput input = GuiController.Instance.D3dInput;

            //Mantiene el mouse apretado
            if (input.buttonDown(TgcD3dInput.MouseButtons.BUTTON_LEFT))
            {
                //Definir recuadro
                Vector2 mousePos = new Vector2(input.Xpos, input.Ypos);
                Vector2 min      = Vector2.Minimize(initMousePos, mousePos);
                Vector2 max      = Vector2.Maximize(initMousePos, mousePos);

                rectMesh.updateMesh(min, max);
            }
            //Solo el mouse
            else if (input.buttonUp(TgcD3dInput.MouseButtons.BUTTON_LEFT))
            {
                //Definir recuadro
                Vector2   mousePos = new Vector2(input.Xpos, input.Ypos);
                Vector2   min      = Vector2.Minimize(initMousePos, mousePos);
                Vector2   max      = Vector2.Maximize(initMousePos, mousePos);
                Rectangle r        = new Rectangle((int)min.X, (int)min.Y, (int)(max.X - min.X), (int)(max.Y - min.Y));

                //Usar recuadro de seleccion solo si tiene un tamaño minimo
                if (r.Width > 1 && r.Height > 1)
                {
                    //Limpiar seleccionar anterior si no estamos agregando en forma aditiva
                    if (!selectiveObjectsAdditive)
                    {
                        clearSelection();
                    }

                    //Buscar que objetos del escenario caen dentro de la seleccion y elegirlos
                    foreach (EditorPrimitive p in control.Meshes)
                    {
                        //Solo los visibles
                        if (p.Visible)
                        {
                            //Ver si hay colision contra la proyeccion del AABB del mesh
                            //Rectangle primRect = MeshCreatorUtils.projectAABB(p.BoundingBox);
                            Rectangle primRect;
                            if (MeshCreatorUtils.projectBoundingBox(p.BoundingBox, out primRect))
                            {
                                if (r.IntersectsWith(primRect))
                                {
                                    //Agregar el objeto en forma aditiva
                                    if (selectiveObjectsAdditive)
                                    {
                                        selectOrRemoveObjectIfPresent(p);
                                    }
                                    //Agregar el objeto en forma simple
                                    else
                                    {
                                        selectObject(p);
                                    }
                                }
                            }
                        }
                    }
                }
                //Si el recuadro no tiene tamaño suficiente, hacer seleccion directa
                else
                {
                    doDirectSelection(selectiveObjectsAdditive);
                }

                control.CurrentState = MeshCreatorControl.State.SelectObject;

                //Si quedo algo seleccionado activar gizmo
                if (control.SelectionList.Count > 0)
                {
                    activateCurrentGizmo();
                }

                //Actualizar panel de Modify con lo que se haya seleccionado, o lo que no
                control.updateModifyPanel();
            }



            //Dibujar recuadro
            rectMesh.render();
        }
示例#15
0
 public Input(TgcD3dInput _keyboard, Joystick _joystick)
 {
     this.keyboard = _keyboard;
     this.joystick = _joystick;
 }
示例#16
0
 public CamaraGod(Vector3 positionEye, float moveSpeed, float jumpSpeed, float rotationSpeed,
                  TgcD3dInput input)
     : this(positionEye, moveSpeed, jumpSpeed, input)
 {
     RotationSpeed = rotationSpeed;
 }
示例#17
0
        public void Update(TgcD3dInput input)
        {
            dynamicsWorld.StepSimulation(1 / 60f, 100);
            var strength = 10.30f;
            var angle    = 5;
            var moving   = false;

            #region Comoportamiento

            if (input.keyDown(Key.W))
            {
                moving = true;
                //Activa el comportamiento de la simulacion fisica para la capsula
                capsuleRigidBody.ActivationState = ActivationState.ActiveTag;
                capsuleRigidBody.AngularVelocity = TGCVector3.Empty.ToBulletVector3();
                capsuleRigidBody.ApplyCentralImpulse(-strength * director.ToBulletVector3());
            }

            if (input.keyDown(Key.S))
            {
                moving = true;
                //Activa el comportamiento de la simulacion fisica para la capsula
                capsuleRigidBody.ActivationState = ActivationState.ActiveTag;
                capsuleRigidBody.AngularVelocity = TGCVector3.Empty.ToBulletVector3();
                capsuleRigidBody.ApplyCentralImpulse(strength * director.ToBulletVector3());
            }

            if (input.keyDown(Key.A))
            {
                director.TransformCoordinate(TGCMatrix.RotationY(-angle * 0.01f));
                personaje.Transform             = TGCMatrix.Translation(TGCVector3.Empty) * TGCMatrix.RotationY(-angle * 0.01f) * new TGCMatrix(capsuleRigidBody.InterpolationWorldTransform);
                capsuleRigidBody.WorldTransform = personaje.Transform.ToBsMatrix;
            }

            if (input.keyDown(Key.D))
            {
                director.TransformCoordinate(TGCMatrix.RotationY(angle * 0.01f));
                personaje.Transform             = TGCMatrix.Translation(TGCVector3.Empty) * TGCMatrix.RotationY(angle * 0.01f) * new TGCMatrix(capsuleRigidBody.InterpolationWorldTransform);
                capsuleRigidBody.WorldTransform = personaje.Transform.ToBsMatrix;
            }

            if (input.keyPressed(Key.Space))
            {
                //Activa el comportamiento de la simulacion fisica para la capsula
                capsuleRigidBody.ActivationState = ActivationState.ActiveTag;
                capsuleRigidBody.ApplyCentralImpulse(new TGCVector3(0, 80 * strength, 0).ToBulletVector3());
            }

            #endregion Comoportamiento

            #region Animacion

            if (moving)
            {
                personaje.playAnimation("Caminando", true);
            }
            else
            {
                personaje.playAnimation("Parado", true);
            }

            #endregion Animacion
        }
示例#18
0
 public TgcFpsCamera(Vector3 positionEye, TgcD3dInput input)
     : this(input)
 {
     this.positionEye = positionEye;
 }
示例#19
0
 /// <summary>
 /// Constructor de la camara a partir de un TgcD3dInput y un positionEye, moveSpeed, jumpSpeed y rotationSpeed. Los atributos mouseCenter a partir del centro del a pantalla,
 ///  el directionView (0,0,-1)
 /// </summary>
 /// <param name="positionEye"></param>
 /// <param name="moveSpeed"></param>
 /// <param name="jumpSpeed"></param>
 /// <param name="rotationSpeed"></param>
 /// <param name="input"></param>
 public TgcFpsCamera(TGCVector3 positionEye, float moveSpeed, float jumpSpeed, float rotationSpeed, TgcD3dInput input)
     : this(positionEye, moveSpeed, jumpSpeed, input)
 {
     this.RotationSpeed = rotationSpeed;
 }
示例#20
0
        public TgcFpsCamera(Vector3 positionEye, float moveSpeed, float jumpSpeed, float rotationSpeed,
			TgcD3dInput input)
            : this(positionEye, moveSpeed, jumpSpeed, input)
        {
            RotationSpeed = rotationSpeed;
        }
示例#21
0
        public void Update(TgcD3dInput input, TgcMesh monstruo, TgcMesh monstruoSil)
        {
            monstruoMesh    = monstruo;
            monstruoSilueta = monstruoSil;

            dynamicsWorld.StepSimulation(1 / 60f, 100);

            #region Comportamiento

            if (input.keyDown(Key.Space) && ModoCreativo)
            {
                //Activa el comportamiento de la simulacion fisica para la capsula
                personajeBody.ActivationState = ActivationState.ActiveTag;
                personajeBody.AngularVelocity = TGCVector3.Empty.ToBulletVector3();
                personajeBody.ApplyCentralImpulse(strength * 10 * (new TGCVector3(0, 1, 0)).ToBulletVector3());
            }

            if (input.keyDown(Key.W))
            {
                //Activa el comportamiento de la simulacion fisica para la capsula
                personajeBody.ActivationState = ActivationState.ActiveTag;
                personajeBody.AngularVelocity = TGCVector3.Empty.ToBulletVector3();
                personajeBody.ApplyCentralImpulse(-strength * director.ToBulletVector3());
            }
            if (input.keyUp(Key.W))
            {
                personajeBody.ActivationState = ActivationState.IslandSleeping;
            }
            if (input.keyUp(Key.S))
            {
                personajeBody.ActivationState = ActivationState.IslandSleeping;
            }

            if (input.keyDown(Key.S))
            {
                //Activa el comportamiento de la simulacion fisica para la capsula
                personajeBody.ActivationState = ActivationState.ActiveTag;
                personajeBody.AngularVelocity = TGCVector3.Empty.ToBulletVector3();
                personajeBody.ApplyCentralImpulse(strength * director.ToBulletVector3());
            }

            if (input.keyDown(Key.A))
            {
                director.TransformCoordinate(TGCMatrix.RotationY(-angle * rotationStrength));
                personaje.Transform          = TGCMatrix.Translation(TGCVector3.Empty) * TGCMatrix.RotationY(-angle * rotationStrength) * new TGCMatrix(personajeBody.InterpolationWorldTransform);
                personajeBody.WorldTransform = personaje.Transform.ToBsMatrix;
                personaje.RotateY(-angle * rotationStrength);
                personajeActual.RotarManos(-angle * rotationStrength);
                monstruo.RotateY(-angle * rotationStrength);
                monstruoSilueta.RotateY(-angle * rotationStrength);
            }

            if (input.keyDown(Key.D))
            {
                director.TransformCoordinate(TGCMatrix.RotationY(angle * rotationStrength));
                personaje.Transform          = TGCMatrix.Translation(TGCVector3.Empty) * TGCMatrix.RotationY(angle * rotationStrength) * new TGCMatrix(personajeBody.InterpolationWorldTransform);
                personajeBody.WorldTransform = personaje.Transform.ToBsMatrix;
                personaje.RotateY(angle * rotationStrength);
                personajeActual.RotarManos(angle * rotationStrength);
                monstruo.RotateY(angle * rotationStrength);
                monstruoSilueta.RotateY(angle * rotationStrength);
            }


            #endregion Comportamiento
        }