Spinning Topp Logo BlackTopp Studios
inc
scenemanager.h
1 // © Copyright 2010 - 2016 BlackTopp Studios Inc.
2 /* This file is part of The Mezzanine Engine.
3 
4  The Mezzanine Engine is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  The Mezzanine Engine is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with The Mezzanine Engine. If not, see <http://www.gnu.org/licenses/>.
16 */
17 /* The original authors have included a copy of the license specified above in the
18  'Docs' folder. See 'gpl.txt'
19 */
20 /* We welcome the use of the Mezzanine engine to anyone, including companies who wish to
21  Build professional software and charge for their product.
22 
23  However there are some practical restrictions, so if your project involves
24  any of the following you should contact us and we will try to work something
25  out:
26  - DRM or Copy Protection of any kind(except Copyrights)
27  - Software Patents You Do Not Wish to Freely License
28  - Any Kind of Linking to Non-GPL licensed Works
29  - Are Currently In Violation of Another Copyright Holder's GPL License
30  - If You want to change our code and not add a few hundred MB of stuff to
31  your distribution
32 
33  These and other limitations could cause serious legal problems if you ignore
34  them, so it is best to simply contact us or the Free Software Foundation, if
35  you have any questions.
36 
37  Joseph Toppi - toppij@gmail.com
38  John Blackwood - makoenergy02@gmail.com
39 */
40 #ifndef _graphicsscenemanager_h
41 #define _graphicsscenemanager_h
42 
43 #include "quaternion.h"
44 #include "vector3.h"
45 #include "colourvalue.h"
46 #include "singleton.h"
47 
48 #include "uidgenerator.h"
49 #include "worldmanager.h"
50 #include "worldmanagerfactory.h"
51 
52 #include "Graphics/graphicsenumerations.h"
53 #ifndef SWIG
54  #include "XML/xml.h"
55 #endif
56 #include "Threading/workunit.h"
57 
58 namespace Ogre
59 {
60  class SceneManager;
61 }
62 
63 namespace Mezzanine
64 {
65  class Entresol;
66  class Plane;
67  namespace Graphics
68  {
69  class RenderableProxy;
70  class BillboardSetProxy;
71  class CameraProxy;
72  class EntityProxy;
73  class LightProxy;
74  class ParticleSystemProxy;
75  class SceneManager;
76  class SceneManagerData;
77  class Mesh;
78 
79  ///////////////////////////////////////////////////////////////////////////////
80  /// @brief This class contains utilities and functions to allow the manipulation of the Graphical
81  /// scene, rather then the physics inside, or the object inside.
82  /// @details This class contains functions that allow the manipulation of lighting, skyboxes, internal
83  /// scenemanager types, and more.
84  ///////////////////////////////////////
86  {
87  public:
88  /// @brief Basic container type for RenderableProxy storage by this class.
89  typedef std::vector< RenderableProxy* > ProxyContainer;
90  /// @brief Iterator type for RenderableProxy instances stored by this class.
91  typedef ProxyContainer::iterator ProxyIterator;
92  /// @brief Const Iterator type for RenderableProxy instances stored by this class.
93  typedef ProxyContainer::const_iterator ConstProxyIterator;
94 
95  /// @brief A String containing the name of this manager implementation.
96  static const String ImplementationName;
97  /// @brief A ManagerType enum value used to describe the type of interface/functionality this manager provides.
99 
100  /// @brief needs to be documented
102  { //Shadow Docs from Ogre ShadowTechnique Documentation.
103  SST_None = 0, ///< No shadows.
104  SST_Stencil_Modulative = 1, ///< Stencil shadow technique which renders all shadow volumes as a modulation after all the non-transparent areas have been rendered.
105  SST_Stencil_Additive = 2, ///< Stencil shadow technique which renders each light as a separate additive pass to the scene.
106  SST_Texture_Modulative = 11, ///< Texture-based shadow technique which involves a monochrome render-to-texture of the shadow caster and a projection of that texture onto the shadow receivers as a modulative pass.
107  SST_Texture_Additive = 12, ///< Texture-based shadow technique which involves a render-to-texture of the shadow caster and a projection of that texture onto the shadow receivers, built up per light as additive passes.
108  SST_Texture_Additive_Integrated = 13, ///< Texture-based shadow technique which involves a render-to-texture of the shadow caster and a projection of that texture on to the shadow receivers, with the usage of those shadow textures completely controlled by the materials of the receivers.
109  SST_Texture_Modulative_Integrated = 14 ///< Texture-based shadow technique which involves a render-to-texture of the shadow caster and a projection of that texture on to the shadow receivers, with the usage of those shadow textures completely controlled by the materials of the receivers.
110  };
111 
112  /// @brief Used to help identify which method is used to draw the sky, if any
114  {
115  SkyNone = 0, ///< No Sky rendering at all.
116  SkyPlane = 1, ///< A flat plane use to draw the sky.
117  SkyBox = 2, ///< A box using 5 Rectangles to draw the sky.
118  SkyDome = 3 ///< A multifaceted hemispherical dome, the most sophisticated sky background.
119  };
120  protected:
121  friend class TrackingNodeUpdateWorkUnit;
122 
123  /// @internal
124  /// @brief Generator responsible for creating unique IDs for CollidableProxy instances.
126  /// @internal
127  /// @brief Container storing all of the RenderableProxy instances created by this manager.
128  ProxyContainer Proxies;
129  /// @internal
130  /// @brief Pointer to a class storing sensative internal data for the scene.
132  /// @internal
133  /// @brief Can be used for thread safe logging and other thread specific resources.
135  public:
136  /// @brief Class Constructor.
137  /// @param Creator The parent world that is creating the manager.
138  /// @param InternalManagerTypeName The name of the scenemanager type to be constructed.
139  SceneManager(World* Creator, const String& InternalManagerTypeName = "DefaultSceneManager");
140  /// @brief XML constructor.
141  /// @param Creator The parent world that is creating the manager.
142  /// @param XMLNode The node of the xml document to construct from.
143  SceneManager(World* Creator, const XML::Node& XMLNode);
144  /// @brief Class destructor.
145  virtual ~SceneManager();
146 
147  ///////////////////////////////////////////////////////////////////////////////
148  // Shadow Management
149 
150  /// @brief Sets the type of shadows to be used when rendering the scene.
151  /// @details The scene manager defaults to no shadows.
152  /// @param Shadows The technique to be applied, see SceneShadowTechnique enum for more info.
153  void SetSceneShadowTechnique(SceneShadowTechnique Shadows);
154  /// @brief Gets the currently set shadow technique.
155  /// @return Returns a SceneShadowTechnique enum value representing the currently set shadow technique.
156  SceneShadowTechnique GetSceneShadowTechnique() const;
157  /// @brief Sets the number of textures to be alloted for creating shadows.
158  /// @details Defaults to 1.
159  /// @param Count The amount of textures to be used for creating texture-based shadows.
160  void SetShadowTextureCount(const Whole& Count);
161  /// @brief Gets the currently set number of textures being used to make texture shadows.
162  /// @return Returns a Whole indicating the number of textures used to make texture shadows.
163  Whole GetShadowTextureCount() const;
164  /// @brief Sets the size of all texture based shadows.
165  /// @details This defaults to 512. Sizes must be a power of 2.
166  /// @param Size The size of all textures to be used with shadows, in KB(?).
167  void SetShadowTextureSize(unsigned short Size);
168  /// @brief Retrieve the size of textures.
169  /// @return An unsigned short which is the size of the textures.
170  unsigned short GetShadowTextureSize() const;
171  /// @brief Sets the maximum distance from the camera that shadows will be visible.
172  /// @param FarDist The maximum distance from the camera shadows will be rendered.
173  void SetShadowFarDistance(const Real& FarDist);
174  /// @brief Gets the maximum distance from the camera that shadows will be visible.
175  /// @return Returns a Real representing the maximum distance from the camera shadows will be rendered.
176  Real GetShadowFarDistance() const;
177  /// @brief Sets the colour to be used when casting shadows.
178  /// @param ShadowColour The colour desired to be used when rendering shadows.
179  void SetShadowColour(const ColourValue& ShadowColour);
180  /// @brief Gets the colour being used when casting shadows.
181  /// @return Returns a ColourValue representing the colour used when casting shadows.
182  ColourValue GetShadowColour() const;
183 
184  ///////////////////////////////////////////////////////////////////////////////
185  // Sky Surface Management
186 
187  /// @brief Creates a skyplane for use in making a sky.
188  /// @details Only one skyplane can exist in a scene. Making a new one will remove the old one. Skyplanes are
189  /// flat planes that face in one direction. They are ideal for levels with surrounding mountains or anything
190  /// where the horizon is not visable.
191  /// @param SkyPlane The plane that will become the sky.
192  /// @param Material The name of the material to be applied to the skyplane. Note: This is not referring to the
193  /// filename, but the specific material script within the file.
194  /// @param Group The resource group where the material can be found.
195  /// @param Scale The scaling to be applied to the skyplane. This may need to be tweaked based on how high you
196  /// set the plane off the ground.
197  /// @param Tiling The number of times to tile the texture or textures listed in the material script across the skyplane.
198  /// @param DrawFirst Whether or not the skyplane should be the first thing rendered in the scene. Usually you will
199  /// want this to be true as it'll ensure all other objects are rendered on top of it.
200  /// @param Bow This will add curvature to the skyplane if set above zero. Note: Use small numbers. A bow of 1.5
201  /// should be noticable.
202  /// @param XSegments The number of segments, or boxes, the skyplane consists of on the planes X axis. This is usful
203  /// when giving the skyplane a bow. By default the skyplane is just one massive box.
204  /// @param YSegments The number of segments, or boxes, the skyplane consists of on the planes Y axis. This is usful
205  /// when giving the skyplane a bow. By default the skyplane is just one massive box.
206  void CreateSkyPlane(const Plane& SkyPlane_, const String& Material, const String& Group, Real Scale=1000.0, Real Tiling=10.0,
207  Boole DrawFirst=true, Real Bow=0, int XSegments=1, int YSegments=1);
208  /// @brief Disables the currently active skyplane.
209  /// @details Using this function effectively deletes the skyplane, so you will have to provide a new set of parameters
210  /// if you wish to re-create the skyplane.
211  void DisableSkyPlane();
212 
213  /// @brief Creates a skybox for use in making a sky.
214  /// @details Like skyplanes, only one can exist per scene. Unlike skyplanes, skyboxes will be applied individually to
215  /// each camera in the scene. The skybox will move with the camera, so as a result the camera will never be able to
216  /// "touch" the sky. Skyboxes are more performance intensive then skyplanes.
217  /// @param Material The name of the material to be applied to the skybox. Note: This is not referring to the
218  /// filename, but the specific material script within the file.
219  /// @param Group The resource group where the material can be found.
220  /// @param Distance The distance from the camera where the skybox is found. This is in world units.
221  /// @param DrawFirst Whether or not the skybox should be the first thing rendered in the scene. Usually you will
222  /// want this to be true as it'll ensure all other objects are rendered on top of it.
223  /// @param Orientation Optional quaternion to rotate the orientation of the skybox.
224  void CreateSkyBox(const String& Material, const String& Group, Real Distance, Boole DrawFirst=true, Quaternion Orientation=Quaternion());
225  /// @brief Disables the currently active skybox.
226  /// @details Using this function effectively deletes the skybox, so you will have to provide a new set of parameters
227  /// if you wish to re-create the skybox.
228  void DisableSkyBox();
229 
230  /// @brief Creates a skydome for use in making a sky.
231  /// @details Like the other two types of sky's, their can be only one skydome per scene. Skydomes much like skyboxes, except
232  /// they have 5 sides(the bottom side is missing), and they bow each of the sides to make the dome. In all other respects they
233  /// are the same.
234  /// @param Material The name of the material to be applied to the skydome. Note: This is not referring to the
235  /// filename, but the specific material script within the file.
236  /// @param Group The resource group where the material can be found.
237  /// @param Distance The distance from the camera where the skydome is found. This is in world units.
238  /// @param Curvature Curvature of the dome. Usually you want this value to be between 2 and 65.
239  /// @param Tiling The number of times to tile the texture or textures listed in the material script across the skydome.
240  /// @param DrawFirst Whether or not the skybox should be the first thing rendered in the scene. Usually you will
241  /// want this to be true as it'll ensure all other objects are rendered on top of it.
242  /// @param Orientation Optional quaternion to rotate the orientation of the skydome.
243  /// @param XSegments The number of segments, or boxes, the skydome consists of on the dome's X axis.
244  /// @param YSegments The number of segments, or boxes, the skydome consists of on the dome's Y axis.
245  void CreateSkyDome(const String& Material, const String& Group, Real Distance, Real Curvature=10.0, Real Tiling=8.0, Boole DrawFirst=true,
246  Quaternion Orientation=Quaternion(), int XSegments=16, int YSegments=16);
247  /// @brief Disables the currently active skydome.
248  /// @details Using this function effectively deletes the skydome, so you will have to provide a new set of parameters
249  /// if you wish to re-create the skydome.
250  void DisableSkyDome();
251 
252  /// @brief If any sky is active, disable it
253  void DisableSky();
254 
255  /// @brief get the kind of sy in use
256  /// @return The kind of sky in use
257  SkyMethod WhichSky() const;
258 
259  ///////////////////////////////////////////////////////////////////////////////
260  // Creating Proxies
261 
262  /// @brief Creates a new BillboardSetProxy with a pool size of 20.
263  /// @param AddToWorld Wether or not the new proxy should be added to the world after it has been created.
264  /// @return Returns a pointer to the created proxy.
265  BillboardSetProxy* CreateBillboardSetProxy(const Boole AddToWorld);
266  /// @brief Creates a new BillboardSetProxy.
267  /// @param InitialPoolSize The number of billboards to reserve space for. 20 is a sane default.
268  /// @param AddToWorld Wether or not the new proxy should be added to the world after it has been created.
269  /// @return Returns a pointer to the created proxy.
270  BillboardSetProxy* CreateBillboardSetProxy(const UInt32 InitialPoolSize, const Boole AddToWorld);
271  /// @brief Creates a new BillboardSetProxy.
272  /// @param SelfRoot An XML::Node containing the data to populate this class with.
273  /// @return Returns a pointer to the created proxy.
274  BillboardSetProxy* CreateBillboardSetProxy(const XML::Node& SelfRoot);
275 
276  /// @brief Creates a new camera.
277  /// @return Returns a pointer to the created camera.
278  CameraProxy* CreateCamera();
279  /// @brief Creates a new camera.
280  /// @param SelfRoot An XML::Node containing the data to populate this class with.
281  /// @return Returns a pointer to the created camera.
282  CameraProxy* CreateCamera(const XML::Node& SelfRoot);
283 
284  /// @brief Creates a new EntityProxy.
285  /// @param AddToWorld Wether or not the new proxy should be added to the world after it has been created.
286  /// @return Returns a pointer to the created proxy.
287  EntityProxy* CreateEntityProxy(const Boole AddToWorld);
288  /// @brief Creates a new EntityProxy.
289  /// @param TheMesh A pointer to the mesh to be applied to this proxy.
290  /// @param AddToWorld Wether or not the new proxy should be added to the world after it has been created.
291  /// @return Returns a pointer to the created proxy.
292  EntityProxy* CreateEntityProxy(Mesh* TheMesh, const Boole AddToWorld);
293  /// @brief Creates a new EntityProxy.
294  /// @param MeshName The name of the mesh to be loaded and applied to this proxy.
295  /// @param GroupName The resource group name where the mesh can be found.
296  /// @param AddToWorld Wether or not the new proxy should be added to the world after it has been created.
297  /// @return Returns a pointer to the created proxy.
298  EntityProxy* CreateEntityProxy(const String& MeshName, const String& GroupName, const Boole AddToWorld);
299  /// @brief Creates a new EntityProxy.
300  /// @param SelfRoot An XML::Node containing the data to populate this class with.
301  /// @return Returns a pointer to the created proxy.
302  EntityProxy* CreateEntityProxy(const XML::Node& SelfRoot);
303 
304  /// @brief Creates a new LightProxy.
305  /// @param AddToWorld Wether or not the new proxy should be added to the world after it has been created.
306  /// @return Returns a pointer to the created proxy.
307  LightProxy* CreateLightProxy(const Boole AddToWorld);
308  /// @brief Creates a new LightProxy.
309  /// @param Type The type of light this light is to be constructed as.
310  /// @param AddToWorld Wether or not the new proxy should be added to the world after it has been created.
311  /// @return Returns a pointer to the created proxy.
312  LightProxy* CreateLightProxy(const Graphics::LightType Type, const Boole AddToWorld);
313  /// @brief Creates a new LightProxy.
314  /// @param SelfRoot An XML::Node containing the data to populate this class with.
315  /// @return Returns a pointer to the created proxy.
316  LightProxy* CreateLightProxy(const XML::Node& SelfRoot);
317 
318  /// @brief Creates a new ParticleSystemProxy.
319  /// @param Template Name of the particle script to be used in creating this particle effect.
320  /// @param AddToWorld Wether or not the new proxy should be added to the world after it has been created.
321  /// @return Returns a pointer to the created proxy.
322  ParticleSystemProxy* CreateParticleSystemProxy(const String& Template, const Boole AddToWorld);
323  /// @brief Creates a new ParticleSystemProxy.
324  /// @param SelfRoot An XML::Node containing the data to populate this class with.
325  /// @return Returns a pointer to the created proxy.
326  ParticleSystemProxy* CreateParticleSystemProxy(const XML::Node& SelfRoot);
327 
328  ///////////////////////////////////////////////////////////////////////////////
329  // Proxy Management
330 
331  /// @brief Gets a RenderableProxy instance by index.
332  /// @param Index The index of the RenderableProxy to be retrieved.
333  /// @return Returns a pointer to the RenderableProxy at the specified index.
334  RenderableProxy* GetProxy(const UInt32 Index) const;
335  /// @brief Gets the n-th proxy of the specified type.
336  /// @note This manager only stores RenderableProxy types. As such, specifying a type of proxy that isn't derived from RenderableProxy will always return NULL.
337  /// @param Type The type of proxy to retrieve.
338  /// @param Which Which proxy of the specified type to retrieve.
339  /// @return Returns a pointer to the specified proxy, or NULL if there is no n-th proxy.
340  RenderableProxy* GetProxy(const Mezzanine::ProxyType Type, UInt32 Which) const;
341  /// @brief Gets the number of RenderableProxy instances in this manager.
342  /// @return Returns a UInt32 representing the number of RenderableProxy instances contained in this manager.
343  UInt32 GetNumProxies() const;
344  /// @brief Deletes a RenderableProxy.
345  /// @param ToBeDestroyed A pointer to the RenderableProxy you want deleted.
346  void DestroyProxy(RenderableProxy* ToBeDestroyed);
347  /// @brief Deletes all stored RenderableProxy instances.
348  void DestroyAllProxies();
349 
350  #ifndef SWIG
351  /// @brief Gets an iterator to the first Renderable Proxy in this manager.
352  /// @return Returns an iterator to the first Renderable Proxy being stored by this manager.
353  ProxyIterator BeginRenderableProxy();
354  /// @brief Gets an iterator to one passed the last Renderable Proxy in this manager.
355  /// @return Returns an iterator to one passed the last Renderable Proxy being stored by this manager.
356  ProxyIterator EndRenderableProxy();
357  /// @brief Gets a const iterator to the first Renderable Proxy in this manager.
358  /// @return Returns a const iterator to the first Renderable Proxy being stored by this manager.
359  ConstProxyIterator BeginRenderableProxy() const;
360  /// @brief Gets a const iterator to one passed the last Renderable Proxy in this manager.
361  /// @return Returns a const iterator to one passed the last Renderable Proxy being stored by this manager.
362  ConstProxyIterator EndRenderableProxy() const;
363  #endif
364 
365  ///////////////////////////////////////////////////////////////////////////////
366  // Light Management
367 
368  /// @brief Sets the ambient light for the scene.
369  /// @details Not all scene's will need ambient light. Ambient light is light that hits all objects from
370  /// all directions.
371  /// @param Red The value representing the amount of red color in the ambient light.
372  /// @param Green The value representing the amount of green color in the ambient light.
373  /// @param Blue The value representing the amount of blue color in the ambient light.
374  /// @param Alpha The value representing the transparency of the color in the ambient light.
375  void SetAmbientLight(Real Red=1.0, Real Green=1.0, Real Blue=1.0, Real Alpha=1.0);
376  /// @brief Sets the ambient light for the scene, in a single value.
377  /// @param Red The value representing the amount of red color in the ambient light.
378  void SetAmbientLight(const ColourValue &LightColor);
379  /// @brief Retrieve the level of the ambient light
380  /// @return A ColourValue with the ambient light levels
381  ColourValue GetAmbientLight() const;
382 
383  ///////////////////////////////////////////////////////////////////////////////
384  // Utility
385 
386  /// @brief Gets the name of this manager.
387  /// @return Returns the name of this manager.
388  ConstString& GetName() const;
389 
390  /// @brief Pauses(or unpauses) all particles stored in this manager.
391  /// @param Pause Will pause all Particles if true, unpause if false.
392  void PauseAllParticles(Boole Pause);
393 
394  /// @copydoc WorldManager::Pause(const UInt32)
395  virtual void Pause(const UInt32 PL);
396 
397  /// @copydoc WorldManager::Initialize()
398  virtual void Initialize();
399  /// @copydoc ManagerBase::Deinitialize()
400  virtual void Deinitialize();
401 
402  ///////////////////////////////////////////////////////////////////////////////
403  // Type Identifier Methods
404 
405  /// @copydoc ManagerBase::GetInterfaceType()
406  virtual ManagerType GetInterfaceType() const;
407  /// @copydoc ManagerBase::GetImplementationTypeName()
408  virtual String GetImplementationTypeName() const;
409 
410  ///////////////////////////////////////////////////////////////////////////////
411  // Internal/Other
412 
413  /// @internal
414  /// @brief Gets the internal Ogre Scene Manager pointer.
415  /// @return Returns a pointer to the ogre Scene Manager.
416  Ogre::SceneManager* _GetGraphicsWorldPointer() const;
417  /// @internal
418  /// @brief Gets the raw internal internal data.
419  /// @return Returns a to the raw internal data.
420  SceneManagerData* _GetRawInternalDataPointer() const;
421  };//SceneManager
422 
423  ///////////////////////////////////////////////////////////////////////////////
424  /// @class DefaultSceneManagerFactory
425  /// @brief A factory responsible for the creation and destruction of the default scenemanager.
426  ///////////////////////////////////////
428  {
429  public:
430  /// @brief Class constructor.
432  /// @brief Class destructor.
433  virtual ~DefaultSceneManagerFactory();
434 
435  /// @copydoc ManagerFactory::GetManagerImplName()
436  String GetManagerImplName() const;
437  /// @copydoc ManagerFactory::GetManagerType() const
438  ManagerBase::ManagerType GetManagerType() const;
439 
440  /// @copydoc WorldManagerFactory::CreateManager(World*, const NameValuePairList&)
441  WorldManager* CreateManager(World* Creator, const NameValuePairList& Params);
442  /// @copydoc WorldManagerFactory::CreateManager(World*, const XML::Node&)
443  WorldManager* CreateManager(World* Creator, const XML::Node& XMLNode);
444  /// @copydoc WorldManagerFactory::DestroyManager(WorldManager*)
445  void DestroyManager(WorldManager* ToBeDestroyed);
446  };//DefaultSceneManagerFactory
447  }//Graphics
448 }//Mezzanine
449 
450 ///////////////////////////////////////////////////////////////////////////////
451 // Class External << Operators for streaming or assignment
452 /// @brief Serializes the passed Mezzanine::Graphics::SceneManager to XML
453 /// @param stream The ostream to send the xml to.
454 /// @param Ev the Mezzanine::Graphics::SceneManager to be serialized
455 /// @return this returns the ostream, now with the serialized data
456 std::ostream& MEZZ_LIB operator << (std::ostream& stream, const Mezzanine::Graphics::SceneManager& Ev);
457 
458 /// @brief Deserialize a Mezzanine::Graphics::SceneManager
459 /// @param stream The istream to get the xml from to (re)make the Mezzanine::Graphics::SceneManager.
460 /// @param Ev the Mezzanine::Graphics::SceneManager to be deserialized.
461 /// @return this returns the ostream, advanced past the Mezzanine::Graphics::SceneManager that was recreated onto Ev.
462 std::istream& MEZZ_LIB operator >> (std::istream& stream, Mezzanine::Graphics::SceneManager& Ev);
463 
464 /// @brief Set all values of a Mezzanine::Graphics::SceneManager from parsed xml.
465 /// @param OneNode The istream to get the xml from to (re)make the Mezzanine::Graphics::SceneManager.
466 /// @param Ev the Mezzanine::Graphics::SceneManager to be reset.
467 /// @return This returns the XML::Node that was passed in.
469 
470 
471 #endif
std::ostream & operator<<(std::ostream &stream, const Mezzanine::LinearInterpolator< T > &Lint)
Used to Serialize an Mezzanine::LinearInterpolator to a human readable stream.
Definition: interpolator.h:433
LightType
This is used by LightProxies to describe how light is emitted from the proxy source.
SceneShadowTechnique
needs to be documented
Definition: scenemanager.h:101
SceneManagerData * SMD
Pointer to a class storing sensative internal data for the scene.
Definition: scenemanager.h:131
bool Boole
Generally acts a single bit, true or false.
Definition: datatypes.h:173
This class contains utilities and functions to allow the manipulation of the Graphical scene...
Definition: scenemanager.h:85
ManagerType
A listing of Manager Types.
Definition: managerbase.h:65
This class is used to check and modify the properties of a graphics mesh.
Definition: mesh.h:63
UIDGenerator ProxyIDGen
Generator responsible for creating unique IDs for CollidableProxy instances.
Definition: scenemanager.h:125
This is the base proxy class for world proxies wrapping functionality of the graphics subsystem...
This is the proxy class for placing and manipulating a mesh in the scene.
Definition: entityproxy.h:62
This is a simple class for holding 4 reals representing the colour any give object or lightsource can...
Definition: colourvalue.h:64
static const ManagerBase::ManagerType InterfaceType
A ManagerType enum value used to describe the type of interface/functionality this manager provides...
Definition: scenemanager.h:98
This is used to represent a flat infinite slice of the game world.
Definition: plane.h:65
This is the proxy class for placing and manipulating a set of 2D billboards in the scene...
float Real
A Datatype used to represent a real floating point number.
Definition: datatypes.h:141
ProxyContainer Proxies
Container storing all of the RenderableProxy instances created by this manager.
Definition: scenemanager.h:128
A thread specific collection of double-buffered and algorithm specific resources. ...
static const String ImplementationName
A String containing the name of this manager implementation.
Definition: scenemanager.h:96
This class will generate keep track of a pool of unique 32-bit ID's that can be used for distinct obj...
Definition: uidgenerator.h:53
A light-weight handle for manipulating nodes in DOM tree.
Definition: node.h:89
const String ConstString
A Datatype used to a series of imutable characters.
Definition: datatypes.h:165
ProxyType
Used by all World proxies to describe what their derived types are.
Definition: enumerations.h:91
uint32_t UInt32
An 32-bit unsigned integer.
Definition: datatypes.h:126
Stores internal data for the SCeneManager to keep it from cluttering the Header file.
std::list< NameValuePair > NameValuePairList
This is a datatype mostly used for describing settings or parameters that can't be declared in advanc...
Definition: datatypes.h:206
This is the base class for all managers that belong to a single world instance.
Definition: worldmanager.h:55
This is the proxy class for placing and manipulating a camera in the scene.
Definition: cameraproxy.h:65
A factory responsible for the creation and destruction of the default scenemanager.
Definition: scenemanager.h:427
This is the proxy class for placing and manipulating particles in the scene.
Threading::DefaultThreadSpecificStorage::Type * ThreadResources
Can be used for thread safe logging and other thread specific resources.
Definition: scenemanager.h:134
#define MEZZ_LIB
Some platforms require special decorations to denote what is exported/imported in a share library...
The bulk of the engine components go in this namspace.
Definition: actor.cpp:56
This is the proxy class for placing and manipulating lighting in the scene.
Definition: lightproxy.h:63
unsigned long Whole
Whole is an unsigned integer, it will be at least 32bits in size.
Definition: datatypes.h:151
std::istream & operator>>(std::istream &stream, Mezzanine::LinearInterpolator< T > &Lint)
Used to de-serialize an Mezzanine::LinearInterpolator from a stream.
Definition: interpolator.h:448
This class represents a world for objects to interact within.
Definition: world.h:74
This is a base class for factories that construct managers used by the World class.
This is used to store information about rotation in 3d space.
Definition: quaternion.h:68
std::vector< RenderableProxy * > ProxyContainer
Basic container type for RenderableProxy storage by this class.
Definition: scenemanager.h:89
SkyMethod
Used to help identify which method is used to draw the sky, if any.
Definition: scenemanager.h:113
ProxyContainer::iterator ProxyIterator
Iterator type for RenderableProxy instances stored by this class.
Definition: scenemanager.h:91
ProxyContainer::const_iterator ConstProxyIterator
Const Iterator type for RenderableProxy instances stored by this class.
Definition: scenemanager.h:93
This class represents all the rendering passes a rendered object has.
Definition: material.h:65
std::string String
A datatype used to a series of characters.
Definition: datatypes.h:159
This file has the definition of the workunit.