Пример #1
0
void CChildView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
  if (m_EditorMode && m_ObjSelCount == 1) {
    CPoint pt;
    pt = ScreenToMap(point);
    CContentObj* obj = theApp.m_map.Content.GetObjectAt(pt, theApp.m_map.m_iLevel);
    if (obj && obj->Selected)
      EditObject(obj);
  }
	CWnd ::OnLButtonDblClk(nFlags, point);
}
Пример #2
0
void CChildView::OnProperties() 
{
  CContentObjects& objs = theApp.m_map.Content.Objects;
  CContentObj *o;
  int i;

  for (i = 0; i < objs.GetSize(); i++) {
    o = objs[i];
    if (o->Selected) {
      EditObject(o);
      return;
    }
  }
}
Пример #3
0
/////////////////////////////////////////////////////////////////////////////
// FUNCTION....: EditMenuDialogProc
//
// DESCRIPTION.:
//
/////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK _export EditMenuDialogProc(
  HWND    hDlg,
  UINT    message,
  WPARAM  wParam,
  LPARAM  lParam)
  {
  BOOL      result;
  OBJECTID  objID;

	switch ( message )
		{
		case WM_INITDIALOG:
			SetWindowLong(hDlg, DWL_USER, lParam);
      InitDialog(hDlg, (OBJECTID)lParam);
	    AUtlSetTitleFont(OTYPE_MENU, NULL, GetDlgItem(hDlg, IDD_OBJECT));
			AUtlCenterDialog(hDlg, 0);
  		result = FALSE;
      break;

		case WM_COMMAND:
			objID = (OBJECTID)GetWindowLong(hDlg, DWL_USER);
			switch ( wParam )
				{
				case IDOK:
					SetFocus(GetDlgItem(hDlg, IDOK));
					UpdateObject(hDlg, objID);
					EndDialog(hDlg, TRUE);
					result = TRUE;
          break;

				case IDCANCEL:
					SetFocus(GetDlgItem(hDlg, IDCANCEL));
					EndDialog(hDlg, FALSE);
					result = TRUE;
          break;

				case IDHELP:
//					WinHelp (hDlg, "serhelp.hlp", HELP_CONTEXT, HELPID_OBJD_Menu) ;
					result = TRUE;
          break;

				case BTN_DISPLAYNAME:
				case BTN_DISPLAYTITLE:
					LbTitleUpdate(hDlg, LB_SOURCE, TRUE);
					LbTitleUpdate(hDlg, LB_DESTINATION, TRUE);
					result = TRUE;
          break;

				case BTN_SHOWITEMS:
				case BTN_SHOWMENUS:
					LbContentUpdate(hDlg,objID);
					UpdateAddButton(hDlg);
					result = TRUE;
          break;

				case BTN_ADD:
				  InsertObject(hDlg);
					UpdateAddButton(hDlg);
					UpdateSeparateButton(hDlg);
			    result = TRUE;
          break;

				case BTN_REMOVE:
					DeleteObjects(hDlg);
					UpdateEditButton(hDlg);
					UpdateRemoveButton(hDlg);
					UpdateSeparateButton(hDlg);
					result = TRUE;
          break;

				case BTN_EDIT:
					EditObject(hDlg);
          LbTitleUpdate(hDlg, LB_SOURCE, TRUE);
					LbTitleUpdate(hDlg, LB_DESTINATION, TRUE);
					result = TRUE;
          break;

				case BTN_SEPARATOR:
					InsertSeparator(hDlg);
					result = TRUE;
          break;

		    case LB_SOURCE:
		 			UpdateAddButton(hDlg);
					if (HIWORD(lParam) == LBN_DBLCLK)
						{
						InsertObject(hDlg);
				    UpdateAddButton(hDlg);
						UpdateSeparateButton(hDlg);
			      }
					result = TRUE;
          break;
          
				case LB_DESTINATION:
					UpdateRemoveButton(hDlg);
					UpdateEditButton(hDlg);
			    if (HIWORD(lParam) == LBN_DBLCLK)
			      {
						EditObject(hDlg);
				    LbTitleUpdate(hDlg, LB_SOURCE, TRUE);
						LbTitleUpdate(hDlg, LB_DESTINATION, TRUE);
						}
			    result = TRUE;
          break;

        default:
          result = FALSE;
				}
			break;

    default:
      result = FALSE;
      break;

	  }

  return result;

  }
Пример #4
0
/**
 * Exec handler, parsing the passed in command
 *
 * @param InWorld World Context
 * @param Cmd	Command to parse
 * @param Ar	output device used for logging
 */
bool FDebugToolExec::Exec( UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar )
{
	// these commands are only allowed in standalone games
#if UE_BUILD_SHIPPING || UE_BUILD_TEST
	if (GEngine->GetNetMode(InWorld) != NM_Standalone || (GEngine->GetWorldContextFromWorldChecked(InWorld).PendingNetGame != NULL))
	{
		return 0;
	}
	// Edits the class defaults.
	else
#endif
	if( FParse::Command(&Cmd,TEXT("EDITDEFAULT")) )
	{
		// not allowed in the editor as this command can have far reaching effects such as impacting serialization
		if (!GIsEditor)
		{
			UClass* Class = NULL;
			if( ParseObject<UClass>( Cmd, TEXT("CLASS="), Class, ANY_PACKAGE ) == false )
			{
				TCHAR ClassName[256];
				if ( FParse::Token(Cmd,ClassName,ARRAY_COUNT(ClassName), 1) )
				{
					Class = FindObject<UClass>( ANY_PACKAGE, ClassName);
				}
			}

			if (Class)
			{
				EditObject(Class->GetDefaultObject(), true);
			}
			else
			{
				Ar.Logf( TEXT("Missing class") );
			}
		}
		return 1;
	}
	else if (FParse::Command(&Cmd,TEXT("EDITOBJECT")))
	{
		UClass* searchClass = NULL;
		UObject* foundObj = NULL;
		// Search by class.
		if (ParseObject<UClass>(Cmd, TEXT("CLASS="), searchClass, ANY_PACKAGE))
		{
			// pick the first valid object
			for (FObjectIterator It(searchClass); It && foundObj == NULL; ++It) 
			{
				if (!It->IsPendingKill() && !It->IsTemplate())
				{
					foundObj = *It;
				}
			}
		}
		// Search by name.
		else
		{
			FName searchName;
			FString SearchPathName;
			if ( FParse::Value(Cmd, TEXT("NAME="), searchName) )
			{
				// Look for actor by name.
				for( TObjectIterator<UObject> It; It && foundObj == NULL; ++It )
				{
					if (It->GetFName() == searchName) 
					{
						foundObj = *It;
					}
				}
			}
			else if ( FParse::Token(Cmd,SearchPathName, true) )
			{
				foundObj = FindObject<UObject>(ANY_PACKAGE,*SearchPathName);
			}
		}

		// Bring up an property editing window for the found object.
		if (foundObj != NULL)
		{
			// not allowed in the editor unless it is a PIE object as this command can have far reaching effects such as impacting serialization
			if (!GIsEditor || ((!foundObj->IsTemplate() && (foundObj->GetOutermost()->PackageFlags & PKG_PlayInEditor))))
			{
				EditObject(foundObj, true);
			}
		}
		else
		{
			Ar.Logf(TEXT("Target not found"));
		}
		return 1;
	}
	else if (FParse::Command(&Cmd,TEXT("EDITARCHETYPE")))
	{
		UObject* foundObj = NULL;
		// require fully qualified path name
		FString SearchPathName;
		if (FParse::Token(Cmd, SearchPathName, true))
		{
			foundObj = FindObject<UObject>(ANY_PACKAGE,*SearchPathName);
		}

		// Bring up an property editing window for the found object.
		if (foundObj != NULL)
		{
			// not allowed in the editor unless it is a PIE object as this command can have far reaching effects such as impacting serialization
			if (!GIsEditor || ((!foundObj->IsTemplate() && (foundObj->GetOutermost()->PackageFlags & PKG_PlayInEditor))))
			{
				EditObject(foundObj, false);
			}
		}
		else
		{
			Ar.Logf(TEXT("Target not found"));
		}
		return 1;
	}
	// Edits an objects properties or copies them to the clipboard.
	else if( FParse::Command(&Cmd,TEXT("EDITACTOR")) )
	{
		UClass*		Class = NULL;
		AActor*		Found = NULL;

		if (FParse::Command(&Cmd, TEXT("TRACE")))
		{
			APlayerController* PlayerController = InWorld->GetFirstPlayerController();
			if (PlayerController != NULL)
			{
				// Do a trace in the player's facing direction and edit anything that's hit.
				FVector PlayerLocation;
				FRotator PlayerRotation;
				PlayerController->GetPlayerViewPoint(PlayerLocation, PlayerRotation);
				FHitResult Hit(1.0f);
				PlayerController->GetWorld()->LineTraceSingle(Hit, PlayerLocation, PlayerLocation + PlayerRotation.Vector() * 10000.f, ECC_Pawn, FCollisionQueryParams(NAME_None, true, PlayerController->GetPawn()));
				Found = Hit.GetActor();
			}
		}
		// Search by class.
		else if( ParseObject<UClass>( Cmd, TEXT("CLASS="), Class, ANY_PACKAGE ) && Class->IsChildOf(AActor::StaticClass()) )
		{
			UGameEngine* GameEngine = Cast<UGameEngine>(GEngine);
			
			// Look for the closest actor of this class to the player.
			FVector PlayerLocation(0.0f);
			APlayerController* PlayerController = InWorld->GetFirstPlayerController();
			if (PlayerController != NULL)
			{
				FRotator DummyRotation;
				PlayerController->GetPlayerViewPoint(PlayerLocation, DummyRotation);
			}

			float   MinDist = FLT_MAX;
			for( TActorIterator<AActor> It(InWorld, Class); It; ++It )
			{
				if ( !It->IsPendingKill() )
				{
					float const Dist = (PlayerController && It->GetRootComponent()) ? FVector::Dist(It->GetActorLocation(), PlayerLocation) : 0.f;
					if (Dist < MinDist)
					{
						MinDist = Dist;
						Found   = *It;
					}
				}
			}
		}
		// Search by name.
		else
		{
			FName ActorName;
			if( FParse::Value( Cmd, TEXT("NAME="), ActorName ) )
			{
				// Look for actor by name.
				for( FActorIterator It(InWorld); It; ++It )
				{
					if( It->GetFName() == ActorName )
					{
						Found = *It;
						break;
					}
				}
			}
		}

		// Bring up an property editing window for the found object.
		if( Found )
		{
			// not allowed in the editor unless it is a PIE object as this command can have far reaching effects such as impacting serialization
			if (!GIsEditor || ((!Found->IsTemplate() && (Found->GetOutermost()->PackageFlags & PKG_PlayInEditor))))
			{
				EditObject(Found, true);
			}
		}
		else
		{
			Ar.Logf( TEXT("Target not found") );
		}

		return 1;
	}
	else
	{
		return 0;
	}
}