/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.12.05 * ³» ¿ë : ½ÇÇà °ü¸®ÀÚ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once class cDoing; class cTerrainBuildingInfo; class cTerrainPaintingInfo; class cTerrainDetailingInfo; class cObjectCreatingInfo; class cObjectSelectingInfo; class cObjectDeletingInfo; class cObjectCopyingInfo; class cNaviMeshBuildingInfo; class cNaviFieldPaintingInfo; /// ½ÇÇà °ü¸®ÀÚ class cDoingManager { static cDoingManager* mSingleton; public: cDoingManager(); ~cDoingManager(); /// Áö¿ò void ClearTerrain(); void ClearObject(); void ClearNaviMesh(); void ClearNaviField(); void ClearAll(); /// Undo bool Undo(); /// Redo bool Redo(); /// Undo ½ºÅÃÀÌ ºñ¾îÀÖ´ÂÁö ¿©ºÎ¸¦ ¸®ÅÏ bool IsEmpty() const; /// ÁöÇü ½ÇÇàÀ» Ãß°¡ void PushTerrainBuilding( const cTerrainBuildingInfo& info ); void PushTerrainPainting( const cTerrainPaintingInfo& info ); void PushTerrainDetailing( const cTerrainDetailingInfo& info ); /// ¿ÀºêÁ§Æ® ½ÇÇàÀ» Ãß°¡ void PushObjectCreating( const cObjectCreatingInfo& undo ); void PushObjectSelecting( const cObjectSelectingInfo& undo, const cObjectSelectingInfo& redo ); void PushObjectDeleting( const cObjectDeletingInfo& undo, const cObjectDeletingInfo& redo ); void PushObjectCopying( const cObjectCopyingInfo& undo ); void PushObjectTranslating( const NiPoint3& undo, const NiPoint3& redo ); void PushObjectRotating( const NiMatrix3& undo, const NiMatrix3& redo ); void PushObjectScaling( float undo, float redo ); /// ³×ºñ¸Þ½Ã ½ÇÇàÀ» Ãß°¡ void PushNaviMeshBuilding( const cNaviMeshBuildingInfo& info ); /// ³×ºñÇÊµå ½ÇÇàÀ» Ãß°¡ void PushNaviFieldPainting( const cNaviFieldPaintingInfo& info ); protected: /// Redo ¸®½ºÆ®¸¦ Áö¿ò void ClearRedo(); /// Undo ¼ö°¡ 10000ÀÌ ³ÑÀ¸¸é, ¾ÕÂÊÀÇ 5000°³¸¦ Áö¿î´Ù. void CheckUndo(); public: /// ´ÜÀÏü¸¦ ¸®ÅÏ static cDoingManager* GetSingleton(); protected: /// Undo ¸®½ºÆ® typedef tList cUndoList; cUndoList mUndoList; /// Redo ¸®½ºÆ® typedef tList cRedoList; cRedoList mRedoList; }; inline bool cDoingManager::IsEmpty() const { return mUndoList.IsEmpty(); } inline cDoingManager* cDoingManager::GetSingleton() { return mSingleton; } #define DOINGMAN cDoingManager::GetSingleton()