/// <summary>
 /// Seamlessly changes between two screens
 /// </summary>
 /// <param name="focusedScreen">Currently focused screen</param>
 /// <param name="exchangedFor">New screen</param>
 private static void SeamlesslyChangeScreen(MyGuiScreenBase focusedScreen, MyGuiScreenBase exchangedFor)
 {
     focusedScreen.SkipTransition = true;
     focusedScreen.CloseScreen();
     exchangedFor.SkipTransition = true;
     MyScreenManager.AddScreenNow(exchangedFor);
 }
        public override bool Update(bool hasFocus)
        {
            if (base.Update(hasFocus) == false)
            {
                return(false);
            }

            VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("MyGuiScreenLoading::Update()");
            if (this.State == MyGuiScreenState.OPENED)
            {
                if (!m_loadFinished)
                {
                    MyAudio.Static.Mute = true;
                    MyAudio.Static.StopMusic();
                    MyAudio.Static.VolumeMusic = 0f;
                    MyAudio.Static.VolumeGame  = 0f;
                    MyAudio.Static.VolumeHud   = 0f;
                    VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("LoadInBackgroundThread");

                    DrawLoading();

                    if (m_screenToLoad != null)
                    {
                        MySandboxGame.Log.WriteLine("RunLoadingAction - START");
                        RunLoad();
                        MySandboxGame.Log.WriteLine("RunLoadingAction - END");
                    }
                    if (m_screenToLoad != null)
                    {
                        //  Screen is loaded so now we can add it to other thread
                        MyScreenManager.AddScreenNow(m_screenToLoad);
                        m_screenToLoad.Update(false);
                    }

                    m_screenToLoad = null;

                    m_loadFinished = true;
                    m_wheel.ManualRotationUpdate = true;

                    VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock();
                }
            }

            if (m_loadFinished && MySandboxGame.IsGameReady)
            {
                if (!m_exceptionDuringLoad && OnScreenLoadingFinished != null)
                {
                    OnScreenLoadingFinished();
                    OnScreenLoadingFinished = null;
                }
                CloseScreenNow();
                DrawLoading();
            }

            VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock();

            return(true);
        }