Beispiel #1
0
        public void instanciarSpotLight(Personaje personaje, Escenario escenario)
        {
            //Cargar escenario
            var loader = new TgcSceneLoader();

            //Configurar MeshFactory customizado
            scene = escenario.tgcScene;

            //Camara en 1ra persona
            Camara = personaje;

            //Mesh para la luz
            lightMesh = TGCBox.fromSize(new TGCVector3(10, 10, 10), Color.Red);

            //Modifiers de la luz
            lightEnableModifier = true;
            lightPosModifier    = new TGCVector3 [3] {
                new TGCVector3(-200, -100, -200), new TGCVector3(200, 200, 300), new TGCVector3(-60, 90, 175)
            };

            /*
             * lightDirModifier = AddVertex3f("lightDir", new TGCVector3(-1, -1, -1), TGCVector3.One, new TGCVector3(-0.05f, 0, 0));
             * lightColorModifier = AddColor("lightColor", Color.White);
             * lightIntensityModifier = AddFloat("lightIntensity", 0, 150, 35);
             * lightAttenuationModifier = AddFloat("lightAttenuation", 0.1f, 2, 0.3f);
             * specularExModifier = AddFloat("specularEx", 0, 20, 9f);
             * spotAngleModifier = AddFloat("spotAngle", 0, 180, 39f);
             * spotExponentModifier = AddFloat("spotExponent", 0, 20, 7f);
             *
             * //Modifiers de material
             * mEmissiveModifier = AddColor("mEmissive", Color.Black);
             * mAmbientModifier = AddColor("mAmbient", Color.White);
             * mDiffuseModifier = AddColor("mDiffuse", Color.White);
             * mSpecularModifier = AddColor("mSpecular", Color.White);*/
        }
        public TgcMesh devolverEscalera(Escenario escenario)
        {
            escalera = escenario.tgcScene.Meshes.Find(mesh => mesh.Name.Equals("EscaleraMetalMovil"));

            //Console.WriteLine(escalera.Name);
            return(escalera);
        }
        public void actualizarEscenario()
        {
            if (escenarioActual is EscenarioMenu)
            {
                return;
            }

            float posicionMeshEjeZ = personaje.Mesh.Transform.Origin.Z;

            if (between(posicionMeshEjeZ, -330f, 0f))
            {
                escenarioActual = escenarios["playa"];
            }

            if (between(posicionMeshEjeZ, -464f, -330f))
            {
                escenarioActual = escenarios["plataforma"];
            }

            if (between(posicionMeshEjeZ, -598f, -464f))
            {
                escenarioActual = escenarios["hielo"];
            }

            if (between(posicionMeshEjeZ, -750f, -598f))
            {
                escenarioActual = escenarios["pozo"];
            }

            if (between(posicionMeshEjeZ, -850f, -750f))
            {
                escenarioActual = escenarios["piramide"];
            }
        }
        public void UpdateCamera(Escenario Escenario)
        {
            var Modelo = Escenario.Env;

            if (Modelo.Input.keyPressed(Key.F5))
            {
                colisiones = !colisiones;
            }
            if (!colisiones)
            {
                OffsetForward = Modelo.CameraOffsetForward;
                Update(Modelo.ElapsedTime);
                return;
            }
            TGCVector3 NextPos, up, target;

            //OffsetHeight = Modelo.CameraOffsetHeight;
            this.Update(Modelo.ElapsedTime, out NextPos, out target, out up);

            //Detectar colisiones entre el segmento de recta camara-personaje y todos los objetos del escenario
            TGCVector3 q;
            var        minDistSq = FastMath.Pow2(Modelo.CameraOffsetForward);

            foreach (var obstaculo in Escenario.listaColisionesConCamara())
            {
                //Hay colision del segmento camara-personaje y el objeto
                if (TgcCollisionUtils.intersectSegmentAABB(target, NextPos, obstaculo, out q))
                {
                    //Si hay colision, guardar la que tenga menor distancia
                    var distSq = TGCVector3.Subtract(q, target).LengthSq();
                    //Hay dos casos singulares, puede que tengamos mas de una colision hay que quedarse con el menor offset.
                    //Si no dividimos la distancia por 2 se acerca mucho al target.
                    minDistSq = FastMath.Min(distSq, minDistSq);
                }
            }

            //Acercar la camara hasta la minima distancia de colision encontrada (pero ponemos un umbral maximo de cercania)
            var newOffsetForward = -FastMath.Sqrt(minDistSq);

            this.Update(Modelo.ElapsedTime);

            if (FastMath.Abs(newOffsetForward) < 10)
            {
                newOffsetForward = 10;
            }
            OffsetForward = newOffsetForward;

            this.Update(Modelo.ElapsedTime);
        }
        public void cargarEscenarios()
        {
            escenarios = new Dictionary <string, Escenario>();

            escenarios["playa"] = new EscenarioPlaya(this, personaje);

            escenarios["plataforma"] = new EscenarioPlataforma(this, personaje);

            escenarios["playa"].siguiente = escenarios["plataforma"];

            //escenarios["camino"] = new EscenarioCamino(this, personaje);

            escenarios["pozo"] = new EscenarioPozo(this, personaje);

            escenarios["piramide"] = new EscenarioPiramide(this, personaje);

            escenarios["hielo"] = new EscenarioHielo(this, personaje);

            escenarios["menu"] = new EscenarioMenu(this, personaje);

            escenarioActual = escenarios["menu"];
        }
 /// <summary>
 ///     Se llama una sola vez, al principio cuando se ejecuta el ejemplo.
 ///     Escribir aquí todo el código de inicialización: cargar modelos, texturas, estructuras de optimización, todo
 ///     procesamiento que podemos pre calcular para nuestro juego.
 ///     Borrar el codigo ejemplo no utilizado.
 /// </summary>
 public override void Init()
 {
     NuevaCamara = new TgcThirdPersonCamera(new TGCVector3(0, 0, 0), 20, -75, Input);
     Camara      = NuevaCamara;
     Personaje.Init(this);
     Escenario = new Escenario1();
     Escenario.Init(this);
     Escenarios["Escenario1"] = Escenario;
     Escenario          = new EscenarioMenu();
     Escenarios["Menu"] = Escenario;
     Escenario          = new EscenarioMuerte();
     Escenario.Init(this);
     Escenarios["Muerte"] = Escenario;
     Escenario            = new EscenarioVictoria();
     Escenario.Init(this);
     Escenarios["Victoria"] = Escenario;
     Escenario = new EscenarioBullet1();
     Escenario.Init(this);
     Escenarios["Bullet1"] = Escenario;
     Escenario             = Escenarios["Menu"];
     Personaje.Init(this);
     Escenario.Init(this);
 }
Beispiel #7
0
        public void MoverPersonaje(char key, float elapsedTime, TgcD3dInput input, Escenario escenario, Monster monster)
        {
            MovementSpeed = 800.0f;
            var movimiento       = TGCVector3.Empty;
            var posicionOriginal = this.Position;

            var moving        = false;
            var estoyFlotando = false;

            if (key == key_forward)
            {
                movimiento.Z = -1;
                moving       = true;
            }

            if (key == key_left)
            {
                movimiento.X = 1;
                moving       = true;
            }

            if (key == key_back)
            {
                movimiento.Z = 1;
                moving       = true;
            }


            if (key == key_right)
            {
                movimiento.X = -1;
                moving       = true;
            }

            if (key == ' ')
            {
                movimiento.Y = 1;
                moving       = true;
            }


            if (moving)
            {
                this.posicionAnterior = this.Position;

                var lastPos = meshPersonaje.Position;

                movimiento            *= MovementSpeed * elapsedTime;
                meshPersonaje.Position = meshPersonaje.Position + movimiento;
                meshPersonaje.updateBoundingBox();

                //COLISIONES

                bool chocaron = escenario.tgcScene.Meshes.Any(mesh => TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, meshPersonaje.BoundingBox));
                if (chocaron)
                {
                    meshPersonaje.Position = lastPos;
                }

                bool chocoConMonster = TgcCollisionUtils.testAABBAABB(monster.ghost.BoundingBox, meshPersonaje.BoundingBox);
                if (chocoConMonster)
                {
                    meshPersonaje.Position = lastPos;
                }

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

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

            float rotY = input.XposRelative * rotationSpeed;
            float rotX = input.YposRelative * rotationSpeed;

            eye     = this.Position;
            target += movimiento;
            if (lockMouse)
            {
                if (rotY != 0.0f || rotX != 0.0f)
                {
                    look(rotX, rotY);
                }

                Cursor.Position = windowCenter;
            }
            this.SetCamera(eye, target);
        }
Beispiel #8
0
        /// <summary>
        ///     Se llama en cada frame.
        ///     Se debe escribir toda la lógica de computo del modelo, así como también verificar entradas del usuario y reacciones
        ///     ante ellas.
        /// </summary>
        public override void Update()
        {
            PreUpdate();

            //Coidigo Ejemplo de como capturar teclas

            /*//Capturar Input teclado
             * if (base.Input.keyPressed(Key.F))
             * {
             *  BoundingBox = !BoundingBox;
             * }*/
            if (Input.keyPressed(Key.C))
            {
                desfase.X -= 5;
            }
            if (Input.keyPressed(Key.V))
            {
                desfase.X += 5;
            }
            if (Input.keyPressed(Key.B))
            {
                desfase.Y -= 5;
            }
            if (Input.keyPressed(Key.N))
            {
                desfase.Y += 5;
            }
            if (Input.keyPressed(Key.H))
            {
                desfase.Z -= 5;
            }
            if (Input.keyPressed(Key.J))
            {
                desfase.Z += 5;
            }
            if (Input.keyPressed(Key.G))
            {
                if (dibujarGlow)
                {
                    dibujarGlow = false;
                }
                else
                {
                    dibujarGlow = true;
                }
            }

            if (Input.keyPressed(Key.M))
            {
                if (dibujarShadowMap)
                {
                    dibujarShadowMap = false;
                }
                else
                {
                    dibujarShadowMap = true;
                }
            }

            if (Input.keyPressed(Key.L))
            {
                if (dibujarLuces)
                {
                    dibujarLuces = false;
                }
                else
                {
                    dibujarLuces = true;
                }
            }


            if (Input.keyPressed(Key.E))
            {
                if (spawnaearEnemigos)
                {
                    spawnaearEnemigos = false;
                }
                else
                {
                    spawnaearEnemigos = true;
                }
            }

            if (Input.keyPressed(Key.T))
            {
                if (habilitarDisparosTorres)
                {
                    habilitarDisparosTorres = false;
                }
                else
                {
                    habilitarDisparosTorres = true;
                }
            }



            if (menu.estaEnMenu)
            {
                menu.Update(ElapsedTime);
                if (playerAmbiente.FileName != pathSonidoMenu)
                {
                    playerAmbiente.closeFile();
                    playerAmbiente.FileName = pathSonidoMenu;
                    playerAmbiente.play(true);
                }
                PostUpdate();
                return;
            }
            else
            {
                hud.Update(navePrincipal);
            }

            var movimientoNave = TGCVector3.Empty;

            if (!menu.estaEnMenu)
            {
                if (playerAmbiente.FileName != pathSonidoAmbiente)
                {
                    playerAmbiente.closeFile();
                    playerAmbiente.FileName = pathSonidoAmbiente;
                    playerAmbiente.play(true);
                }
                //Movernos de izquierda a derecha, sobre el eje X.
                if (Input.keyDown(Key.Left) || Input.keyDown(Key.A))
                {
                    movimientoNave.X = 1;
                }
                else if (Input.keyDown(Key.Right) || Input.keyDown(Key.D))
                {
                    movimientoNave.X = -1;
                }

                //Movimiento para elevarse con E y Control para bajar , todo sobre el eje Y.
                if (Input.keyDown(Key.W) || Input.keyDown(Key.UpArrow))
                {
                    movimientoNave.Y = 1;
                }
                else if (Input.keyDown(Key.S) || Input.keyDown(Key.DownArrow))
                {
                    movimientoNave.Y = -1;
                }

                //boost de velocidad con shift
                if (Input.keyDown(Key.LeftShift))
                {
                    navePrincipal.DoSpeedBoost();
                    if (navePrincipal.shouldSpeedBoost)
                    {
                        navePrincipal.GastarFuel(1.5f, hud);
                        if (movimientoZ > movimientoMaximoZ)
                        {
                            movimientoZ -= factorMovimientoZ * 3;
                        }
                        movimientoNave.Z = movimientoZ;
                        cant_pasadas     = 3;
                    }
                    else
                    {
                        movimientoNave.Z = movimientoBaseZ;
                    }
                }
                else
                {
                    cant_pasadas = 2;
                }



                if (movimientoZ < movimientoBaseZ)
                {
                    movimientoZ += factorMovimientoZ;
                }
                movimientoNave.Z = movimientoZ;

                //Activar rotaciones especiales
                if (Input.keyDown(Key.Space))
                {
                    this.navePrincipal.DoBarrelRoll();
                }

                if (Input.keyDown(Key.Z))
                {
                    this.navePrincipal.DoLeft90Spin();
                }

                if (Input.keyDown(Key.X))
                {
                    this.navePrincipal.DoRight90Spin();
                }

                //Disparar
                if (Input.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_LEFT))
                {
                    if (navePrincipal.Disparar(new TGCVector3((((D3DDevice.Instance.Width / 2) - Input.Xpos) * 10) + navePrincipal.MovementVector.X, navePrincipal.MovementVector.Y, navePrincipal.MovementVector.Z - 5000), pathSonidoDisparo, DirectSound.DsDevice))
                    {
                        //Aca va la posicion del disparo creo
                    }
                }
                if (Input.keyDown(Key.F))
                {
                    if (navePrincipal.Disparar(pathSonidoDisparo, DirectSound.DsDevice))
                    {
                    }
                }
                if (habilitarDisparosTorres)
                {
                    var torretasEnRango = currentScene.TorresEnRango(navePrincipal.GetPosition());
                    torretasEnRango.ForEach(torre => { torre.Disparar(navePrincipal.GetPosition(), pathSonidoDisparo, DirectSound.DsDevice); torre.Update(ElapsedTime); });
                }
            }
            NaveEnemiga.resetearPosiciones();

            if (!TgcCollisionUtils.testObbAABB(this.navePrincipal.OOB, currentScene.Scene.BoundingBox))
            {
                int nextSceneIndex = escenarios.FindIndex(es => es.Equals(currentScene)) + 1;

                if (nextSceneIndex == escenarios.Count)
                {
                    nextSceneIndex = 0;
                }

                currentScene.MoveScene(escenarios.Count);
                currentScene.MovementVector = currentScene.GetOffsetVectorMoved();
                currentScene.UpdateBoundingBox();
                currentScene = escenarios[nextSceneIndex];

                NaveEnemiga.resetearPosiciones();

                // enemigosAlMismoTiempo pueden modificarse para aumentar o disminuir la dificultad, tambien para el modo god
                if (spawnaearEnemigos)
                {
                    if (enemigos.FindAll(enemigo => enemigo.EstaViva() && enemigo.EnemigoEstaAdelante()).Count == 0)
                    {
                        enemigos.FindAll(enemigo => !enemigo.EstaViva() || !enemigo.EnemigoEstaAdelante()).ForEach(nave => nave.Relocate());
                    }
                }
            }

            // No permitir que se salga de los limites, el salto que hace para volver es medio brusco, se podria atenuar.
            movimientoNave -= TGCVector3.Multiply(currentScene.CheckLimits(navePrincipal, movimientoNave), 10);

            //Actualiza la matrix de movimiento de la nave.

            this.navePrincipal.Move(movimientoNave * ElapsedTime);
            this.navePrincipal.Update(ElapsedTime);
            if (spawnaearEnemigos)
            {
                enemigos.FindAll(enemigo => enemigo.EstaViva() && enemigo.EnemigoEstaAdelante()).ForEach(enemigo =>
                {
                    enemigo.Perseguir(ElapsedTime, pathSonidoDisparo, DirectSound.DsDevice);
                    enemigo.Update(ElapsedTime);
                }

                                                                                                         );
            }
            var naves = enemigos.FindAll(enemigo => enemigo.EstaViva() && enemigo.EnemigoEstaAdelante() && spawnaearEnemigos).Select(e => (NaveEspacial)e).ToList();

            naves.Add(navePrincipal);
            naves.ForEach(naveActual =>
            {
                //Colision de todas las naves contra el escenario.
                if (currentScene.CheckCollision(naveActual))
                {
                    naveActual.Morir();
                }

                naves.FindAll(n => n != naveActual).ForEach(otraNave =>
                {
                    //Colision fisica entre naves.
                    if (TgcCollisionUtils.testObbObb(naveActual.OOB, otraNave.OOB))
                    {
                        naveActual.Morir();
                        otraNave.Morir();
                    }

                    //Colision de disparos
                    if (naveActual.CheckIfMyShotsCollided(otraNave))
                    {
                        otraNave.Daniar(naveActual.ArmaPrincipal.Danio);
                    }
                });
                currentScene.TorresEnRango(navePrincipal.GetPosition()).ForEach(torre =>
                {
                    if (torre.CheckIfMyShotsCollided(naveActual))
                    {
                        naveActual.Daniar(torre.arma.Danio);
                    }
                });
            });

            if (!navePrincipal.EstaViva())
            {
                this.navePrincipal.MoveTo(new TGCVector3(1200f, -1100f, 4000f) + currentScene.GetOffsetVectorMoved());
                this.skyBox.Center = new TGCVector3(0, 0, -2300f) + currentScene.GetOffsetVectorMoved();
                this.navePrincipal.Revivir();
                this.sol.Position    = new TGCVector3(0, 5000f, 4000f) + currentScene.GetOffsetVectorMoved();
                this.menu.estaEnMenu = true;
            }


            this.skyBox.Center += movimientoNave * ElapsedTime * 1000;
            this.sol.Move(new TGCVector3(0, 0, movimientoNave.Z) * ElapsedTime * 1000);
            estrellasS.ForEach(e =>
            {
                e.Position += new TGCVector3(0, 0, movimientoNave.Z) * ElapsedTime * 1000;
            });

            (this.Camara as CamaraStarWars).Target = this.navePrincipal.GetPosition();

            PostUpdate();
        }
Beispiel #9
0
        /// <summary>
        ///     Se llama una sola vez, al principio cuando se ejecuta el ejemplo.
        ///     Escribir aquí todo el código de inicialización: cargar modelos, texturas, estructuras de optimización, todo
        ///     procesamiento que podemos pre calcular para nuestro juego.
        ///     Borrar el codigo ejemplo no utilizado.
        /// </summary>
        public override void Init()
        {
            estrellasS.ForEach(e => e.AutoTransform = true);
            CustomVertex.PositionTextured[] screenQuadVertices =
            {
                new CustomVertex.PositionTextured(-1,  1, 1, 0, 0),
                new CustomVertex.PositionTextured(1,   1, 1, 1, 0),
                new CustomVertex.PositionTextured(-1, -1, 1, 0, 1),
                new CustomVertex.PositionTextured(1,  -1, 1, 1, 1)
            };
            //vertex buffer de los triangulos
            screenQuadVB = new VertexBuffer(typeof(CustomVertex.PositionTextured), 4, D3DDevice.Instance.Device, Usage.Dynamic | Usage.WriteOnly,
                                            CustomVertex.PositionTextured.Format, Pool.Default);
            screenQuadVB.SetData(screenQuadVertices, 0, LockFlags.None);

            //Creamos un DepthStencil que debe ser compatible con nuestra definicion de renderTarget2D.
            depthStencil = D3DDevice.Instance.Device.CreateDepthStencilSurface(D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                                                                               D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, DepthFormat.D24S8, MultiSampleType.None, 0, true);

            depthStencilOld = D3DDevice.Instance.Device.DepthStencilSurface;


            escena = new Texture(D3DDevice.Instance.Device, D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                                 D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);

            propulsores = new Texture(D3DDevice.Instance.Device, D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                                      D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);

            propulsoresBlurAux = new Texture(D3DDevice.Instance.Device, D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                                             D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);

            propulsoresBlurAux2 = new Texture(D3DDevice.Instance.Device, D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                                              D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);

            //Device de DirectX para crear primitivas.
            var d3dDevice = D3DDevice.Instance.Device;

            D3DDevice.Instance.Device.Transform.Projection =
                Matrix.PerspectiveFovLH(D3DDevice.Instance.FieldOfView,
                                        D3DDevice.Instance.AspectRatio,
                                        D3DDevice.Instance.ZNearPlaneDistance,
                                        D3DDevice.Instance.ZFarPlaneDistance * 1.8f);

            this.postProcessMerge = TgcShaders.loadEffect(this.ShadersDir + "PostProcess.fx");
            this.blurEffect       = TgcShaders.loadEffect(this.ShadersDir + "GaussianBlur.fx");

            blurEffect.SetValue("screen_dx", d3dDevice.PresentationParameters.BackBufferWidth);
            blurEffect.SetValue("screen_dy", d3dDevice.PresentationParameters.BackBufferHeight);

            this.escenarios = new List <Escenario>();
            this.enemigos   = new List <NaveEnemiga>();

            //Crear SkyBox
            skyBox        = new TgcSkyBox();
            skyBox.Center = new TGCVector3(0, 0, -2300f);
            skyBox.Size   = new TGCVector3(10000, 10000, 18000);
            var texturesPath = MediaDir + "XWing\\Textures\\";

            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Up, texturesPath + "space.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Down, texturesPath + "space.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Left, texturesPath + "space.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Right, texturesPath + "space.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Front, texturesPath + "space.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Back, texturesPath + "space.jpg");

            skyBox.Init();

            this.navePrincipal                = new NaveEspacial(MediaDir, "xwing-TgcScene.xml", Color.DarkBlue, 10, 250, null, 250f);
            this.navePrincipal.ScaleFactor    = TGCMatrix.Scaling(0.5f, 0.5f, 0.5f);
            this.navePrincipal.RotationVector = new TGCVector3(0, FastMath.PI_HALF, 0);
            this.navePrincipal.MovementVector = new TGCVector3(1200f, -1100f, 4000f);


            for (int i = 0; i < 5; i++)
            {
                escenarios.Add(Escenario.GenerarEscenarioDefault(MediaDir, i));
            }

            for (int i = 0; i < enemigosAlMismoTiempo; i++)
            {
                enemigos.Add(new NaveEnemiga(MediaDir, "X-Wing-TgcScene.xml", dañoEnemigos, 500, navePrincipal));
                enemigos[i].MovementVector = new TGCVector3(0, 0, 500000000000f);
                enemigos[i].CreateOOB();
            }


            //escenarios.ForEach(es => es.generarTorre(MediaDir));
            currentScene = escenarios[0];

            this.navePrincipal.CreateOOB();
            //Suelen utilizarse objetos que manejan el comportamiento de la camara.
            //Lo que en realidad necesitamos gráficamente es una matriz de View.
            //El framework maneja una cámara estática, pero debe ser inicializada.
            //Posición de la camara.
            var cameraPosition = new TGCVector3(0, 0, 0);
            //Quiero que la camara mire hacia el origen (0,0,0).
            var lookAt = new TGCVector3(-50000, -1, 0);

            //Configuro donde esta la posicion de la camara y hacia donde mira.
            Camara.SetCamera(cameraPosition, lookAt);
            //Internamente el framework construye la matriz de view con estos dos vectores.
            //Luego en nuestro juego tendremos que crear una cámara que cambie la matriz de view con variables como movimientos o animaciones de escenas.

            Camara = new CamaraStarWars(this.navePrincipal.GetPosition(), 20, 100);

            sol = TGCBox.fromSize(new TGCVector3(0, 5000, 4000), new TGCVector3(50, 50, 50), Color.Yellow);
            sol.AutoTransform = true;
            menu = new Menu(MediaDir, Input);

            //Cargo sonidos
            pathSonidoMenu     = MediaDir + "Sound\\musica_menu.mp3";
            pathSonidoAmbiente = MediaDir + "Music\\StarWarsMusic.mp3";
            pathSonidoDisparo  = MediaDir + "Music\\laserSound.wav";

            if (menu.playSonidoMenu)
            {
                playerAmbiente.closeFile();
                playerAmbiente.FileName = pathSonidoMenu;
                playerAmbiente.play(true);
            }


            drawer = new Drawer2D();
            hud    = new Hud(MediaDir, Input);

            //ShadowMap

            // Creo el shadowmap.
            // Format.R32F
            // Format.X8R8G8B8
            g_pShadowMap = new Texture(D3DDevice.Instance.Device, SHADOWMAP_SIZE, SHADOWMAP_SIZE, 1, Usage.RenderTarget, Format.R32F, Pool.Default);

            // tengo que crear un stencilbuffer para el shadowmap manualmente
            // para asegurarme que tenga la el mismo tamano que el shadowmap, y que no tenga
            // multisample, etc etc.
            g_pDSShadow = D3DDevice.Instance.Device.CreateDepthStencilSurface(SHADOWMAP_SIZE, SHADOWMAP_SIZE, DepthFormat.D24S8, MultiSampleType.None, 0, true);
            // por ultimo necesito una matriz de proyeccion para el shadowmap, ya
            // que voy a dibujar desde el pto de vista de la luz.
            // El angulo tiene que ser mayor a 45 para que la sombra no falle en los extremos del cono de luz
            // de hecho, un valor mayor a 90 todavia es mejor, porque hasta con 90 grados es muy dificil
            // lograr que los objetos del borde generen sombras
            var aspectRatio = D3DDevice.Instance.AspectRatio;

            g_mShadowProj = TGCMatrix.PerspectiveFovLH(Geometry.DegreeToRadian(50), aspectRatio, 50, 15000);
            D3DDevice.Instance.Device.Transform.Projection = TGCMatrix.PerspectiveFovLH(Geometry.DegreeToRadian(45.0f), aspectRatio, near_plane, far_plane).ToMatrix();
        }
 public void CambiarEscenario(string name)
 {
     Escenario = Escenarios[name];
     Escenario.Reset();
 }
Beispiel #11
0
 public MonsterBlur(Escenario nuestra_scene, GameModel modelo)
 {
     escenario = nuestra_scene;
     gameModel = modelo;
 }
 public void CambiarEscenario(string nombre)
 {
     escenarioActual = escenarios[nombre];
 }