00001
00002
00003
00004
00005 #pragma once
00006 #ifndef __I_LEVEL_MANAGER_H__
00007 #define __I_LEVEL_MANAGER_H__
00008
00009 #include "IAudioDevice.hpp"
00010 #include "ISoundListenerSceneNode.hpp"
00011 #include "NGEReceiver.hpp"
00012 #include "ISceneNodeControllerAnimator.hpp"
00013 #include "ELevelNodeTypes.hpp"
00014 #include "Irrlicht/irrlicht.h"
00015
00016 using namespace nge::audio;
00017 using namespace nge::core;
00018 using namespace nge::game;
00019 using namespace irr::core;
00020 using namespace irr::gui;
00021 using namespace irr::scene;
00022 using namespace irr::video;
00023
00024 namespace nge
00025 {
00026
00027 namespace game
00028 {
00029 class IPlayer;
00030 }
00031
00032 namespace engine
00033 {
00034
00035 enum E_LEVEL_NODE_PROCESS_PASS
00036 {
00038 ELNPP_PRE_PROCESS,
00039
00041 ELNPP_POST_PROCESS,
00042
00044 ELNPP_GAME_ENTITY,
00045
00047 ELNPP_WORLD,
00048
00050 ELNPP_ZONE_GROUP,
00051
00053 ELNPP_ZONE,
00054
00056 ELNPP_REGION,
00057
00059 ELNPP_COUNT
00060 };
00061
00062 class ILevelNode;
00063 class IRegionLevelNode;
00064 class IWorldLevelNode;
00065 class IZoneGroupLevelNode;
00066 class IZoneLevelNode;
00067
00069 class ILevelManager : public virtual IReferenceCounted
00070 {
00071 public:
00073 virtual ~ILevelManager() {}
00074
00076
00079 virtual ILevelNode* addEmptyLevelNode(ILevelNode* parent=0, s32 id=-1) = 0;
00080
00081 virtual IRegionLevelNode* addRegionLevelNode(IRegionLevelNode* parent=0, s32 id=-1) = 0;
00082
00084
00086 virtual IWorldLevelNode* addWorldLevelNode(s32 id=-1) = 0;
00087
00089
00091 virtual IZoneGroupLevelNode* addZoneGroupLevelNode(IWorldLevelNode* parent, s32 id=-1) = 0;
00092
00094
00096 virtual IZoneLevelNode* addZoneLevelNode(IZoneGroupLevelNode* parent, s32 id=-1) = 0;
00097
00099
00104 virtual ILevelNode* getRootLevelNode() = 0;
00105
00107
00113 virtual ILevelNode* getLevelNodeFromId(s32 id, ILevelNode* start=0) = 0;
00114
00116 template <class T>
00117 T* getLevelNodeFromId(s32 id, ILevelNode* start=0)
00118 {
00119 return dynamic_cast<T*>(getLevelNodeFromId(id, start));
00120 }
00121
00123
00129 virtual ILevelNode* getLevelNodeFromName(const c8* name, ILevelNode* start) = 0;
00130
00132 template <class T>
00133 T* getLevelNodeFromName(const c8* name, ILevelNode* start=0)
00134 {
00135 return dynamic_cast<T*>(getLevelNodeFromName(name, start));
00136 }
00137
00139
00145 virtual ILevelNode* getLevelNodeFromType(E_LEVEL_NODE_TYPE type, ILevelNode* start) = 0;
00146
00148 template <class T>
00149 T* getLevelNodeFromType(E_LEVEL_NODE_TYPE type, ILevelNode* start=0)
00150 {
00151 return dynamic_cast<T*>(getLevelNodeFromType(type, start));
00152 }
00153
00155
00160 virtual void getLevelNodesFromType(E_LEVEL_NODE_TYPE type, array<ILevelNode*>& outNodes, ILevelNode* start=0) = 0;
00161
00163
00169 virtual void registerNodeForProcessing(ILevelNode* node, E_LEVEL_NODE_PROCESS_PASS pass) = 0;
00170
00172
00173 virtual void processAll() = 0;
00174
00176
00181 virtual void addToDeletionQueue(ILevelNode* node) = 0;
00182
00184
00186 virtual void postEventFromUser(const NGEReceiver* event) = 0;
00187
00189
00190 virtual void clear() = 0;
00191
00193
00199 virtual E_LEVEL_NODE_PROCESS_PASS getLevelNodeProcessPass() const = 0;
00200
00202 virtual IGUIFont* getGUIFont() const = 0;
00203
00204 virtual ISceneManager* getSceneManager() const = 0;
00205
00206 virtual IAudioDevice* getAudioDevice() const = 0;
00207
00208 virtual ICursorControl* getCursorControl() const = 0;
00209
00210 virtual ITimer* getTimer() const = 0;
00211
00212 virtual ISoundListenerSceneNode* getSoundListener() const = 0;
00213
00214 virtual IPlayer* getPlayer() const = 0;
00215
00216 virtual void setPlayer(IPlayer* Player) = 0;
00217
00218 virtual void gatherLevelNodeStates(ILevelNode* node = 0) = 0;
00219
00220 virtual void restoreLevelNodeStates(ILevelNode* node = 0) = 0;
00221
00222 virtual ISceneNodeControllerAnimator* createSceneNodeControllerAnimator(
00223 ISceneManager* smgr, ICursorControl* cur,
00224 f32 rotateSpeed = 150.f, f32 MoveSpeed = 100, SOpKeyMap* keyMapArray = 0, s32 keyMapSize = 0,
00225 bool verticalMovement = true) = 0;
00226
00227 virtual bool primitiveCollisionCheckBasedOnPosition(ISceneNode* n1, ISceneNode* n2, s32 CollisionDistance) = 0;
00228
00229 virtual IMetaTriangleSelector* getGlobalMetaSelector() const = 0;
00230 };
00231
00232 }
00233 }
00234
00235 #endif // __I_LEVEL_MANAGER_H__