/usr/include/OGRE/ExampleLoadingBar.h is in libogre-dev 1.7.4-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | /*
-----------------------------------------------------------------------------
This source file is part of OGRE
(Object-oriented Graphics Rendering Engine)
For the latest info, see http://www.ogre3d.org/
Copyright (c) 2000-2011 Torus Knot Software Ltd
Also see acknowledgements in Readme.html
You may use this sample code for anything you like, it is not covered by the
same license as the rest of the engine.
-----------------------------------------------------------------------------
*/
/*
-----------------------------------------------------------------------------
Filename: ExampleLoadingBar.h
Description: Defines an example loading progress bar which you can use during
startup, level changes etc to display loading progress.
IMPORTANT: Note that this progress bar relies on you having the OgreCore.zip
package already added to a resource group called 'Bootstrap' - this provides
the basic resources required for the progress bar and will be loaded automatically.
*/
#include "OgreResourceGroupManager.h"
#include "OgreException.h"
#include "OgreOverlay.h"
#include "OgreOverlayManager.h"
#include "OgreRenderWindow.h"
using namespace Ogre;
/** Defines an example loading progress bar which you can use during
startup, level changes etc to display loading progress.
@remarks
Basically you just need to create an instance of this class, call start()
before loading and finish() afterwards. You may also need to stop areas of
your scene rendering in between since this method will call
RenderWindow::update() to update the display of the bar - we advise using
SceneManager's 'special case render queues' for this, see
SceneManager::addSpecialCaseRenderQueue for details.
@note
This progress bar relies on you having the OgreCore.zip package already
added to a resource group called 'Bootstrap' - this provides the basic
resources required for the progress bar and will be loaded automatically.
*/
class ExampleLoadingBar : public ResourceGroupListener
{
protected:
RenderWindow* mWindow;
Overlay* mLoadOverlay;
Real mInitProportion;
unsigned short mNumGroupsInit;
unsigned short mNumGroupsLoad;
Real mProgressBarMaxSize;
Real mProgressBarScriptSize;
Real mProgressBarInc;
OverlayElement* mLoadingBarElement;
OverlayElement* mLoadingDescriptionElement;
OverlayElement* mLoadingCommentElement;
public:
ExampleLoadingBar() {}
virtual ~ExampleLoadingBar(){}
/** Show the loading bar and start listening.
@param window The window to update
@param numGroupsInit The number of groups you're going to be initialising
@param numGroupsLoad The number of groups you're going to be loading
@param initProportion The proportion of the progress which will be taken
up by initialisation (ie script parsing etc). Defaults to 0.7 since
script parsing can often take the majority of the time.
*/
virtual void start(RenderWindow* window,
unsigned short numGroupsInit = 1,
unsigned short numGroupsLoad = 1,
Real initProportion = 0.70f)
{
mWindow = window;
mNumGroupsInit = numGroupsInit;
mNumGroupsLoad = numGroupsLoad;
mInitProportion = initProportion;
// We need to pre-initialise the 'Bootstrap' group so we can use
// the basic contents in the loading screen
ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
OverlayManager& omgr = OverlayManager::getSingleton();
mLoadOverlay = (Overlay*)omgr.getByName("Core/LoadOverlay");
if (!mLoadOverlay)
{
OGRE_EXCEPT(Exception::ERR_ITEM_NOT_FOUND,
"Cannot find loading overlay", "ExampleLoadingBar::start");
}
mLoadOverlay->show();
// Save links to the bar and to the loading text, for updates as we go
mLoadingBarElement = omgr.getOverlayElement("Core/LoadPanel/Bar/Progress");
mLoadingCommentElement = omgr.getOverlayElement("Core/LoadPanel/Comment");
mLoadingDescriptionElement = omgr.getOverlayElement("Core/LoadPanel/Description");
OverlayElement* barContainer = omgr.getOverlayElement("Core/LoadPanel/Bar");
mProgressBarMaxSize = barContainer->getWidth();
mLoadingBarElement->setWidth(0);
// self is listener
ResourceGroupManager::getSingleton().addResourceGroupListener(this);
}
/** Hide the loading bar and stop listening.
*/
virtual void finish(void)
{
// hide loading screen
mLoadOverlay->hide();
// Unregister listener
ResourceGroupManager::getSingleton().removeResourceGroupListener(this);
}
// ResourceGroupListener callbacks
void resourceGroupScriptingStarted(const String& groupName, size_t scriptCount)
{
assert(mNumGroupsInit > 0 && "You stated you were not going to init "
"any groups, but you did! Divide by zero would follow...");
// Lets assume script loading is 70%
mProgressBarInc = mProgressBarMaxSize * mInitProportion / (Real)scriptCount;
mProgressBarInc /= mNumGroupsInit;
mLoadingDescriptionElement->setCaption("Parsing scripts...");
mWindow->update();
}
void scriptParseStarted(const String& scriptName, bool &skipThisScript)
{
mLoadingCommentElement->setCaption(scriptName);
mWindow->update();
}
void scriptParseEnded(const String& scriptName, bool skipped)
{
mLoadingBarElement->setWidth(
mLoadingBarElement->getWidth() + mProgressBarInc);
mWindow->update();
}
void resourceGroupScriptingEnded(const String& groupName)
{
}
void resourceGroupLoadStarted(const String& groupName, size_t resourceCount)
{
assert(mNumGroupsLoad > 0 && "You stated you were not going to load "
"any groups, but you did! Divide by zero would follow...");
mProgressBarInc = mProgressBarMaxSize * (1-mInitProportion) /
(Real)resourceCount;
mProgressBarInc /= mNumGroupsLoad;
mLoadingDescriptionElement->setCaption("Loading resources...");
mWindow->update();
}
void resourceLoadStarted(const ResourcePtr& resource)
{
mLoadingCommentElement->setCaption(resource->getName());
mWindow->update();
}
void resourceLoadEnded(void)
{
}
void worldGeometryStageStarted(const String& description)
{
mLoadingCommentElement->setCaption(description);
mWindow->update();
}
void worldGeometryStageEnded(void)
{
mLoadingBarElement->setWidth(
mLoadingBarElement->getWidth() + mProgressBarInc);
mWindow->update();
}
void resourceGroupLoadEnded(const String& groupName)
{
}
Ogre::DataStreamPtr resourceLoading(const String &name, const String &group, Resource *resource)
{
return Ogre::DataStreamPtr();
}
bool resourceCollision(ResourcePtr &resource, ResourceManager *resourceManager)
{
return false;
}
};
|