/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2007.01.10 * ³» ¿ë : ³×ºñÇÊµå ÆíÁýÀÚ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Lines.h" class cSceneNode; class cPathFinder; class cNaviField; class cNaviFieldLeafNode; class cNaviFieldBuildDialog; class cNaviFieldPaintDialog; class cNaviFieldInfoDialog; /// ³×ºñÇÊµå ÆíÁýÀÚ /// ¸Ê»óÀÇ ³×ºñÇÊµå ¸®ÇÁ ³ëµåµéÀ» ÆíÁýÇϰí /// ³×ºñÇÊµå ÆÄÀÏ(*.navifield)À» ÀúÀå, ·ÎµùÇÑ´Ù. class cNaviFieldEditor { static cNaviFieldEditor* mSingleton; friend class cMapEditorView; public: cNaviFieldEditor(); ~cNaviFieldEditor(); /// Áö¿ò 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 SyncAllToNaviMesh(); /// »öÄ¥ ´ÙÀ̾ó·Î±×¸¦ ¼³Á¤ void SetPaintDialog( cNaviFieldPaintDialog* dlg ); /// Á¤º¸ ´ÙÀ̾ó·Î±×¸¦ ¼³Á¤ void SetInfoDialog( cNaviFieldInfoDialog* dlg ); /// ÇÈÅ· À§Ä¡ º¯°æ ¿©ºÎ¸¦ ¼³Á¤ void SetPickPosChanged( bool changed ); /// °æ·Î À̸§À» ¸®ÅÏ const cString& GetPathName() const; /// ÇØ»óµµ¸¦ ¸®ÅÏ unsigned int GetResolution() const; /// Á¤Á¡´ç ¹ÌÅͼö¸¦ ¸®ÅÏ float GetMetersPerVertex() const; /// ±æÃ£±â¸¦ ¸®ÅÏ cPathFinder* GetPathFinder() const; protected: bool CalcRange( unsigned int* xbegin, unsigned int* ybegin, unsigned int* xend, unsigned int* yend, const NiPoint3& pos, float radius ); private: /// ¸Þ½ÃÁö¸¦ ó¸® void OnTimer_Paint(); void OnMouseMove( CPoint point ); void OnLButtonDown_Paint( CPoint point ); void OnLButtonUp(); public: /// ´ÜÀÏü¸¦ ¸®ÅÏ static cNaviFieldEditor* GetSingleton(); protected: /// »öÄ¥ ´ÙÀ̾ó·Î±× cNaviFieldPaintDialog* mPaintDialog; /// Á¤º¸ ´ÙÀ̾ó·Î±× cNaviFieldInfoDialog* mInfoDialog; /// ³×ºñÇʵå cNaviField* mNaviField; /// ±æÃ£±â cPathFinder* mPathFinder; /// ÇÈÅ·µÈ Àå¸é ³ëµå ¹è¿­ typedef tArray cPickedArray; cPickedArray mPickedArray; /// µå·ÎÀ× ¿©ºÎ bool mDrawing; /// ÇÈÅ· À§Ä¡ NiPoint3 mPickPos; NiPoint3 mPickOldPos; bool mPickPosChanged; /// ÆíÁý ¿ø /// ¼±Åà ¹üÀ§¸¦ Ç¥½ÃÇϴµ¥ »ç¿ëÇÑ´Ù. cCircleLines mOuterLines; /// ¸¶¿ì½º ÁÂÇ¥ CPoint mMousePos; /// °æ·Î À̸§ cString mPathName; }; inline void cNaviFieldEditor::SetPaintDialog( cNaviFieldPaintDialog* dlg ) { assert( dlg && "null navifield paint dialog" ); mPaintDialog = dlg; } inline void cNaviFieldEditor::SetInfoDialog( cNaviFieldInfoDialog* dlg ) { assert( dlg && "null navifield info dialog" ); mInfoDialog = dlg; } inline void cNaviFieldEditor::SetPickPosChanged( bool changed ) { mPickPosChanged = changed; } inline const cString& cNaviFieldEditor::GetPathName() const { return mPathName; } inline cNaviFieldEditor* cNaviFieldEditor::GetSingleton() { return mSingleton; } inline cPathFinder* cNaviFieldEditor::GetPathFinder() const { return mPathFinder; } #define NAVIFIELDEDIT cNaviFieldEditor::GetSingleton() #define PATHFINDER NAVIFIELDEDIT->GetPathFinder()