00001
00002
00003
00004
00005 #pragma once
00006 #ifndef __I_REGION_LEVEL_NODE_H__
00007 #define __I_REGION_LEVEL_NODE_H__
00008
00009 #include "ILevelNode.hpp"
00010
00011 #include "GridSceneNode.hpp"
00012 #include "NUSoftwareIntroSceneNode.hpp"
00013 #include "ISoundEmitterSceneNode.hpp"
00014
00015 namespace nge
00016 {
00017 namespace engine
00018 {
00019
00020 class IRegionLevelNode : public ILevelNode
00021 {
00022 public:
00024 IRegionLevelNode(IRegionLevelNode* parent, ILevelManager* lmgr, s32 id)
00025 : ILevelNode(parent, lmgr, id), m_pRootSceneNode(0)
00026 {
00027 m_pRootSceneNode = lmgr->getSceneManager()->addEmptySceneNode();
00028 }
00029
00031 virtual ~IRegionLevelNode()
00032 {
00033 if(m_pRootSceneNode && Parent)
00034 {
00035 m_pRootSceneNode->remove();
00036 m_pRootSceneNode = 0;
00037 }
00038
00039 m_aSoundEmitters.clear();
00040 }
00041
00042 virtual E_LEVEL_NODE_TYPE getType() const
00043 {
00044 return ELNT_REGION;
00045 }
00046
00047 virtual void OnRegisterLevelNode()
00048 {
00049 if(m_pRootSceneNode)
00050 m_pRootSceneNode->setVisible(!isIdle());
00051
00052 ILevelNode::OnRegisterLevelNode();
00053 }
00054
00055 virtual void drawDebugData()
00056 {
00057 if(DebugDataVisible & EDL_ID)
00058 {
00059 stringw DebugDataID = "";
00060 DebugDataID = "ID: ";
00061 DebugDataID+=getID();
00062 LevelManager->getGUIFont()->draw(
00063 DebugDataID.c_str(), rect<s32>(450,0,100,100), SColor(255,0,0,0));
00064 }
00065
00066 if(DebugDataVisible & EDL_NAME)
00067 {
00068 stringw DebugDataName = "";
00069 DebugDataName = "Name: ";
00070 DebugDataName+=getName();
00071 LevelManager->getGUIFont()->draw(
00072 DebugDataName.c_str(), rect<s32>(450,23,100,100), SColor(255,0,0,0));
00073 }
00074
00075 if(DebugDataVisible & EDL_IDLE)
00076 {
00077 stringw DebugDataIdle = "";
00078 DebugDataIdle = "IsIdle: ";
00079 (isIdle()) ? DebugDataIdle+="True" : DebugDataIdle+="False";
00080 LevelManager->getGUIFont()->draw(
00081 DebugDataIdle.c_str(), rect<s32>(450,46,100,100), SColor(255,0,0,0));
00082 }
00083
00084 ILevelNode::drawDebugData();
00085 }
00086
00088 virtual ISceneNode* SceneNode()
00089 {
00090 return m_pRootSceneNode;
00091 }
00092
00093 virtual void setIdle(bool isIdle)
00094 {
00095 ILevelNode::setIdle(isIdle);
00096
00097 list<ILevelNode*>::Iterator it = getChildren().begin();
00098 for(; it != Children.end(); ++it)
00099 {
00100 (*it)->setIdle(isIdle);
00101 }
00102 }
00103
00105
00107 virtual GridSceneNode* addGridSceneNode(ISceneNode* parent = 0,
00108 ISceneManager* smgr = 0, s32 id = -1, s32 spacing = 8, s32 size = 1024,
00109 SColor gridcolor = SColor(255,128,128,128), s32 accentlineoffset = 8,
00110 SColor accentgridcolor = SColor(255,192,192,192), bool axislinestate = false)
00111 {
00112 if(!parent) parent = SceneNode();
00113 if(!smgr) smgr = LevelManager->getSceneManager();
00114
00115 GridSceneNode* grid = new GridSceneNode(parent, smgr, id, spacing,
00116 size, gridcolor, accentlineoffset, accentgridcolor, axislinestate);
00117
00118 grid->drop();
00119 return grid;
00120 }
00121
00122 virtual NUSoftwareIntroSceneNode* addNUSoftwareIntroSceneNode(
00123 ISceneNode* parent = 0, ISceneManager* smgr = 0, s32 id = -1,
00124 vector3df pos = vector3df(0.f,0.f,0.f),
00125 vector3df rot = vector3df(-90.f,0.f,0.f),
00126 vector3df scale = vector3df(60.f,60.f,60.f))
00127 {
00128 if(!parent) parent = SceneNode();
00129 if(!smgr) smgr = LevelManager->getSceneManager();
00130
00131 NUSoftwareIntroSceneNode* node = new NUSoftwareIntroSceneNode(LevelManager->getSceneManager()->getGUIEnvironment(),parent, smgr, id, pos, rot, scale);
00132
00133 node->drop();
00134 return node;
00135 }
00136
00137 virtual ISoundEmitterSceneNode* addSoundEmitterSceneNode(
00138 ISceneNode* parent = 0,
00139 ISceneManager* smgr = 0,
00140 s32 id = -1)
00141 {
00142 if(!parent) parent = SceneNode();
00143 if(!smgr) smgr = LevelManager->getSceneManager();
00144
00145 ISoundEmitterSceneNode* emitter = new ISoundEmitterSceneNode(parent, smgr, id);
00146 m_aSoundEmitters.push_back(emitter);
00147
00148 emitter->drop();
00149 return emitter;
00150 }
00151
00152 protected:
00153 ISceneNode* m_pRootSceneNode;
00154
00155 array<ISoundEmitterSceneNode*> m_aSoundEmitters;
00156 };
00157
00158 }
00159 }
00160
00161 #endif // __I_REGION_LEVEL_NODE_H__