MOGRE LoadingBarExample        

Note: This code is a little out of date and doesn't say that the bootstrap resource group has to be loaded before getting the LoadOverlay from the OverlayManager. Better use the LoadingBar.cs from the ExampleApplication project located in the Mogre-Samples folder.

Here is a loading bar class for you all to enjoy. I translated it off the ogre example loading bar.

All you got to do is create an instance and call Start() and Finish() when you're done.

using System;
 using Mogre;
 public class LoadingBar
 {
    Mogre.RenderWindow mWindow = null;
    public LoadingBar(Mogre.RenderWindow win)
    {
        mWindow = win;
    }
    private uint mNumGroupsInit = 1;
    private uint mNumGroupsLoad = 1;
    private float mInitProportion = 0.70f;
    private float mProgressBarMaxSize;
    private float mProgressBarInc;
    public void Start()
    {
        Mogre.OverlayManager.Singleton.GetByName("Core/LoadOverlay").Show();
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width = 0;
        mProgressBarMaxSize = Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar").Width;
        Mogre.ResourceGroupManager.Singleton.ResourceGroupScriptingStarted += new Mogre.ResourceGroupListener.ResourceGroupScriptingStartedHandler(ResourceGroupScriptingStarted);
        Mogre.ResourceGroupManager.Singleton.ScriptParseStarted += new Mogre.ResourceGroupListener.ScriptParseStartedHandler(ScriptParseStarted);
        Mogre.ResourceGroupManager.Singleton.ScriptParseEnded += new Mogre.ResourceGroupListener.ScriptParseEndedHandler(ScriptParseEnded);
        Mogre.ResourceGroupManager.Singleton.ResourceGroupLoadStarted += new Mogre.ResourceGroupListener.ResourceGroupLoadStartedHandler(ResourceGroupLoadStarted);
        Mogre.ResourceGroupManager.Singleton.ResourceLoadStarted += new Mogre.ResourceGroupListener.ResourceLoadStartedHandler(ResourceLoadStarted);
        Mogre.ResourceGroupManager.Singleton.ResourceLoadEnded += new Mogre.ResourceGroupListener.ResourceLoadEndedHandler(ResourceLoadEnded);
        Mogre.ResourceGroupManager.Singleton.WorldGeometryStageStarted += new Mogre.ResourceGroupListener.WorldGeometryStageStartedHandler(WorldGeometryStageStarted);
        Mogre.ResourceGroupManager.Singleton.WorldGeometryStageEnded += new Mogre.ResourceGroupListener.WorldGeometryStageEndedHandler(WorldGeometryStageEnded);
    }
    public void Finish()
    {
        // hide loading screen
        Mogre.OverlayManager.Singleton.GetByName("Core/LoadOverlay").Hide();
        // Unregister listener
        Mogre.ResourceGroupManager.Singleton.ResourceGroupScriptingStarted -= new Mogre.ResourceGroupListener.ResourceGroupScriptingStartedHandler(ResourceGroupScriptingStarted);
        Mogre.ResourceGroupManager.Singleton.ScriptParseStarted -= new Mogre.ResourceGroupListener.ScriptParseStartedHandler(ScriptParseStarted);
        Mogre.ResourceGroupManager.Singleton.ScriptParseEnded -= new Mogre.ResourceGroupListener.ScriptParseEndedHandler(ScriptParseEnded);
        Mogre.ResourceGroupManager.Singleton.ResourceGroupLoadStarted -= new Mogre.ResourceGroupListener.ResourceGroupLoadStartedHandler(ResourceGroupLoadStarted);
        Mogre.ResourceGroupManager.Singleton.ResourceLoadStarted -= new Mogre.ResourceGroupListener.ResourceLoadStartedHandler(ResourceLoadStarted);
        Mogre.ResourceGroupManager.Singleton.ResourceLoadEnded -= new Mogre.ResourceGroupListener.ResourceLoadEndedHandler(ResourceLoadEnded);
        Mogre.ResourceGroupManager.Singleton.WorldGeometryStageStarted -= new Mogre.ResourceGroupListener.WorldGeometryStageStartedHandler(WorldGeometryStageStarted);
        Mogre.ResourceGroupManager.Singleton.WorldGeometryStageEnded -= new Mogre.ResourceGroupListener.WorldGeometryStageEndedHandler(WorldGeometryStageEnded);
    }
    private void ResourceGroupScriptingStarted(string groupName, uint scriptCount)
    {
        // Lets assume script loading is 70%
        mProgressBarInc = mProgressBarMaxSize * mInitProportion / (float)scriptCount;
        mProgressBarInc /= mNumGroupsInit;
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Description").Caption = "Parsing scripts...";
        mWindow.Update();
    }
    private void ScriptParseStarted(string scriptName)
    {
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Comment").Caption = scriptName;
        mWindow.Update();
    }
    private void ScriptParseEnded()
    {
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width = (
            Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width
            + mProgressBarInc);
        mWindow.Update();
    }
    private void ResourceGroupLoadStarted(string groupName, uint resourceCount)
    {
        mProgressBarInc = mProgressBarMaxSize * (1 - mInitProportion) /
        (float)resourceCount;
        mProgressBarInc /= mNumGroupsLoad;
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Description").Caption = "Loading resources...";
        mWindow.Update();
    }
    private void ResourceLoadStarted(Mogre.ResourcePtr resource)
    {
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Comment").Caption = resource.Name;
        mWindow.Update();
    }
    private void ResourceLoadEnded()
    {
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width = (
            Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width
            + mProgressBarInc);
        mWindow.Update();
    }
    private void WorldGeometryStageStarted(string description)
    {
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Comment").Caption = description;
        mWindow.Update();
    }
    private void WorldGeometryStageEnded()
    {
        Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width = (
            Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width +
            mProgressBarInc);
        mWindow.Update();
    }
 }