grizzley90
22-12-2006 02:57:35
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 LoadingBarStart and LoadingBarFinish when you're done.
All you got to do is create an instance and call LoadingBarStart and LoadingBarFinish when you're done.
using System;
using Mogre;
/// <summary>
/// Loading Bar class
/// </summary>
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 LoadingBarStart()
{
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(LoadingBarResourceGroupScriptingStarted);
Mogre.ResourceGroupManager.Singleton.ScriptParseStarted += new Mogre.ResourceGroupListener.ScriptParseStartedHandler(LoadingBarScriptParseStarted);
Mogre.ResourceGroupManager.Singleton.ScriptParseEnded += new Mogre.ResourceGroupListener.ScriptParseEndedHandler(LoadingBarScriptParseEnded);
Mogre.ResourceGroupManager.Singleton.ResourceGroupLoadStarted += new Mogre.ResourceGroupListener.ResourceGroupLoadStartedHandler(LoadingBarResourceGroupLoadStarted);
Mogre.ResourceGroupManager.Singleton.ResourceLoadStarted += new Mogre.ResourceGroupListener.ResourceLoadStartedHandler(LoadingBarResourceLoadStarted);
Mogre.ResourceGroupManager.Singleton.WorldGeometryStageStarted += new Mogre.ResourceGroupListener.WorldGeometryStageStartedHandler(LoadingBarWorldGeometryStageStarted);
Mogre.ResourceGroupManager.Singleton.WorldGeometryStageEnded += new Mogre.ResourceGroupListener.WorldGeometryStageEndedHandler(LoadingBarWorldGeometryStageEnded);
}
public void LoadingBarFinish()
{
// hide loading screen
Mogre.OverlayManager.Singleton.GetByName("Core/LoadOverlay").Hide();
// Unregister listener
Mogre.ResourceGroupManager.Singleton.ResourceGroupScriptingStarted -= new Mogre.ResourceGroupListener.ResourceGroupScriptingStartedHandler(LoadingBarResourceGroupScriptingStarted);
Mogre.ResourceGroupManager.Singleton.ScriptParseStarted -= new Mogre.ResourceGroupListener.ScriptParseStartedHandler(LoadingBarScriptParseStarted);
Mogre.ResourceGroupManager.Singleton.ScriptParseEnded -= new Mogre.ResourceGroupListener.ScriptParseEndedHandler(LoadingBarScriptParseEnded);
Mogre.ResourceGroupManager.Singleton.ResourceGroupLoadStarted -= new Mogre.ResourceGroupListener.ResourceGroupLoadStartedHandler(LoadingBarResourceGroupLoadStarted);
Mogre.ResourceGroupManager.Singleton.ResourceLoadStarted -= new Mogre.ResourceGroupListener.ResourceLoadStartedHandler(LoadingBarResourceLoadStarted);
Mogre.ResourceGroupManager.Singleton.WorldGeometryStageStarted -= new Mogre.ResourceGroupListener.WorldGeometryStageStartedHandler(LoadingBarWorldGeometryStageStarted);
Mogre.ResourceGroupManager.Singleton.WorldGeometryStageEnded -= new Mogre.ResourceGroupListener.WorldGeometryStageEndedHandler(LoadingBarWorldGeometryStageEnded);
}
private void LoadingBarResourceGroupScriptingStarted(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 LoadingBarScriptParseStarted(string scriptName)
{
Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Comment").Caption = scriptName;
mWindow.Update();
}
private void LoadingBarScriptParseEnded()
{
Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width = (
Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width
+ mProgressBarInc);
mWindow.Update();
}
private void LoadingBarResourceGroupLoadStarted(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 LoadingBarResourceLoadStarted(Mogre.ResourcePtr resource)
{
Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Comment").Caption = resource.Name;
mWindow.Update();
}
private void LoadingBarWorldGeometryStageStarted(string description)
{
Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Comment").Caption = description;
mWindow.Update();
}
private void LoadingBarWorldGeometryStageEnded()
{
Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width = (
Mogre.OverlayManager.Singleton.GetOverlayElement("Core/LoadPanel/Bar/Progress").Width +
mProgressBarInc);
mWindow.Update();
}
}