Commit f64b0063 authored by hybrid's avatar hybrid

Add access and changeability to internal Randomizer.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@3864 dfc29bdd-3216-0410-991c-e03cc46cb475
parent f3310313
// Copyright (C) 2002-2011 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_RANDOMIZER_H_INCLUDED__
#define __I_RANDOMIZER_H_INCLUDED__
#include "IReferenceCounted.h"
namespace irr
{
//! Interface for generating random numbers
class IRandomizer : public virtual IReferenceCounted
{
public:
//! resets the randomizer
/** \param value Initialization value (seed) */
virtual void reset(s32 value=0x0f0f0f0f) =0;
//! generates a pseudo random number in the range 0..randMax()
virtual s32 rand() const =0;
//! generates a pseudo random number in the range 0..1
virtual f32 frand() const =0;
//! get maxmimum number generated by rand()
virtual s32 randMax() const =0;
};
} // end namespace irr
#endif
...@@ -20,6 +20,7 @@ namespace irr ...@@ -20,6 +20,7 @@ namespace irr
{ {
class ILogger; class ILogger;
class IEventReceiver; class IEventReceiver;
class IRandomizer;
namespace io { namespace io {
class IFileSystem; class IFileSystem;
...@@ -131,6 +132,22 @@ namespace irr ...@@ -131,6 +132,22 @@ namespace irr
\return Pointer to the ITimer object. */ \return Pointer to the ITimer object. */
virtual ITimer* getTimer() = 0; virtual ITimer* getTimer() = 0;
//! Provides access to the engine's currently set randomizer.
/** \return Pointer to the IRandomizer object. */
virtual IRandomizer* getRandomizer() const =0;
//! Sets a new randomizer.
/** \param r Pointer to the new IRandomizer object. This object is
grab()'ed by the engine and will be released upon the next setRandomizer
call or upon device destruction. */
virtual void setRandomizer(IRandomizer* r) =0;
//! Creates a new default randomizer.
/** The default randomizer provides the random sequence known from previous
Irrlicht versions and is the initial randomizer set on device creation.
\return Pointer to the default IRandomizer object. */
virtual IRandomizer* createDefaultRandomizer() const =0;
//! Sets the caption of the window. //! Sets the caption of the window.
/** \param text: New text of the window caption. */ /** \param text: New text of the window caption. */
virtual void setWindowCaption(const wchar_t* text) = 0; virtual void setWindowCaption(const wchar_t* text) = 0;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "CTimer.h" #include "CTimer.h"
#include "CLogger.h" #include "CLogger.h"
#include "irrString.h" #include "irrString.h"
#include "IRandomizer.h"
namespace irr namespace irr
{ {
...@@ -19,7 +20,7 @@ namespace irr ...@@ -19,7 +20,7 @@ namespace irr
CIrrDeviceStub::CIrrDeviceStub(const SIrrlichtCreationParameters& params) CIrrDeviceStub::CIrrDeviceStub(const SIrrlichtCreationParameters& params)
: IrrlichtDevice(), VideoDriver(0), GUIEnvironment(0), SceneManager(0), : IrrlichtDevice(), VideoDriver(0), GUIEnvironment(0), SceneManager(0),
Timer(0), CursorControl(0), UserReceiver(params.EventReceiver), Logger(0), Operator(0), Timer(0), CursorControl(0), UserReceiver(params.EventReceiver), Logger(0), Operator(0),
FileSystem(0), InputReceivingSceneManager(0), CreationParams(params), Randomizer(0), FileSystem(0), InputReceivingSceneManager(0), CreationParams(params),
Close(false) Close(false)
{ {
Timer = new CTimer(params.UsePerformanceTimer); Timer = new CTimer(params.UsePerformanceTimer);
...@@ -37,6 +38,7 @@ CIrrDeviceStub::CIrrDeviceStub(const SIrrlichtCreationParameters& params) ...@@ -37,6 +38,7 @@ CIrrDeviceStub::CIrrDeviceStub(const SIrrlichtCreationParameters& params)
Logger->setLogLevel( CreationParams.LoggingLevel ); Logger->setLogLevel( CreationParams.LoggingLevel );
os::Printer::Logger = Logger; os::Printer::Logger = Logger;
setRandomizer(createDefaultRandomizer());
FileSystem = io::createFileSystem(); FileSystem = io::createFileSystem();
core::stringc s = "Irrlicht Engine version "; core::stringc s = "Irrlicht Engine version ";
...@@ -69,9 +71,13 @@ CIrrDeviceStub::~CIrrDeviceStub() ...@@ -69,9 +71,13 @@ CIrrDeviceStub::~CIrrDeviceStub()
if (Operator) if (Operator)
Operator->drop(); Operator->drop();
if (Randomizer)
Randomizer->drop();
CursorControl = 0; CursorControl = 0;
Timer->drop(); if (Timer)
Timer->drop();
if (Logger->drop()) if (Logger->drop())
os::Printer::Logger = 0; os::Printer::Logger = 0;
...@@ -256,6 +262,61 @@ IOSOperator* CIrrDeviceStub::getOSOperator() ...@@ -256,6 +262,61 @@ IOSOperator* CIrrDeviceStub::getOSOperator()
} }
//! Provides access to the engine's currently set randomizer.
IRandomizer* CIrrDeviceStub::getRandomizer() const
{
return Randomizer;
}
//! Sets a new randomizer.
void CIrrDeviceStub::setRandomizer(IRandomizer* r)
{
if (r!=Randomizer)
{
if (Randomizer)
Randomizer->drop();
Randomizer=r;
if (Randomizer)
Randomizer->grab();
}
}
namespace
{
struct SDefaultRandomizer : public IRandomizer
{
virtual void reset(s32 value=0x0f0f0f0f)
{
os::Randomizer::reset(value);
}
virtual s32 rand() const
{
return os::Randomizer::rand();
}
virtual f32 frand() const
{
return os::Randomizer::frand();
}
virtual s32 randMax() const
{
return os::Randomizer::randMax();
}
};
}
//! Creates a new default randomizer.
IRandomizer* CIrrDeviceStub::createDefaultRandomizer() const
{
IRandomizer* r = new SDefaultRandomizer();
if (r)
r->reset();
return r;
}
//! Sets the input receiving scene manager. //! Sets the input receiving scene manager.
void CIrrDeviceStub::setInputReceivingSceneManager(scene::ISceneManager* sceneManager) void CIrrDeviceStub::setInputReceivingSceneManager(scene::ISceneManager* sceneManager)
{ {
......
...@@ -15,6 +15,7 @@ namespace irr ...@@ -15,6 +15,7 @@ namespace irr
// lots of prototypes: // lots of prototypes:
class ILogger; class ILogger;
class CLogger; class CLogger;
class IRandomizer;
namespace gui namespace gui
{ {
...@@ -97,6 +98,15 @@ namespace irr ...@@ -97,6 +98,15 @@ namespace irr
//! Returns a pointer to the logger. //! Returns a pointer to the logger.
virtual ILogger* getLogger(); virtual ILogger* getLogger();
//! Provides access to the engine's currently set randomizer.
virtual IRandomizer* getRandomizer() const;
//! Sets a new randomizer.
virtual void setRandomizer(IRandomizer* r);
//! Creates a new default randomizer.
virtual IRandomizer* createDefaultRandomizer() const;
//! Returns the operation system opertator object. //! Returns the operation system opertator object.
virtual IOSOperator* getOSOperator(); virtual IOSOperator* getOSOperator();
...@@ -148,6 +158,7 @@ namespace irr ...@@ -148,6 +158,7 @@ namespace irr
IEventReceiver* UserReceiver; IEventReceiver* UserReceiver;
CLogger* Logger; CLogger* Logger;
IOSOperator* Operator; IOSOperator* Operator;
IRandomizer* Randomizer;
io::IFileSystem* FileSystem; io::IFileSystem* FileSystem;
scene::ISceneManager* InputReceivingSceneManager; scene::ISceneManager* InputReceivingSceneManager;
......
...@@ -825,6 +825,7 @@ ...@@ -825,6 +825,7 @@
<ClInclude Include="..\..\include\IEventReceiver.h" /> <ClInclude Include="..\..\include\IEventReceiver.h" />
<ClInclude Include="..\..\include\ILogger.h" /> <ClInclude Include="..\..\include\ILogger.h" />
<ClInclude Include="..\..\include\IOSOperator.h" /> <ClInclude Include="..\..\include\IOSOperator.h" />
<ClInclude Include="..\..\include\IRandomizer.h" />
<ClInclude Include="..\..\include\IReferenceCounted.h" /> <ClInclude Include="..\..\include\IReferenceCounted.h" />
<ClInclude Include="..\..\include\IrrCompileConfig.h" /> <ClInclude Include="..\..\include\IrrCompileConfig.h" />
<ClInclude Include="..\..\include\irrlicht.h" /> <ClInclude Include="..\..\include\irrlicht.h" />
......
...@@ -1291,6 +1291,9 @@ ...@@ -1291,6 +1291,9 @@
<ClInclude Include="..\..\include\EDriverFeatures.h"> <ClInclude Include="..\..\include\EDriverFeatures.h">
<Filter>include\video</Filter> <Filter>include\video</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\include\IRandomizer.h">
<Filter>include</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\changes.txt"> <None Include="..\..\changes.txt">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment