void FWorldTileModel::SetLevelPosition(const FIntPoint& InPosition) { // Parent absolute position TSharedPtr<FWorldTileModel> ParentModel = StaticCastSharedPtr<FWorldTileModel>(GetParent()); FIntPoint ParentAbsolutePostion = ParentModel.IsValid() ? ParentModel->GetAbsoluteLevelPosition() : FIntPoint::ZeroValue; // Actual offset FIntPoint Offset = InPosition - TileDetails->AbsolutePosition; // Update absolute position TileDetails->AbsolutePosition = InPosition; // Assign new position as relative to parent TileDetails->Position = TileDetails->AbsolutePosition - ParentAbsolutePostion; // Flush changes to level package OnLevelInfoUpdated(); // Move actors if necessary ULevel* Level = GetLevelObject(); if (Level != NULL && Level->bIsVisible) { // Shelve level, if during this translation level will end up out of Editable area if (!ShouldBeVisible(LevelCollectionModel.EditableWorldArea())) { Shelve(); } // Move actors if (Offset != FIntPoint::ZeroValue) { Level->ApplyWorldOffset(FVector(Offset), false); } } if (IsLandscapeBased()) { FixLandscapeSectionsOffset(); } // Transform child levels for (auto It = AllChildren.CreateIterator(); It; ++It) { TSharedPtr<FWorldTileModel> ChildModel = StaticCastSharedPtr<FWorldTileModel>(*It); FIntPoint ChildPosition = TileDetails->AbsolutePosition + ChildModel->GetRelativeLevelPosition(); ChildModel->SetLevelPosition(ChildPosition); } }
bool ShelveCommand::Execute() { bool bRet = false; CShelve dlg; dlg.m_pathList = pathList; if (parser.HasKey(L"shelvename")) { dlg.m_sShelveName = parser.GetVal(L"shelvename"); } if (parser.HasKey(L"noui")||(dlg.DoModal()==IDOK)) { if (cmdLinePath.IsEmpty()) { cmdLinePath = pathList.GetCommonRoot(); } bRet = Shelve(dlg.m_sShelveName, dlg.m_pathList); } return bRet; }