#ifndef _RUNE_H_
#define _RUNE_H_

// Data store system
#include "Core/DataStore/RuDataStore_Disk.h"

// Engine
#include "Direct3D/Engine/RuEngineD3D.h"
#include "Direct3D/Engine/RuInstanceManagerD3D.h"
#include "Direct3D/Engine/RuResourceManagerD3D.h"

// Built-in shaders
#include "Engine/Base/RuShader_Composite.h"
#include "Direct3D/Shader/RuShader_D3D_2DFX.h"
#include "Direct3D/Shader/RuShader_D3D_Base.h"
#include "Direct3D/Shader/RuShader_D3D_Doodad.h"
#include "Direct3D/Shader/RuShader_D3D_Editor.h"
#include "Direct3D/Shader/RuShader_D3D_FX.h"
#include "Direct3D/Shader/RuShader_D3D_Paperdoll.h"
#include "Direct3D/Shader/RuShader_D3D_Particle.h"
#include "Direct3D/Shader/RuShader_D3D_Shadow.h"
#include "Direct3D/Shader/RuShader_D3D_Sky.h"
#include "Direct3D/Shader/RuShader_D3D_Standard.h"
#include "Direct3D/Shader/RuShader_D3D_Static_FX.h"
#include "Direct3D/Shader/RuShader_D3D_Terrain.h"
#include "Direct3D/Shader/RuShader_D3D_Water.h"
#include "Direct3D/Shader/RuShader_D3D_Widget.h"

// UI
#include "UI/RuUI_Font.h"

// Gaia collision system
#include "Gaia/RuGaia_DataStore.h"

// Path Engine
#include "PathEngine/RuPathRover_Base.h"
#include "PathEngine/RuPathRover_Simple.h"
#include "PathEngine/RuPathGraph_Base.h"
#include "PathEngine/RuPathGraph_AStar.h"
#include "PathEngine/RuPathHierarchy_Base.h"
#include "PathEngine/RuPathHierarchy_DS.h"

// Scene system
#include "Scene/Base/RuSceneBase.h"
#include "Scene/Container/RuContainer_Portal.h"

// Miscellaneous
#include "Scene/ColVis/RuEntity_ColVis.h"
#include "Scene/PathEngineVis/RuEntity_PathEngineVis.h"

// Controllers
#include "Scene/Controller/RuController_Bone.h"
#include "Scene/Controller/RuController_Camera.h"
#include "Scene/Controller/RuController_Decal.h"
#include "Scene/Controller/RuController_DistanceFader.h"
#include "Scene/Controller/RuController_Entity.h"
#include "Scene/Controller/RuController_EventTrigger.h"
#include "Scene/Controller/RuController_Frame.h"
#include "Scene/Controller/RuController_GhostTrail.h"
#include "Scene/Controller/RuController_GlobalAlpha.h"
#include "Scene/Controller/RuController_GlobalColor.h"
#include "Scene/Controller/RuController_Hierarchy.h"
#include "Scene/Controller/RuController_Highlighter.h"
#include "Scene/Controller/RuController_MaterialTexture.h"
#include "Scene/Controller/RuController_Morph.h"
#include "Scene/Controller/RuController_ParticleSystem.h"
#include "Scene/Controller/RuController_Particle_Emitter.h"
#include "Scene/Controller/RuController_Particle_Visualizer_Entity.h"
#include "Scene/Controller/RuController_Particle_Visualizer_Sprite.h"

// Effect systems
#include "Scene/FX/RuEntity_Decal.h"
#include "Scene/FX/RuEntity_DecalShadow.h"
#include "Scene/FX/RuEntity_GhostTrail.h"

// Particle systems
#include "Scene/Particle/RuEntity_Particle_Doodad.h"
#include "Scene/Particle/RuEntity_Particle_Grass.h"
#include "Scene/Particle/RuEntity_Particle_Sprite.h"
#include "Scene/Particle/RuEntity_Particle_Emitter.h"
#include "Scene/Particle/RuEntity_Particle_Visualizer_Entity.h"
#include "Scene/Particle/RuEntity_Particle_Visualizer_Sprite.h"

// Environmental systems
#include "Scene/Terrain/RuEntitySkyDome.h"
#include "Scene/Terrain/RuEntityOptimalTerrain.h"
#include "Scene/Terrain/RuEntity_Environment.h"		// this depends on GAIA

// Gizmos
#include "Scene/Gizmo/RuGizmo_Plane.h"

// Widgets
#include "Scene/Widget/RuEntityGizmo.h"
#include "Scene/Widget/RuEntity_Widget_AABB.h"
#include "Scene/Widget/RuEntity_Widget_BoneVis.h"
#include "Scene/Widget/RuEntity_Widget_Flag.h"
#include "Scene/Widget/RuEntity_Widget_FrustumVis.h"
#include "Scene/Widget/RuEntity_Widget_Grid.h"
#include "Scene/Widget/RuEntity_Widget_Label.h"
#include "Scene/Widget/RuEntity_Widget_Line.h"
#include "Scene/Widget/RuEntity_Widget_Sphere.h"
#include "Scene/Widget/RuEntity_Widget_Text.h"

// Noise Generator
#include "Core/Noise/RuNoise_Base.h"
#include "Core/Noise/RuNoise_Perlin.h"
#include "Core/Noise/RuNoise_Texture.h"
#include "Core/Noise/RuNoise_Value.h"
#include "Core/Noise/RuNoise_Worley.h"

// Fractal Generator
#include "Core/Fractal/RuFractal_Base.h"
#include "Core/Fractal/RuFractal_Composite.h"
#include "Core/Fractal/RuFractal_fBm.h"
#include "Core/Fractal/RuFractal_HeteroTerrain.h"
#include "Core/Fractal/RuFractal_HybridMultifractal.h"
#include "Core/Fractal/RuFractal_Multifractal.h"
#include "Core/Fractal/RuFractal_RidgedMultifractal.h"
#include "Core/Fractal/RuFractal_Shapes.h"

// Fractal post-processing
#include "Core/Fractal/RuFractal_PostFX_ABS.h"
#include "Core/Fractal/RuFractal_PostFX_Cutoff.h"
#include "Core/Fractal/RuFractal_PostFX_Gain.h"
#include "Core/Fractal/RuFractal_PostFX_Remap.h"
#include "Core/Fractal/RuFractal_PostFX_Square.h"

// Helper layer
#include "Helper/RuHelper_Entity.h"
#include "Helper/RuHelper_Math.h"
#include "Helper/RuHelper_PostFX.h"

// MOJO
#include "Mojo/RuMojo_Base.h"
#include "Mojo/RuMojo_Helper.h"

// FUSION Game Components
#include "Fusion/RuFusion_Actor.h"
#include "Fusion/RuFusion_Mime.h"
#include "Fusion/RuFusion_Minimap.h"
#include "Fusion/RuFusion_AudioLibrary.h"
#include "Fusion/RuFusion_Sojourner.h"
#include "Fusion/RuFusion_UIElement.h"

// ************************************************************************************************************************************************************

#pragma comment (lib, "d3d9")
#pragma comment (lib, "d3dx9")

// ************************************************************************************************************************************************************

extern RUAPI void			RuInitializeObjectFactory();
extern RUAPI BOOL			RuInitialize_Minimal();
extern RUAPI IRuSwapChain*	RuInitialize(HWND primaryWindow, HWND focusWindow, UINT32 resourceArenaSize);
extern RUAPI BOOL			RuSetResolution(IRuSwapChain *swapChain, UINT32 width, UINT32 height, BOOL fullscreen);
extern RUAPI BOOL			RuShutdown();

// Symphony Audio System
extern RUAPI BOOL			RuSymphony_Initialize();
extern RUAPI BOOL			RuSymphony_Shutdown();

// ************************************************************************************************************************************************************
extern char					g_ruGlobalMessage[2048];

// ************************************************************************************************************************************************************

#endif
