Esempio n. 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();
        }