예제 #1
0
        public override void Render()
        {
            //Inicio el render de la escena, para ejemplos simples. Cuando tenemos postprocesado o shaders es mejor realizar las operaciones según nuestra conveniencia.

            PreRender();
            if (estaEnMenu)
            {
                drawer2D.BeginDrawSprite();
                drawer2D.DrawSprite(menu);
                drawer2D.EndDrawSprite();
                reproducirSonido("st.mp3");
            }
            if (finDePartida)
            {
                System.Drawing.Font font = new System.Drawing.Font("Arial", 15, FontStyle.Bold);
                DrawText.changeFont(font);
                DrawText.drawText("HAS PERDIDO", D3DDevice.Instance.Width / 2, D3DDevice.Instance.Height / 2, Color.OrangeRed);
            }
            if (!estaEnMenu && !finDePartida)
            {
                //DrawText.drawText("[G]-Habilita GodMod ", 0, 20, Color.OrangeRed);
                //DrawText.drawText("Posicion camara actual: " + TgcParserUtils.printVector3(Camara.Position), 0, 150, Color.Blue);
                //DrawText.drawText(luz.getNombreYEnergia(), 0, 90, Color.Blue);
                drawer2D.BeginDrawSprite();

                //Dibujar sprite (si hubiese mas, deberian ir todos aquí)
                drawer2D.DrawSprite(barra);
                drawer2D.DrawSprite(energia);

                //Finalizar el dibujado de Sprites
                drawer2D.EndDrawSprite();
                #region ComentoCheckPoint
                DrawText.drawText("Checkpoint Id: " + DestinoMonstruo.id, 0, 40, Color.OrangeRed);
                //DESCOMENTAR PARA VER EL CAMINO
                CheckpointHelper.renderAll();
                #endregion
                if (!activoVisionNoctura)
                {
                    foreach (var mesh in meshEscenario)
                    {
                        //Nos ocupamos solo de las mallas habilitadas
                        if (mesh.Enabled)
                        {
                            //Solo mostrar la malla si colisiona contra el Frustum
                            var r = TgcCollisionUtils.classifyFrustumAABB(Frustum, mesh.BoundingBox);
                            if (r != TgcCollisionUtils.FrustumResult.OUTSIDE)
                            {
                                if (flagGod)
                                {
                                    luz.deshabilitarEfecto(mesh);
                                }
                                else
                                {
                                    luz.aplicarEfecto(mesh, Camara.Position, direccionLookAt);
                                }
                                mesh.render();
                            }
                        }
                    }
                    if (monstruo.Enabled)
                    {
                        var r = TgcCollisionUtils.classifyFrustumAABB(Frustum, monstruo.BoundingBox);
                        if (r != TgcCollisionUtils.FrustumResult.OUTSIDE)
                        {
                            if (flagGod)
                            {
                                luz.deshabilitarEfecto(monstruo);
                            }
                            else
                            {
                                luz.aplicarEfecto(monstruo, Camara.Position, direccionLookAt);
                            }
                        }
                    }
                    monstruo.animateAndRender(ElapsedTime);
                }
                else
                {
                    visionNoctura();
                    D3DDevice.Instance.Device.BeginScene();
                }
            }
            //Finaliza el render y presenta en pantalla, al igual que el preRender se debe para casos puntuales es mejor utilizar a mano las operaciones de EndScene y PresentScene
            PostRender();
        }
예제 #2
0
        public override void Init()
        {
            //Para la creacion de checkpoints, borrar en el futuro
            System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
            customCulture.NumberFormat.NumberDecimalSeparator = ".";

            System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;

            Clipboard.Clear();
            this.inicializarCamara();
            //Seteo el personaje
            seteoDePersonaje();
            //Seteo del monsturo
            seteoDelMonstruo();
            //Seteo el escenario
            escenario = new TgcSceneLoader().loadSceneFromFile(MediaDir + "Mapa\\mapaProjectMarble-TgcScene.xml");

            //initPuertaGiratoria();
            //Almacenar volumenes de colision del escenario
            objetosColisionables.Clear();
            CollisionManager.obstaculos = new List <BoundingBoxCollider>();
            foreach (var mesh in escenario.Meshes)
            {
                if (mesh.Name.Contains("Recarga"))
                {
                    BoundingBoxCollider recarga = BoundingBoxCollider.fromBoundingBox(mesh.BoundingBox);
                    string[]            nombre  = Regex.Split(mesh.Name, "-");
                    recarga.nombre = nombre[1];
                    recarga.mesh   = mesh;
                    objetosRecarga.Add(recarga);
                }
                else
                {
                    if (mesh.Name.Contains("Puerta"))
                    {
                        mesh.AutoTransformEnable = true;
                        BoundingBoxCollider puerta = BoundingBoxCollider.fromBoundingBox(mesh.BoundingBox);
                        puertas.Add(puerta);
                    }
                    if (mesh.Name.Contains("Placard") || mesh.Name.Contains("Locker"))
                    {
                        armarios.Add(BoundingBoxCollider.fromBoundingBox(mesh.BoundingBox));
                    }
                    BoundingBoxCollider obj = BoundingBoxCollider.fromBoundingBox(mesh.BoundingBox);
                    obj.nombre = mesh.Name;
                    objetosColisionables.Add(obj);
                    CollisionManager.obstaculos.Add(BoundingBoxCollider.fromBoundingBox(mesh.BoundingBox));
                }
                meshEscenario.Add(mesh);
            }
            CheckpointHelper.BuildCheckpoints();
            DestinoMonstruo = CheckpointHelper.checkpoints[0];

            //Crear manejador de colisiones
            collisionManager                    = new ElipsoidCollisionManager();
            collisionManager.SlideFactor        = 2;
            collisionManager.GravityEnabled     = false;
            colisionadorMonstruo                = new ElipsoidCollisionManager();
            colisionadorMonstruo.SlideFactor    = 2;
            colisionadorMonstruo.GravityEnabled = false;
            drawer2D = new Drawer2D();
            this.incializarMenu();
            inicializarPantallaNegra();
            mp3Player = new TgcMp3Player();
            inicializarBarra();
            iniciliazarAlarma();
            incializarVisionNoctura();
            luz = new Linterna();
        }