Download the Latest PreAlpha Version - http://www.riseofheroesmmo.com/FreedomEngine.rar
The Engine contains a much better structure then my previous attempts because I have been reading books and articles on Game Engine design. I started out making the Freedom Engine in pure DirectX but I just LOVE Ogre3D so much and love the fact that it's cross platform compatible so I decided to use Ogre for it instead.
I'm not going to go into to much details about my intended use for Freedom just yet. However the deeper I get into development the clearer my intentions will become to any one who ends up following it.
The Engine is a single dll that currently contains the OgreRenderer, State Manager and Exception handling.
The main Engine class (FreedomEngine) is 1 of 2 Singletons in the whole engine (Will remain that way through out development). The other Singleton currently is the State Manager though I may change that at a later time. All other Engine Systems (OgreRenderer, Physics, Audio, GUI, ect) will be obtained through the Main Engine class.
So to get the OgreRenderer you would use:
OgreRenderer* renderer = FreedomEngine::Singleton()->Renderer();
In order to start the Engine up you would use something like the following in your main entry method:
Code: Select all
int _tmain(int argc, _TCHAR* argv[])
{
ofstream log;
FreedomEngine* engine = FreedomEngine::Singleton();
try
{
log.open("ExceptionLog.txt");
engine->InitializeEngine("Freedom Engine: DemoApp 2012", 800, 600, false);
StateManager::getSingleton().registerState<StateA>();
OgreRenderer* renderer = FreedomEngine::Singleton()->Renderer();
StateManager::getSingleton().advance<StateA>();
while(engine->Running()){
engine->Update();
}
}catch(EngineException* error)
{
time_t t = time(0); // get time now
struct tm * now = localtime( & t );
log << now->tm_mon << "/" << now->tm_mday << "/" << now->tm_year + 1900 << " " << now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec << " - " << error->what() << "\n";
}
engine->Shutdown();
log.close();
return 0;
}
Game States must inherit from State which is located in GameState.h. The State is created (Constructor is called) when you advance to the state so you could put all of your Scene data in your constructor. I created a method "CreateScene" where I place all my scene information and then the method gets called from the constructor.
Road Map - Planned Features:
OgreRenderer - More will be added but the basics are in place
Audio - 3D Positional Sound as well as 2d sound
Physics - PhysX Physics most likely
Special FX - Particles (Particle Universe for those with a license or Ogre Particles for those with out) plus audio together to create advanced Special Effects and Environmental Effects
Paging Terrain - Support for very large Open Worlds using Ogre3D's Paging Terrain
Realistic Environments - Day/Night cycles, Weather, Seasons, ect using SkyX and the Special FX System
Networking Framework - A Networking Framework using RakNet
-Object Replication using ReplicaManager 3
-Remote Procedure Calls
-VOIP
-Seamless Transitions achieved through Client Side Terrain Paging, and Replication of Player Characters to next server before a Seamless hand off of control over the object and switching of the client side connection to the next server.
Game Framework - A Game Framework for the specific type of Game the engine is being built for (More on this at a later time).