Exemplo n.º 1
0
        public void Update(Vector3 PosicionTarget)
        {
            var  mapScene       = gameModel.MapScene;
            bool collisionFound = false;

            Mover();
            tiempoEspera += elapsedTime;

            //1 chocar contra target?

            if (TgcCollisionUtils.testObbObb(obb, autoPlayer.obb))
            {
                velocidad = 0f;
                //Doblar(20f);
                gameModel.TerminarJuego(false);
                obb.setRenderColor(Color.Blue);
                return;
            }
            //2 choca contra mapa?
            if (testChoqueContraMapa(mapScene, collisionFound))
            {
                velocidad = 2f;
                Doblar(45f);
                obb.setRenderColor(Color.Red);
                return;
            }
            obb.setRenderColor(Color.Yellow);
            //3 Dobla para apuntar al target?
            ApuntarAlTarget(PosicionTarget);
        }
        public PlataformaRotante(TgcMesh plataformaMesh, Escenario escenario, int coeficienteRotacion) : base(plataformaMesh, escenario)
        {
            this.plataformaMesh      = plataformaMesh;
            this.escenario           = escenario;
            this.coeficienteRotacion = coeficienteRotacion;

            this.plataformaMesh.AutoTransform         = false;
            this.plataformaMesh.AutoUpdateBoundingBox = false;


            //Defino angulo de rotacion --> coeficiente puede ser -1 o 1, define direccion de rotacion
            anguloRotacion  = FastMath.ToRad(15f);
            anguloRotacion *= coeficienteRotacion;


            //Defino Matrices para rotacion del mesh de la plataforma
            posicionInicialBB = this.plataformaMesh.BoundingBox.calculateBoxCenter();
            matrizTranslacionPosicionInicial = TGCMatrix.Translation(posicionInicialBB);
            matrizTranslacionOrigen          = TGCMatrix.Translation(new TGCVector3(-posicionInicialBB.X, -posicionInicialBB.Y, -posicionInicialBB.Z));

            //Defino OrientedBoundingBox y hago el Dispose() de la AABB
            OBB = TgcBoundingOrientedBox.computeFromAABB(this.plataformaMesh.BoundingBox);
            OBB.setRenderColor(System.Drawing.Color.Empty);
            vRotacionOBB = new TGCVector3(0f, anguloRotacion, 0f);

            // plataformaMesh.BoundingBox.Dispose();
        }
Exemplo n.º 3
0
        private void ProcesarColisiones()
        {
            collisionFound = false;
            chocoAdelante  = false;
            //TgcCollisionUtils.testobbTest choque cilindro

            var ray = new TgcRay.RayStruct();
            var x1  = -largo *FastMath.Sin(anguloFinal);

            var z1 = -largo *FastMath.Cos(anguloFinal);

            var x2 = x1 * 1.2;
            var z2 = z1 * 1.2;

            //var a =  Mesh.Position.TransformCoordinate(Matrix.Identity);

            ray.origin = new Vector3(
                Mesh.Position.X + x1,
                Mesh.Position.Y,
                Mesh.Position.Z + z1);

            ray.direction = new Vector3(
                newPosicion.X + (float)x2,
                newPosicion.Y,
                newPosicion.Z + (float)z2
                );

            directionArrow           = new TgcArrow();
            directionArrow.Thickness = 5;
            directionArrow.HeadSize  = new Vector2(10, 10);

            //directionArrow.PEnd = ray.origin;
            directionArrow.PStart = ray.origin;
            directionArrow.PEnd   = ray.direction;
            directionArrow.updateValues();

            //-FastMath.Sin(anguloFinal), 0, 350 * -FastMath.Cos(anguloFinal)

            //ray.direction = eMovementVector;


            foreach (var sceneMesh in ciudadScene.Meshes)
            {
                var escenaAABB      = sceneMesh.BoundingBox;
                var collisionResult = TgcCollisionUtils.testObbAABB(obb, escenaAABB);



                //2 -si lo hizo, salgo del foreach.
                if (collisionResult)
                {
                    collisionFound = true;
                    //if (intersectRayAABB(ray, escenaAABB))//, out t, out p) || t > 1.0f)
                    float   t;
                    Vector3 p;
                    chocoAdelante = (intersectRayAABB(ray, escenaAABB, out t, out p) || t > 1.0f);

                    break;
                }
            }
            //3 - si chocó, pongo el bounding box en rojo (apretar F para ver el bb).
            if (collisionFound)
            {
                if (Mesh.Position.Y == 5 || Mesh.Position.Y >= 25)
                {
                    obb.setRenderColor(Color.Red);
                    //efectoShaderNitroHummer.SetValue("Velocidad", 4 * Velocidad);
                    PosicionRollback();
                }
            }
            else
            {
                obb.setRenderColor(Color.Yellow);
            }

            if (Mesh.Position.Y == 5)
            {
                ManejarColisionCamara();
            }

            velocimetro.Update(Velocidad, marchaAtras);
        }
        public override void Update()
        {
            PreUpdate();
            var velocidadCaminar = VELOCIDAD_DESPLAZAMIENTO * ElapsedTime;

            //Calcular proxima posicion de personaje segun Input
            var moving   = false;
            var movement = new Vector3(0, 0, 0);

            //Adelante
            if (Input.keyDown(Key.W))
            {
                movement.Z = velocidadCaminar;
                moving     = true;
            }

            //Atras
            if (Input.keyDown(Key.S))
            {
                movement.Z = -velocidadCaminar;
                moving     = true;
            }

            //Derecha
            if (Input.keyDown(Key.D))
            {
                movement.X = velocidadCaminar;
                moving     = true;
            }

            //Izquierda
            if (Input.keyDown(Key.A))
            {
                movement.X = -velocidadCaminar;
                moving     = true;
            }
            //Salto
            if (Input.keyDown(Key.Space))
            {
                movement.Y = velocidadCaminar;
                moving     = true;
            }
            //Agachar
            if (Input.keyDown(Key.LeftControl))
            {
                movement.Y = -velocidadCaminar;
                moving     = true;
            }
            //Si hubo desplazamiento
            if (moving)
            {
                //Aplicar movimiento, internamente suma valores a la posicion actual del mesh.
                mesh.move(movement);
            }
            //Hacer que la camara siga al personaje en su nueva posicion
            camaraInterna.Target = mesh.Position;

            //Detectar colision con triangulo
            if (TgcCollisionUtils.testTriangleAABB(triangle[0].Position, triangle[1].Position, triangle[2].Position,
                                                   mesh.BoundingBox))
            {
                triangle[0].Color = Color.Red.ToArgb();
                triangle[1].Color = Color.Red.ToArgb();
                triangle[2].Color = Color.Red.ToArgb();
            }
            else
            {
                triangle[0].Color = Color.Green.ToArgb();
                triangle[1].Color = Color.Green.ToArgb();
                triangle[2].Color = Color.Green.ToArgb();
            }
            //Detectar colision con el otro AABB
            if (TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, box2.BoundingBox))
            {
                box2.Color = Color.Red;
                box2.updateValues();
            }
            else
            {
                box2.Color = Color.Violet;
                box2.updateValues();
            }
            //Detectar colision con la esfera
            if (TgcCollisionUtils.testSphereAABB(boundingSphere, mesh.BoundingBox))
            {
                boundingSphere.setRenderColor(Color.Red);
            }
            else
            {
                boundingSphere.setRenderColor(Color.Yellow);
            }

            //Detectar colision con la obb
            if (TgcCollisionUtils.testObbAABB(obb, mesh.BoundingBox))
            {
                obb.setRenderColor(Color.Red);
            }
            else
            {
                obb.setRenderColor(Color.Yellow);
            }
        }