Example #1
0
        public override void Update(float elapsedTime)
        {
            if (muerto)
            {
                tiempoDesdeMuerto += elapsedTime;
            }
            Vector3 vectorPosActual = new Vector3(posicionActual.M41, posicionActual.M42, posicionActual.M43);

            //Realizamos ataque de enemigos
            if (!attacking && !muerto)
            {
                vectorDireccion = (CustomFpsCamera.Instance.Position - vectorPosActual);
                if (vectorDireccion.Length() <= ATTACK_RANGE && attackDelay <= 0)
                {
                    startAttack();
                }
                vectorDireccionRotacion = new Vector3(vectorDireccion.X, 0, vectorDireccion.Z);
                vectorDireccionRotacion.Normalize();

                vectorDireccion.Normalize();

                attackDelay -= elapsedTime;
            }
            //realizamos el movimiento del enemigo
            updateMovementMatrix(elapsedTime, vectorDireccion);

            //Colision con otros enemigos
            foreach (Enemy enemy in GameManager.Instance.enemies)
            {
                if (this != enemy && TgcCollisionUtils.testAABBAABB(this.mesh.BoundingBox, enemy.mesh.BoundingBox))
                {
                    Vector3 eye = CustomFpsCamera.Instance.Position;

                    Vector3 vec1 = new Vector3();
                    vec1.X = this.posicionActual.M41;
                    vec1.Y = this.posicionActual.M42;
                    vec1.Z = this.posicionActual.M43;

                    Vector3 vec2 = new Vector3();
                    vec2.X = enemy.posicionActual.M41;
                    vec2.Y = enemy.posicionActual.M42;
                    vec2.Z = enemy.posicionActual.M43;

                    if (Vector3.Length(eye - vec1) <= Vector3.Length(eye - vec2))
                    {
                        enemy.posicionActual         = enemy.posicionAnterior;
                        enemy.posicionActualHeadshot = enemy.posicionAnteriorHeadshot;
                        enemy.posicionActualChest    = enemy.posicionAnteriorChest;
                        enemy.posicionActualLegs     = enemy.posicionAnteriorLegs;
                        enemy.updateMovementMatrix(elapsedTime, new Vector3(0, 0, 0));
                    }
                    else
                    {
                        this.posicionActual         = this.posicionAnterior;
                        this.posicionActualHeadshot = this.posicionAnteriorHeadshot;
                        this.posicionActualChest    = this.posicionAnteriorChest;
                        this.posicionActualLegs     = this.posicionAnteriorLegs;
                        this.updateMovementMatrix(elapsedTime, new Vector3(0, 0, 0));
                    }
                }
            }

            //Colision de enemigos con vegetacion, hecho para que no se queden trabados con o sin "ayuda" del player
            List <TgcMesh> obstaculos = new List <TgcMesh>();

            obstaculos = GameManager.Instance.quadTree.findMeshesToCollide(mesh.BoundingBox);

            foreach (TgcMesh obstaculo in obstaculos)
            {
                if (!obstaculo.Name.StartsWith("ArbustoComplejo"))
                {
                    TgcCollisionUtils.BoxBoxResult result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, obstaculo.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        posicionActual          = posicionAnterior;
                        posicionActualHeadshot  = posicionAnteriorHeadshot;
                        posicionActualChest     = posicionAnteriorChest;
                        posicionActualLegs      = posicionAnteriorLegs;
                        vectorDireccionRotacion = vectorDireccionRotacionAnterior;
                        vectorDireccion         = vectorDireccionAnterior;
                        Vector3 dirX = new Vector3(vectorDireccion.X, 0, 0);
                        dirX.Normalize();
                        updateMovementMatrix(elapsedTime, dirX);

                        TgcCollisionUtils.BoxBoxResult resultX = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, obstaculo.BoundingBox);
                        if (resultX == TgcCollisionUtils.BoxBoxResult.Adentro || resultX == TgcCollisionUtils.BoxBoxResult.Atravesando)
                        {
                            posicionActual         = posicionAnterior;
                            posicionActualHeadshot = posicionAnteriorHeadshot;
                            posicionActualChest    = posicionAnteriorChest;
                            posicionActualLegs     = posicionAnteriorLegs;
                            Vector3 dirZ = new Vector3(0, 0, vectorDireccion.Z);
                            dirZ.Normalize();
                            updateMovementMatrix(elapsedTime, dirZ);

                            TgcCollisionUtils.BoxBoxResult resultZ = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, obstaculo.BoundingBox);
                            if (resultZ == TgcCollisionUtils.BoxBoxResult.Adentro || resultZ == TgcCollisionUtils.BoxBoxResult.Atravesando)
                            {
                                posicionActual         = posicionAnterior;
                                posicionActualHeadshot = posicionAnteriorHeadshot;
                                posicionActualChest    = posicionAnteriorChest;
                                posicionActualLegs     = posicionAnteriorLegs;
                            }
                        }
                        break;
                    }
                }
            }

            posicionAnterior                = posicionActual;
            posicionAnteriorHeadshot        = posicionActualHeadshot;
            posicionAnteriorChest           = posicionActualChest;
            posicionAnteriorLegs            = posicionActualLegs;
            vectorDireccionRotacionAnterior = vectorDireccionRotacion;
            vectorDireccionAnterior         = vectorDireccion;
            this.SonidoMovimiento.Position  = getPosicionActual();

            //Colision con Player1
            TgcCollisionUtils.BoxBoxResult resultPlayer = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, CustomFpsCamera.Instance.boundingBox);
            if (resultPlayer == TgcCollisionUtils.BoxBoxResult.Adentro || resultPlayer == TgcCollisionUtils.BoxBoxResult.Atravesando)
            {
                //si hay colision el enemigo ataca
                attack(elapsedTime);
            }
        }
Example #2
0
        public override void render(float elapsedTime)
        {
            Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice;

            //Ver si hay que mostrar el BoundingBox
            bool showBB = (bool)GuiController.Instance.Modifiers.getValue("showBoundingBox");


            //Calcular proxima posicion de personaje segun Input
            Vector3 move = new Vector3(0, 0, 0);

            //Multiplicar la velocidad por el tiempo transcurrido, para no acoplarse al CPU
            float speed = VELOCIDAD_DESPLAZAMIENTO * elapsedTime;

            TgcD3dInput d3dInput = GuiController.Instance.D3dInput;
            bool        moving   = false;

            //Adelante
            if (d3dInput.keyDown(Key.W))
            {
                move.Z             = -speed;
                personaje.Rotation = new Vector3(0, 0, 0);
                moving             = true;
            }

            //Atras
            else if (d3dInput.keyDown(Key.S))
            {
                move.Z             = speed;
                personaje.Rotation = new Vector3(0, (float)Math.PI, 0);
                moving             = true;
            }

            //Izquierda
            else if (d3dInput.keyDown(Key.A))
            {
                move.X             = +speed;
                personaje.Rotation = new Vector3(0, -(float)Math.PI / 2, 0);
                moving             = true;
            }

            //Derecha
            else if (d3dInput.keyDown(Key.D))
            {
                move.X             = -speed;
                personaje.Rotation = new Vector3(0, (float)Math.PI / 2, 0);
                moving             = true;
            }


            //Si hubo desplazamientos
            if (moving)
            {
                //Mover personaje
                Vector3 lastPos = personaje.Position;
                personaje.move(move);

                //Detectar colisiones de BoundingBox utilizando herramienta TgcCollisionUtils
                bool collide = false;
                foreach (TgcMesh obstaculo in obstaculos)
                {
                    TgcCollisionUtils.BoxBoxResult result = TgcCollisionUtils.classifyBoxBox(personaje.BoundingBox, obstaculo.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        collide = true;
                        break;
                    }
                }


                //Si hubo colision, restaurar la posicion anterior
                if (collide)
                {
                    personaje.Position = lastPos;
                }
            }



            //Renderizar piso
            piso.render();

            //Renderizar obstaculos
            foreach (TgcMesh obstaculo in obstaculos)
            {
                obstaculo.render();
                //Renderizar BoundingBox si asi lo pidieron
                if (showBB)
                {
                    obstaculo.BoundingBox.render();
                }
            }

            //Render personaje
            personaje.animateAndRender();
            //Renderizar BoundingBox si asi lo pidieron
            if (showBB)
            {
                personaje.BoundingBox.render();
            }
        }
Example #3
0
        public override void Update()
        {
            //Obtenemos acceso al objeto que maneja input de mouse y teclado del framework
            var input = Input;

            //Declaramos un vector de movimiento inicializado en cero.
            //El movimiento sobre el suelo es sobre el plano XZ.
            //Sobre XZ nos movemos con las flechas del teclado o con las letas WASD.
            var movement = TGCVector3.Empty;

            //Movernos de izquierda a derecha, sobre el eje X.
            if (input.keyDown(Key.Left) || input.keyDown(Key.A))
            {
                movement.X = 1;
            }
            else if (input.keyDown(Key.Right) || input.keyDown(Key.D))
            {
                movement.X = -1;
            }

            //Movernos adelante y atras, sobre el eje Z.
            if (input.keyDown(Key.Up) || input.keyDown(Key.W))
            {
                movement.Z = -1;
            }
            else if (input.keyDown(Key.Down) || input.keyDown(Key.S))
            {
                movement.Z = 1;
            }

            //Guardar posicion original antes de cambiarla
            var originalPos = mainMesh.Position;

            //Multiplicar movimiento por velocidad y elapsedTime
            movement          *= MOVEMENT_SPEED * ElapsedTime;
            mainMesh.Position  = mainMesh.Position + movement;
            mainMesh.Transform = TGCMatrix.Translation(mainMesh.Position);

            //Chequear si el objeto principal en su nueva posición choca con alguno de los objetos de la escena.
            //Si es así, entonces volvemos a la posición original.
            //Cada TgcMesh tiene un objeto llamado BoundingBox. El BoundingBox es una caja 3D que representa al objeto
            //de forma simplificada (sin tener en cuenta toda la complejidad interna del modelo).
            //Este BoundingBox se utiliza para chequear si dos objetos colisionan entre sí.
            //El framework posee la clase TgcCollisionUtils con muchos algoritmos de colisión de distintos tipos de objetos.
            //Por ejemplo chequear si dos cajas colisionan entre sí, o dos esferas, o esfera con caja, etc.
            var collisionFound = false;

            foreach (var mesh in scene.Meshes)
            {
                //Los dos BoundingBox que vamos a testear
                var mainMeshBoundingBox  = mainMesh.BoundingBox;
                var sceneMeshBoundingBox = mesh.BoundingBox;

                //Ejecutar algoritmo de detección de colisiones
                var collisionResult = TgcCollisionUtils.classifyBoxBox(mainMeshBoundingBox, sceneMeshBoundingBox);

                //Hubo colisión con un objeto. Guardar resultado y abortar loop.
                if (collisionResult != TgcCollisionUtils.BoxBoxResult.Afuera)
                {
                    collisionFound = true;
                    break;
                }
            }

            //Si hubo alguna colisión, entonces restaurar la posición original del mesh
            if (collisionFound)
            {
                mainMesh.Position  = originalPos;
                mainMesh.Transform = TGCMatrix.Translation(mainMesh.Position);
            }

            //Hacer que la camara en 3ra persona se ajuste a la nueva posicion del objeto
            camaraInterna.Target = mainMesh.Position;
        }
Example #4
0
        public void Movimiento(float tiempoRenderizado, List <TgcMesh> obstaculos)
        {
            bool        rotando    = false;
            bool        seMovio    = false;
            float       mover      = 0f;
            float       rotar      = 0f;
            TgcD3dInput input      = GuiController.Instance.D3dInput;
            Vector3     movimiento = new Vector3(0, 0, 0);

            //tiempos de renderizado para calcular aceleracion con limite
            if (RendAcumuladoS < 10)
            {
                RendAcumuladoS += tiempoRenderizado;                         //tiempo que se estuvo yendo hacia atras
            }
            if (RendAcumuladoW < 10)
            {
                RendAcumuladoW += tiempoRenderizado;                         //tiempo que se estuvo yendo hacia adelante
            }
            if (input.keyDown(Key.Left) || input.keyDown(Key.A))
            {
                rotando = true;
                rotar   = -VelocidadRotacion;
            }
            else if (input.keyDown(Key.Right) || input.keyDown(Key.D))
            {
                rotando = true;
                rotar   = VelocidadRotacion;
            }
            if (input.keyDown(Key.Up) || input.keyDown(Key.W))
            {
                seMovio = true;
                mover   = -VelocidadMovimiento - 12 * (float)Math.Pow(RendAcumuladoW, 2);
                Modelo.moveOrientedY(mover * tiempoRenderizado);
            }
            else
            {
                RendAcumuladoW = 0;
            }
            if (input.keyDown(Key.Down) || input.keyDown(Key.S))
            {
                seMovio = true;
                mover   = VelocidadMovimiento + 12 * (float)Math.Pow(RendAcumuladoS, 2);
                Modelo.moveOrientedY(mover * tiempoRenderizado);
            }
            else
            {
                RendAcumuladoS = 0;
            }
            if (input.keyDown(Key.R))
            {
                seMovio = true;
                mover   = -VelocidadMovimiento;
                Modelo.move(0, mover * tiempoRenderizado, 0);
            }
            else if (input.keyDown(Key.T))
            {
                seMovio = true;
                mover   = VelocidadMovimiento;
                Modelo.move(0, mover * tiempoRenderizado, 0);
            }

            if (seMovio)
            {
                Vector3 ultimaPosicion = Modelo.Position;
                bool    colisiono      = false;
                foreach (TgcMesh obstaculo in obstaculos)
                {
                    TgcCollisionUtils.BoxBoxResult result = TgcCollisionUtils.classifyBoxBox(Modelo.BoundingBox, obstaculo.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        colisiono = true;
                        break;
                    }
                }

                if (colisiono)
                {
                    Modelo.Position = ultimaPosicion;
                }
            }

            if (rotando)
            {
                Modelo.rotateY(Geometry.DegreeToRadian(rotar * tiempoRenderizado));
                GuiController.Instance.ThirdPersonCamera.rotateY(Geometry.DegreeToRadian(rotar * tiempoRenderizado));
                ;
            }
        }
Example #5
0
 public static Boolean isColliding(BoundingBoxCollider boundingBox, BoundingBoxCollider obstaculo)
 {
     TgcCollisionUtils.BoxBoxResult result = TgcCollisionUtils.classifyBoxBox(boundingBox.Aabb, obstaculo.Aabb);
     return(result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando);
 }
Example #6
0
        public override void render(float elapsedTime)
        {
            Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice;

            //Obtener boolean para saber si hay que mostrar Bounding Box
            bool showBB = (bool)GuiController.Instance.Modifiers.getValue("showBoundingBox");


            //obtener velocidades de Modifiers
            float velocidadCaminar  = (float)GuiController.Instance.Modifiers.getValue("VelocidadCaminar");
            float velocidadRotacion = (float)GuiController.Instance.Modifiers.getValue("VelocidadRotacion");


            //Calcular proxima posicion de personaje segun Input
            float       moveForward = 0f;
            float       rotate      = 0;
            TgcD3dInput d3dInput    = GuiController.Instance.D3dInput;
            bool        moving      = false;
            bool        rotating    = false;

            //Adelante
            if (d3dInput.keyDown(Key.W))
            {
                moveForward = -velocidadCaminar;
                moving      = true;
            }

            //Atras
            if (d3dInput.keyDown(Key.S))
            {
                moveForward = velocidadCaminar;
                moving      = true;
            }

            //Derecha
            if (d3dInput.keyDown(Key.D))
            {
                rotate   = velocidadRotacion;
                rotating = true;
            }

            //Izquierda
            if (d3dInput.keyDown(Key.A))
            {
                rotate   = -velocidadRotacion;
                rotating = true;
            }

            //Si hubo rotacion
            if (rotating)
            {
                //Rotar personaje y la camara, hay que multiplicarlo por el tiempo transcurrido para no atarse a la velocidad el hardware
                float rotAngle = Geometry.DegreeToRadian(rotate * elapsedTime);
                personaje.rotateY(rotAngle);
                GuiController.Instance.ThirdPersonCamera.rotateY(rotAngle);
            }

            //Si hubo desplazamiento
            if (moving)
            {
                //Activar animacion de caminando
                personaje.playAnimation("Caminando", true);

                //Aplicar movimiento hacia adelante o atras segun la orientacion actual del Mesh
                Vector3 lastPos = personaje.Position;

                //La velocidad de movimiento tiene que multiplicarse por el elapsedTime para hacerse independiente de la velocida de CPU
                //Ver Unidad 2: Ciclo acoplado vs ciclo desacoplado
                personaje.moveOrientedY(moveForward * elapsedTime);

                //Detectar colisiones
                bool collide = false;
                foreach (TgcBox obstaculo in obstaculos)
                {
                    TgcCollisionUtils.BoxBoxResult result = TgcCollisionUtils.classifyBoxBox(personaje.BoundingBox, obstaculo.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        collide = true;
                        break;
                    }
                }

                //Si hubo colision, restaurar la posicion anterior
                if (collide)
                {
                    personaje.Position = lastPos;
                }
                else
                {
                }
            }

            //Si no se esta moviendo, activar animacion de Parado
            else
            {
                personaje.playAnimation("Parado", true);
            }

            //Hacer que la camara siga al personaje en su nueva posicion
            GuiController.Instance.ThirdPersonCamera.Target = personaje.Position;



            //Render piso
            piso.render();


            //Render obstaculos
            foreach (TgcBox obstaculo in obstaculos)
            {
                obstaculo.render();
                if (showBB)
                {
                    obstaculo.BoundingBox.render();
                }
            }

            //Render personaje
            personaje.animateAndRender();
            if (showBB)
            {
                personaje.BoundingBox.render();
            }
        }
Example #7
0
        public override void Render()
        {
            PreRender();

            var velocidadCaminar  = 400f;
            var velocidadRotacion = 120f;

            //Calcular proxima posicion de personaje segun Input
            var   moveForward = 0f;
            float rotate      = 0;
            var   d3dInput    = TgcD3dInput.Instance;
            var   moving      = false;
            var   rotating    = false;

            //Adelante
            if (d3dInput.keyDown(Key.W))
            {
                moveForward = -velocidadCaminar;
                moving      = true;
            }

            //Atras
            if (d3dInput.keyDown(Key.S))
            {
                moveForward = velocidadCaminar;
                moving      = true;
            }

            //Derecha
            if (d3dInput.keyDown(Key.D))
            {
                rotate   = velocidadRotacion;
                rotating = true;
            }

            //Izquierda
            if (d3dInput.keyDown(Key.A))
            {
                rotate   = -velocidadRotacion;
                rotating = true;
            }

            //Si hubo rotacion
            if (rotating)
            {
                //Rotar personaje y la camara, hay que multiplicarlo por el tiempo transcurrido para no atarse a la velocidad el hardware
                var rotAngle = Geometry.DegreeToRadian(rotate * ElapsedTime);
                personaje.rotateY(rotAngle);
                camaraInterna.rotateY(rotAngle);
            }

            //Si hubo desplazamiento
            if (moving)
            {
                //Activar animacion de caminando
                personaje.playAnimation("Caminando", true);

                //Aplicar movimiento hacia adelante o atras segun la orientacion actual del Mesh
                var lastPos = personaje.Position;

                //La velocidad de movimiento tiene que multiplicarse por el elapsedTime para hacerse independiente de la velocida de CPU
                //Ver Unidad 2: Ciclo acoplado vs ciclo desacoplado
                personaje.moveOrientedY(moveForward * ElapsedTime);

                //Detectar colisiones
                var collide = false;
                foreach (var obstaculo in obstaculos)
                {
                    var result = TgcCollisionUtils.classifyBoxBox(personaje.BoundingBox, obstaculo.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro ||
                        result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        collide = true;
                        break;
                    }
                }

                //Si hubo colision, restaurar la posicion anterior
                if (collide)
                {
                    personaje.Position = lastPos;
                }

                //Hacer que la camara siga al personaje en su nueva posicion
                camaraInterna.Target = personaje.Position;
            }

            //Si no se esta moviendo, activar animacion de Parado
            else
            {
                personaje.playAnimation("Parado", true);
            }

            //Ajustar la posicion de la camara segun la colision con los objetos del escenario
            ajustarPosicionDeCamara(obstaculos);

            //Render piso
            piso.render();

            //Render de obstaculos
            foreach (var obstaculo in obstaculos)
            {
                obstaculo.render();
            }

            //Render personaje
            personaje.animateAndRender(ElapsedTime);

            PostRender();
        }
Example #8
0
        public override void Update()
        {
            //Calcular proxima posicion de personaje segun Input
            var   moveForward = 0f;
            float rotate      = 0;
            var   moving      = false;
            var   rotating    = false;

            //Adelante
            if (Input.keyDown(Key.W))
            {
                moveForward = -VELODICAD_CAMINAR;
                moving      = true;
            }

            //Atras
            if (Input.keyDown(Key.S))
            {
                moveForward = VELODICAD_CAMINAR;
                moving      = true;
            }

            //Derecha
            if (Input.keyDown(Key.D))
            {
                rotate   = VELOCIDAD_ROTACION;
                rotating = true;
            }

            //Izquierda
            if (Input.keyDown(Key.A))
            {
                rotate   = -VELOCIDAD_ROTACION;
                rotating = true;
            }

            //Si hubo rotacion
            if (rotating)
            {
                //Rotar personaje y la camara, hay que multiplicarlo por el tiempo transcurrido para no atarse a la velocidad el hardware
                var rotAngle = Geometry.DegreeToRadian(rotate * ElapsedTime);
                personaje.Rotation += new TGCVector3(0, rotAngle, 0);
                camaraInterna.rotateY(rotAngle);
            }

            //Si hubo desplazamiento
            if (moving)
            {
                //Aplicar movimiento hacia adelante o atras segun la orientacion actual del Mesh
                var lastPos = personaje.Position;
                var moveF   = moveForward * ElapsedTime;
                var z       = (float)Math.Cos(personaje.Rotation.Y) * moveF;
                var x       = (float)Math.Sin(personaje.Rotation.Y) * moveF;

                personaje.Position += new TGCVector3(x, 0, z);

                //Detectar colisiones
                var collide = false;
                foreach (var obstaculo in obstaculos)
                {
                    var result = TgcCollisionUtils.classifyBoxBox(personaje.BoundingBox, obstaculo.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro ||
                        result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        collide = true;
                        break;
                    }
                }

                //Si hubo colision, restaurar la posicion anterior
                if (collide)
                {
                    personaje.Position = lastPos;
                }
            }

            personaje.Transform = TGCMatrix.Scaling(personaje.Scale)
                                  * TGCMatrix.RotationYawPitchRoll(personaje.Rotation.Y, personaje.Rotation.X, personaje.Rotation.Z)
                                  * TGCMatrix.Translation(personaje.Position);

            //Hacer que la camara siga al personaje en su nueva posicion
            camaraInterna.Target = personaje.Position;
        }
Example #9
0
        public override void Update(float elapsedTime)
        {
            /* string weap = (string)GuiController.Instance.Modifiers.getValue("Arma");
             * switch (weap)
             * {
             *   case "Sniper":
             *       weapon = sniper;
             *       break;
             *
             *   case "Rocket Launcher":
             *       weapon = launcher;
             *       break;
             * }*/



            //update de la pos del mesh auxiliar
            meshAuxiliarParaSonido.Position = CustomFpsCamera.Instance.eye;
            //Procesamos input de teclado
            TgcD3dInput input = GuiController.Instance.D3dInput;

            //Seteamos las teclas
            if (GuiController.Instance.D3dInput.buttonDown(TgcD3dInput.MouseButtons.BUTTON_LEFT) && weapon.FIRE_DELAY <= 0)
            {
                weapon.FIRE_DELAY          = weapon.MAX_DELAY;
                weapon.muzzle.MUZZLE_DELAY = weapon.muzzle.MAX_DELAY;
                weapon.muzzle.TIME_RENDER  = weapon.muzzle.MAX_RENDER;
                weapon.fireWeapon();
                CustomFpsCamera.Instance.rotateSmoothly(-0.30f, -1.5f, 0);
            }

            if (weapon.FIRE_DELAY > 0)
            {
                weapon.FIRE_DELAY -= elapsedTime;
            }
            if (weapon.muzzle.MUZZLE_DELAY > 0)
            {
                weapon.muzzle.MUZZLE_DELAY -= elapsedTime;
            }
            if (weapon.muzzle.TIME_RENDER > 0)
            {
                weapon.muzzle.TIME_RENDER -= elapsedTime;
            }


            if (GuiController.Instance.D3dInput.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_RIGHT) && ZOOM_DELAY <= 0.5f)
            {
                ZOOM_DELAY = MAX_ZOOM_DELAY;
                HUDManager.Instance.zoomCamera();
            }

            if (GuiController.Instance.D3dInput.keyDown(Key.LeftShift) && sprintTime < MAX_SPRINT_TIME)
            {
                CustomFpsCamera.Instance.MovementSpeed = 3 * CustomFpsCamera.DEFAULT_MOVEMENT_SPEED;
                sprintTime += elapsedTime;
                if (!running)
                {
                    runSound.play(true);
                    walkSound.stop();
                    running = true;
                }
                if (sprintTime > MAX_SPRINT_TIME)
                {
                    breathSound.play(true);
                    tiredTime = 0;
                }
            }
            else
            {
                CustomFpsCamera.Instance.MovementSpeed = CustomFpsCamera.DEFAULT_MOVEMENT_SPEED;
                tiredTime += elapsedTime;
                if (running)
                {
                    runSound.stop();
                    walkSound.play(true);
                    running = false;
                }
                if (tiredTime > TIRED_TIME && sprintTime != 0)
                {
                    breathSound.stop();
                    sprintTime = 0;
                }
            }

            if (ZOOM_DELAY > 0)
            {
                ZOOM_DELAY -= elapsedTime;
            }

            //muzzleFlash.Position = WEAPON_OFFSET;

            weapon.Update(elapsedTime);

            //Maxima inclinacion sobre terreno
            float yActual;
            float yAnterior;
            float movspeed = CustomFpsCamera.Instance.MovementSpeed;

            GameManager.Instance.interpoledHeight(CustomFpsCamera.Instance.eye.X, CustomFpsCamera.Instance.eye.Z, out yActual);
            GameManager.Instance.interpoledHeight(prevEye.X, prevEye.Z, out yAnterior);
            double diferenciaPotenciada = Math.Pow((yActual - yAnterior) / (movspeed * elapsedTime), 2);

            if (diferenciaPotenciada >= intensidadMaximaEscalable)
            {
                CustomFpsCamera.Instance.eye = prevEye;
                CustomFpsCamera.Instance.reconstructViewMatrix(false);
            }


            //Colision de la camara con sliding
            List <TgcMesh> obstaculos = new List <TgcMesh>();

            obstaculos = GameManager.Instance.quadTree.findMeshesToCollide(CustomFpsCamera.Instance.boundingBox);

            foreach (TgcMesh obstaculo in obstaculos)
            {
                if (!obstaculo.Name.StartsWith("ArbustoComplejo"))
                {
                    Vector3 dirMov = CustomFpsCamera.Instance.eye - prevEye;

                    TgcCollisionUtils.BoxBoxResult result = TgcCollisionUtils.classifyBoxBox(CustomFpsCamera.Instance.boundingBox, obstaculo.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        CustomFpsCamera.Instance.eye = prevEye + new Vector3(dirMov.X, 0, 0);
                        CustomFpsCamera.Instance.reconstructViewMatrix(false);
                        TgcCollisionUtils.BoxBoxResult resultX = TgcCollisionUtils.classifyBoxBox(CustomFpsCamera.Instance.boundingBox, obstaculo.BoundingBox);
                        if (resultX == TgcCollisionUtils.BoxBoxResult.Adentro || resultX == TgcCollisionUtils.BoxBoxResult.Atravesando)
                        {
                            CustomFpsCamera.Instance.eye = prevEye + new Vector3(0, 0, dirMov.Z);
                            CustomFpsCamera.Instance.reconstructViewMatrix(false);

                            TgcCollisionUtils.BoxBoxResult resultZ = TgcCollisionUtils.classifyBoxBox(CustomFpsCamera.Instance.boundingBox, obstaculo.BoundingBox);
                            if (resultZ == TgcCollisionUtils.BoxBoxResult.Adentro || resultZ == TgcCollisionUtils.BoxBoxResult.Atravesando)
                            {
                                CustomFpsCamera.Instance.eye = prevEye;
                            }
                        }
                        break;
                    }
                }
            }

            if (prevEye == CustomFpsCamera.Instance.eye)
            {
                walkSound.stop();
                runSound.stop();
            }
            else if (!running)
            {
                walkSound.play(true);
            }

            prevEye = CustomFpsCamera.Instance.eye;
        }
Example #10
0
 /// <summary>
 /// Método muy básico para detectar la colisión de dos bounding box.
 /// </summary>
 /// <param name="box1">Bounding box del primer objeto.</param>
 /// <param name="box2">Bounding box del segundo objeto.</param>
 /// <returns>Valor indicando si hubo o no colisión entre las bounding box.</returns>
 public static bool DetectarColision(TgcBoundingBox box1, TgcBoundingBox box2)
 {
     TgcCollisionUtils.BoxBoxResult result = TgcCollisionUtils.classifyBoxBox(box1, box2);
     return(result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando || result == TgcCollisionUtils.BoxBoxResult.Encerrando);
 }
Example #11
0
 public bool CollidesWith(GameObject foreign)
 {
     return(Meshes.Any(mesh => foreign.Meshes.Any(foreignMesh => TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, foreignMesh.BoundingBox) != TgcCollisionUtils.BoxBoxResult.Afuera)));
 }
Example #12
0
        private void DetectarColisiones(TGCVector3 lastPos, float pminYAnteriorPersonaje, float pmaxYAnteriorPersonaje)
        {
            var lastCollide = false;

            foreach (var mesh in scene.Meshes)
            {
                //Los dos BoundingBox que vamos a testear
                var mainMeshBoundingBox  = personajePrincipal.BoundingBox;
                var sceneMeshBoundingBox = mesh.BoundingBox;

                if (mainMeshBoundingBox == sceneMeshBoundingBox)
                {
                    continue;
                }

                //Ejecutar algoritmo de detección de colisiones
                var collisionResult = TgcCollisionUtils.classifyBoxBox(mainMeshBoundingBox, sceneMeshBoundingBox);


                //Hubo colisión con un objeto. Guardar resultado y abortar loop.
                if (collisionResult != TgcCollisionUtils.BoxBoxResult.Afuera && !(fastSliders.Contains(mesh)))
                {
                    if (sceneMeshBoundingBox.PMax.Y <= pminYAnteriorPersonaje + 10)
                    {
                        enElPiso      = true;
                        lastPos.Y     = sceneMeshBoundingBox.PMax.Y + 3;
                        floorCollider = mesh;
                        if (slowSliders.Contains(mesh))
                        {
                            sliderModifierType  = "slow";
                            sliderFloorCollider = mesh;
                            sliderModifier      = 1f;
                        }
                    }
                    else if (sceneMeshBoundingBox.PMin.Y > pmaxYAnteriorPersonaje && jump != 0)
                    {
                        ceilingCollider = mesh;
                        techo           = true;
                    }

                    if (floorCollider != null && sceneMeshBoundingBox == floorCollider.BoundingBox)
                    {
                        lastCollide = true;
                    }


                    collider = mesh;

                    var movementRay = lastPos - personajePrincipal.Position;

                    Slider(lastPos, movementRay);

                    personajePrincipal.playAnimation("Caminando", true);
                    Coleccionar(mesh);
                    CruzarPuertas(mesh);
                    Caer(mesh);
                }
                else if (collisionResult != TgcCollisionUtils.BoxBoxResult.Afuera && fastSliders.Contains(mesh))
                {
                    sliderModifierType  = "fast";
                    sliderFloorCollider = mesh;
                    sliderModifier      = 2f;
                }
                if (lastCollide == false)
                {
                    enElPiso = false;
                }
            }
        }
        private void Move(TGCVector3 movement, float ElapsedTime)
        {
            TGCVector3 lastPos = mesh.Position;

            mesh.Position += movement;
            colision.stop();
            if (estaEnNave)
            {
                // todo: chequear colisiones con la mesa y silla
                //Check for collisions
                bool          collided = false;
                List <TGCBox> meshes   = InteriorNave.Instance().obtenerParedes();
                foreach (var pared in meshes)
                {
                    var result = TgcCollisionUtils.classifyBoxBox(mesh.BoundingBox, pared.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro ||
                        result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        collided = true;
                        break;
                    }
                }
                if (!collided)
                {
                    List <TgcMesh> elementosMesa = MesaNave.Instance().meshes();
                    foreach (var elemento in elementosMesa)
                    {
                        //var result = TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, elemento.BoundingBox);
                        var result = TgcCollisionUtils.testAABBAABB(new TgcBoundingAxisAlignBox(new TGCVector3(mesh.Position.X, elemento.Position.Y, mesh.Position.Z), mesh.Position), elemento.BoundingBox);
                        if (result)
                        {
                            collided = true;
                            break;
                        }
                    }
                }
                if (!collided)
                {
                    List <TgcMesh> elementosSilla = SillaInterior.Instance().meshes();
                    foreach (var elemento in elementosSilla)
                    {
                        //var result = TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, elemento.BoundingBox);
                        var result = TgcCollisionUtils.testAABBAABB(new TgcBoundingAxisAlignBox(new TGCVector3(mesh.Position.X, elemento.Position.Y, mesh.Position.Z), mesh.Position), elemento.BoundingBox);
                        if (result)
                        {
                            collided = true;
                            break;
                        }
                    }
                }
                if (!collided)
                {
                    List <TgcMesh> elementosTimon = TimonInterior.Instance().meshes();
                    foreach (var elemento in elementosTimon)
                    {
                        var result = TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, elemento.BoundingBox);
                        if (result)
                        {
                            collided = true;
                            break;
                        }
                    }
                }
                //If any collision then go to last position.
                if (collided)
                {
                    mesh.Position = lastPos;
                    colision.play(true);
                }
                if (mesh.Position != lastPos)
                {
                    walking.play(true);
                }
                else
                {
                    walking.stop();
                }
            }
            else
            {
                // todo: manejamos que la colision de la nave haga que el player entre y sacamos lo del press en la "o"?
                bool           collided = false;
                List <TgcMesh> meshes   = Nave.Instance().obtenerMeshes();
                foreach (var meshNave in meshes)
                {
                    var result = TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, meshNave.BoundingBox);
                    if (result)
                    {
                        collided = true;
                        break;
                    }
                }
                //If any collision then go to last position.
                if (collided)
                {
                    mesh.Position = lastPos;
                    colision.play(true);
                    return;
                }

                List <Entity> entities = Entities.GetEntities();
                foreach (var entity in entities)
                {
                    var result = TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, entity.GetMesh().BoundingBox);
                    if (result)
                    {
                        collided = true;
                        break;
                    }
                }
                //If any collision then go to last position.
                if (collided)
                {
                    mesh.Position = lastPos;
                    colision.play(true);
                    return;
                }
                if (mesh.Position.X > 1000f || mesh.Position.X < -1000f || mesh.Position.Z > 1000f || mesh.Position.Z < -1000f)
                {
                    // limitamos cuanto se puede mover el jugador
                    mesh.Position = lastPos;
                    colision.play(true);
                }
                // colisiones contra elementos del mar
            }
        }
Example #14
0
        public override void Render()
        {
            PreRender();

            //Calcular proxima posicion de personaje segun Input
            var   moveForward = 0f;
            float rotate      = 0;
            var   d3dInput    = TgcD3dInput.Instance;
            var   moving      = false;
            var   rotating    = false;

            //Adelante
            if (d3dInput.keyDown(Key.W))
            {
                moveForward = -VELODICAD_CAMINAR;
                moving      = true;
            }

            //Atras
            if (d3dInput.keyDown(Key.S))
            {
                moveForward = VELODICAD_CAMINAR;
                moving      = true;
            }

            //Derecha
            if (d3dInput.keyDown(Key.D))
            {
                rotate   = VELOCIDAD_ROTACION;
                rotating = true;
            }

            //Izquierda
            if (d3dInput.keyDown(Key.A))
            {
                rotate   = -VELOCIDAD_ROTACION;
                rotating = true;
            }

            //Si hubo rotacion
            if (rotating)
            {
                //Rotar personaje y la camara, hay que multiplicarlo por el tiempo transcurrido para no atarse a la velocidad el hardware
                var rotAngle = Geometry.DegreeToRadian(rotate * ElapsedTime);
                personaje.rotateY(rotAngle);
                camaraInterna.rotateY(rotAngle);
            }

            //Si hubo desplazamiento
            if (moving)
            {
                //Aplicar movimiento hacia adelante o atras segun la orientacion actual del Mesh
                var lastPos = personaje.Position;
                personaje.moveOrientedY(moveForward * ElapsedTime);

                //Detectar colisiones
                var collide = false;
                foreach (var obstaculo in obstaculos)
                {
                    var result = TgcCollisionUtils.classifyBoxBox(personaje.BoundingBox, obstaculo.BoundingBox);
                    if (result == TgcCollisionUtils.BoxBoxResult.Adentro ||
                        result == TgcCollisionUtils.BoxBoxResult.Atravesando)
                    {
                        collide = true;
                        break;
                    }
                }

                //Si hubo colision, restaurar la posicion anterior
                if (collide)
                {
                    personaje.Position = lastPos;
                }
            }

            //Hacer que la camara siga al personaje en su nueva posicion
            Camara = new TgcThirdPersonCamera();
            camaraInterna.Target = personaje.Position;

            //Render piso
            piso.render();

            //Render obstaculos
            foreach (var obstaculo in obstaculos)
            {
                obstaculo.render();
            }

            //Render personaje
            personaje.render();

            PostRender();
        }
Example #15
0
        private void DetectarColisiones(TGCVector3 lastPos, float pminYAnteriorPersonaje, float pmaxYAnteriorPersonaje, float dtime)
        {
            var lastCollide = false;

            detectarSiHayColisionDeCheckpoints(lastPos, pminYAnteriorPersonaje, pmaxYAnteriorPersonaje);

            foreach (var mesh in scene.Meshes)
            {
                //Los dos BoundingBox que vamos a testear
                var mainMeshBoundingBox  = personajePrincipal.BoundingBox;
                var sceneMeshBoundingBox = mesh.BoundingBox;

                if (mainMeshBoundingBox == sceneMeshBoundingBox)
                {
                    continue;
                }

                //Ejecutar algoritmo de detección de colisiones
                var collisionResult = TgcCollisionUtils.classifyBoxBox(mainMeshBoundingBox, sceneMeshBoundingBox);


                //Hubo colisión con un objeto. Guardar resultado y abortar loop.
                if (collisionResult != TgcCollisionUtils.BoxBoxResult.Afuera)
                {
                    if (sceneMeshBoundingBox.PMax.Y <= pminYAnteriorPersonaje + 10)
                    {
                        jump          = 0;
                        jumping       = 0;
                        enElPiso      = true;
                        lastPos.Y     = sceneMeshBoundingBox.PMax.Y + 3;
                        floorCollider = mesh;
                        if (slowSliders.Contains(mesh))
                        {
                            sliderFloorCollider = mesh;
                            sliderModifier      = 0.2f;
                        }
                        else if (fastSliders.Contains(mesh))
                        {
                            sliderFloorCollider = mesh;
                            sliderModifier      = 3;
                        }
                    }
                    else if (sceneMeshBoundingBox.PMin.Y > pmaxYAnteriorPersonaje && jump != 0)
                    {
                        ceilingCollider = mesh;
                        techo           = true;
                    }

                    if (floorCollider != null && sceneMeshBoundingBox == floorCollider.BoundingBox)
                    {
                        lastCollide = true;
                    }


                    collider = mesh;

                    var movementRay = lastPos - personajePrincipal.Position;

                    Slider(lastPos, movementRay, dtime);
                    MoverObjetos(mesh, movementRay);
                    CaerseAlAgua(mesh, movementRay);
                    verSiSeCompletoNivel(mesh);
                    AgarrarLibros(mesh);
                }
                if (lastCollide == false && floorCollider != null)
                {
                    personajePrincipal.Move(0, -3, 0);
                    if (TgcCollisionUtils.classifyBoxBox(personajePrincipal.BoundingBox, floorCollider.BoundingBox) == TgcCollisionUtils.BoxBoxResult.Afuera)
                    {
                        enElPiso = false;
                    }
                    personajePrincipal.Move(0, 3, 0);
                }
                else if (floorCollider == null)
                {
                    enElPiso = false;
                }
            }
        }
Example #16
0
 //**********************************************************************
 // devuelve true: si se produce colision con escenario
 //          False: si no se produce colision
 //**********************************************************************
 public bool colisionaObstaculosMesh(TgcBoundingBox bound, TgcBoundingBox o)
 {
     return(TgcCollisionUtils.classifyBoxBox(o, bound) == TgcCollisionUtils.BoxBoxResult.Atravesando);
 }
Example #17
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;
        }