/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.12.13 * ³» ¿ë : ³×ºñ¸Þ½Ã ÆíÁýÀÚ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once class cSceneNode; class cNaviMesh; class cNaviMeshLeafNode; class cNaviMeshBuildDialog; /// ³×ºñ¸Þ½Ã ÆíÁýÀÚ /// ¸Ê»óÀÇ ³×ºñ¸Þ½Ã ¸®ÇÁ ³ëµåµéÀ» ÆíÁýÇϰí /// ³×ºñ¸Þ½Ã ÆÄÀÏ(*.navimesh)À» ÀúÀå, ·ÎµùÇÑ´Ù. class cNaviMeshEditor { static cNaviMeshEditor* mSingleton; friend class cMapEditorView; public: cNaviMeshEditor(); ~cNaviMeshEditor(); /// Áö¿ò void Clear(); /// ó¸® void Process(); /// ·»´õ¸µ void Render(); /// ³×ºñ¸Þ½Ã¸¦ »õ·Î ¸¸µê void Init( unsigned int resolution, float metersPerVertex = 1.0f, unsigned int unitsPerMeter = 100 ); /// ³×ºñ¸Þ½Ã¸¦ ·Îµù bool Load( const cString& pathName ); /// ³×ºñ¸Þ½Ã¸¦ ÀúÀå bool Save(); bool SaveAs( const cString& pathName ); /// ÁöÇü¿¡ ¸ÂÃã void SyncAllToTerrain(); /// °ÇÃà ´ÙÀ̾ó·Î±×¸¦ ¼³Á¤ void SetBuildDialog( cNaviMeshBuildDialog* dlg ); /// ÇÈÅ· À§Ä¡ º¯°æ ¿©ºÎ¸¦ ¼³Á¤ void SetPickPosChanged( bool changed ); /// °æ·Î À̸§À» ¸®ÅÏ const cString& GetPathName() const; /// ÇØ»óµµ¸¦ ¸®ÅÏ unsigned int GetResolution() const; /// Á¤Á¡´ç ¹ÌÅͼö¸¦ ¸®ÅÏ float GetMetersPerVertex() const; private: /// ¸Þ½ÃÁö¸¦ ó¸® void OnTimer_Build(); void OnMouseMove( CPoint point ); void OnLButtonDown_Build( CPoint point ); void OnLButtonUp(); public: /// ´ÜÀÏü¸¦ ¸®ÅÏ static cNaviMeshEditor* GetSingleton(); protected: /// °ÇÃà ´ÙÀ̾ó·Î±× cNaviMeshBuildDialog* mBuildDialog; /// ³×ºñ¸Þ½Ã cNaviMesh* mNaviMesh; /// ÇÈÅ·µÈ Àå¸é ³ëµå ¹è¿­ typedef tArray cPickedArray; cPickedArray mPickedArray; /// µå·ÎÀ× ¿©ºÎ bool mDrawing; /// ÇÈÅ· À§Ä¡ NiPoint3 mPickPos; NiPoint3 mPickOldPos; bool mPickPosChanged; /// ÆíÁý ¿ø /// ¼±Åà ¹üÀ§¸¦ Ç¥½ÃÇϴµ¥ »ç¿ëÇÑ´Ù. NiMeshPtr mCircleLines; NiMaterialPropertyPtr mMatProp; NiVertexColorPropertyPtr mVertColorProp; NiWireframePropertyPtr mWireProp; /// ¸¶¿ì½º ÁÂÇ¥ CPoint mMousePos; /// °æ·Î À̸§ cString mPathName; }; inline void cNaviMeshEditor::SetBuildDialog( cNaviMeshBuildDialog* dlg ) { assert( dlg && "null navimesh build dialog" ); mBuildDialog = dlg; } inline void cNaviMeshEditor::SetPickPosChanged( bool changed ) { mPickPosChanged = changed; } inline const cString& cNaviMeshEditor::GetPathName() const { return mPathName; } inline cNaviMeshEditor* cNaviMeshEditor::GetSingleton() { return mSingleton; } #define NAVIMESHEDIT cNaviMeshEditor::GetSingleton()