/* ==================================================================== * ÆÄ ÀÏ : WorldManager.h * ¸ñ Àû : ȯ°æ¿¡ °ü·ÃµÈ ¸ðµç °´Ã¼¹× Á¤º¸¸¦ °ü¸®ÇÑ´Ù. * ÀÛ ¼º ÀÚ : À̹ý¼® * ÀÛ ¼º ÀÏ : 2006.01 * * Ãß°¡³»¿ë : * Ãß°¡³¯Â¥ ÀÛ¾÷ÀÚ Ãß°¡³»¿ë * 2006.01 À̹ý¼® »ý¼º * * ÁÖÀÇ»çÇ× : * =================================================================== */ #pragma once class cPathFinder; class cTerrain; class cNaviMesh; class cNaviField; class cMaterialData; class cSceneNode; class cAreaSceneNode; /// ¿ùµå °ü¸®ÀÚ class cWorldManager { static cWorldManager* mSingleton; public: cWorldManager(); ~cWorldManager(); /// ÃʱâÈ­ ¹× Á¾·á bool Init(); void Exit(); /// ó¸® void Process( unsigned long deltaTime, unsigned long accumTime ); void ProcessAmbient( unsigned long deltaTime ); void ProcessFog( unsigned long deltaTime ); void ProcessCamera( unsigned long deltaTime ); /// ·»´õ¸µ void Render(); void RenderSkyDome(); /// ÇöÀç ¿ùµå Á¤º¸¸¦ »ý¼º ¹× ÆÄ±« bool Open(); void Close(); void ClearSkyDome(); /// ÇÏ´Ã bool LoadSkydome( const cString& pathName, float scale ); void MoveSkyDome( const NiPoint3& pos ); /// ¿µ¿ª void SetArea( const cAreaSceneNode& n ); void BlendArea( const cAreaSceneNode& n0, const cAreaSceneNode& n1, float ratio ); /// ÇÈÅ· bool Pick( NiPoint3* pos, int mouseX, int mouseY ); /// ³ôÀ̰ª bool CalcHeight( float* height, float posX, float posY ); bool EnableMove( int mouseX, int mouseY ); bool EnableRayCheck( NiPoint2 start, NiPoint2 goal ); bool EnableRayGet( NiPoint3 start, NiPoint3 &goal ); bool EnableRayGet( NiPoint2 start, NiPoint2 &goal ); /// Map IndexÁ¤º¸ inline unsigned int GetCurrentMapIndex() { return mCurrentMapIndex; } inline void SetCurrentMapIndex( unsigned int mapIdx ) { mCurrentMapIndex = mapIdx; } /// ÁöÇüÀ» ¸®ÅÏ cTerrain* GetTerrain() const; cNaviField* GetNaviField() const; cNaviMesh* GetNaviMesh() const; cPathFinder* GetPathFinder() const; cNaviField* GetNaviField( int mapIndex, unsigned char mapMode ) const; /// load process¸¦ À§ÇÑ ÇÔ¼ö bool LoadTerrainHeader( unsigned int& loadCount, unsigned int mapIdx, unsigned char mapMode ); int LoadTerrainNodes( unsigned int count ); bool LoadNaviMeshHeader( unsigned int& loadCount, unsigned int mapIdx, unsigned char mapMode ); int LoadNaviMeshNodes( unsigned int count ); bool LoadNaviField( unsigned int mapIdx, unsigned char mapMode ); protected: /// ±âÇÏ ³ëµåµéÀ» ¼öÁý void CollectGeometries( tList* pgeomList, NiAVObject* pobj ); void CollectProperties( tList* ppropList, NiAVObject* pobj ); void SetMaterial( tList& propList, const cMaterialData& material ); /// °´Ã¼¸¦ º¯ÇüÇÑ´Ù. void DisableZBuffer( NiAVObject* pObj ); // void RecursivePrepack( NiAVObject* pObj ); public: /// ´ÜÀÏü¸¦ ¸®ÅÏ static cWorldManager* GetSingleton(); private: /// ¸Ê À妽º unsigned int mCurrentMapIndex; /// ±æÃ£±â cPathFinder* mPathFinder; /// ÁöÇü cTerrain* mTerrain; /// ³×ºñ¸Þ½Ã cNaviMesh* mNaviMesh; /// ³×ºñÇʵå typedef tHashMap< unsigned long, void* > cNaviFieldMap; cNaviFieldMap mNaviFieldMap; cNaviField* mpCurrentNaviField; bool mNaviFieldLoadEnd; /// ÇÏ´Ã NiNodePtr mSkyDome; cString mSkyPathName; typedef tList cRenderObjList; cRenderObjList mSkyGeomList; typedef tList cMatPropList; cMatPropList mSkyMatPropList; float mSkyHeight; bool mSkyNeedUpdate; /// ÁÖº¯±¤ NiColor mTargetSkyAmbient; NiColor mSkyAmbient; float mTargetSkyDimmer; float mSkyDimmer; NiColor mTargetTerrainAmbient; NiColor mTerrainAmbient; float mTargetTerrainDimmer; float mTerrainDimmer; NiColor mTargetStaticObjectAmbient; NiColor mStaticObjectAmbient; float mTargetStaticObjectDimmer; float mStaticObjectDimmer; NiColor mTargetDynamicObjectAmbient; NiColor mDynamicObjectAmbient; float mTargetDynamicObjectDimmer; float mDynamicObjectDimmer; /// ¾È°³ NiColor mTargetFogColor; NiColor mFogColor; float mTargetFogDepth; float mFogDepth; /// Ãæµ¹ ¹è¿­ typedef tArray cCollidableArray; cCollidableArray mCollidableArray; cAreaSceneNode* mArea1; cAreaSceneNode* mArea2; }; inline cTerrain* cWorldManager::GetTerrain() const { return mTerrain; } inline cNaviMesh* cWorldManager::GetNaviMesh() const { return mNaviMesh; } inline cNaviField* cWorldManager::GetNaviField() const { return mpCurrentNaviField; } inline cPathFinder* cWorldManager::GetPathFinder() const { return mPathFinder; } inline cWorldManager* cWorldManager::GetSingleton() { return mSingleton; } #define WORLDMAN cWorldManager::GetSingleton()