#include "stdafx.h" #include "ObjectEditor.h" #include "MainFrame.h" #include "MapEditorView.h" #include "ObjectInfoDialog.h" #include "Engine/StaticSceneNode.h" #include "Doing/DoingManager.h" #include "Doing/ObjectCopying.h" void cObjectEditor::CopyGroup() { if( mObjectGroup->IsEmpty() ) return; /// ³ëµåµéÀ» º¹»çÇϸ鼭 ½ÇÇà Á¤º¸¸¦ ¼öÁý typedef tHashSet cSelectedSet; const cSelectedSet& selectedSet = mObjectGroup->GetSelectedSet(); unsigned int numNodes = selectedSet.GetSize(); cObjectCopyingInfo undo; undo.mNumObjects = numNodes; cStaticSceneNode** p = undo.mNodes = new cStaticSceneNode*[numNodes]; cSelectedSet::cConstIterator i = selectedSet.Begin(); cSelectedSet::cConstIterator end = selectedSet.End(); for( ; i != end; ++i, ++p ) { cStaticSceneNode* n = Clone( (cStaticSceneNode*)(*i) ); assert( n && "failed to clone object" ); *p = n; } /// ½ÇÇà Á¤º¸¸¦ Ãß°¡ DOINGMAN->PushObjectCopying( undo ); /// ¿øº» ±×·ì À§Ä¡ À̵¿ SetGroupTranslate( mObjectGroup->GetTranslate() + NiPoint3(0.0f, 0.0f, 300.0f), true ); /// ºä¸¦ °»½Å VIEW->Update(); /// º¯°æ ¿©ºÎ¸¦ ¼³Á¤ MAIN->SetSceneModified( true ); /// Á¤º¸ ´ÙÀ̾ó·Î±×¸¦ °»½Å mInfoDialog->UpdateNumObjects( mCreatedSet.GetSize() ); } void cObjectEditor::Undo( const cObjectCopying& doing ) { /// ¿ÀºêÁ§Æ®µéÀ» Á×ÀÓ unsigned int numNodes = doing.mNumObjects; cStaticSceneNode** p = doing.mNodes; for( unsigned int i = 0; i < numNodes; ++i, ++p ) { OBJECTEDIT->Kill( *p ); } } void cObjectEditor::Redo( const cObjectCopying& doing ) { /// Á×ÀÎ ¿ÀºêÁ§Æ®µéÀ» ´Ù½Ã »ì¸² -_-; unsigned int numNodes = doing.mNumObjects; cStaticSceneNode** p = doing.mNodes; for( unsigned int i = 0; i < numNodes; ++i, ++p ) { OBJECTEDIT->Rebirth( *p ); } }