Merge pull request #1738 from Areloch/FixEditorCameraModeHandling
Some checks are pending
Linux Build / Ubuntu Latest GCC (push) Waiting to run
MacOSX Build / MacOSX Latest Clang (push) Waiting to run
Windows Build / Windows Latest MSVC (push) Waiting to run

Tweaks the logic to how the editor handles toggling and setting of camera modes to behave more consistently,
This commit is contained in:
Brian Roberts 2026-05-16 11:10:35 -05:00 committed by GitHub
commit 275bf3cd94
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 121 additions and 19 deletions

View file

@ -88,6 +88,8 @@ function CoreModule::onCreate(%this)
//This is used to build the remap keybind sets for the different actionMaps.
$RemapCount = 0;
$editorCameraMode = "1st Person"; //largely just used for camera mode toggling
}
function CoreModule::onDestroy(%this)

View file

@ -12,6 +12,7 @@ new ScriptObject( VPathEditorPlugin )
function VPathEditorPlugin::onWorldEditorStartup( %this )
{
return; //disabled for now
//----------------------------------------------------------------------
//
// Editor Init

View file

@ -13,6 +13,7 @@ new ScriptObject( VerveEditorPlugin )
function VerveEditorPlugin::onWorldEditorStartup( %this )
{
return; //disabled for now
//----------------------------------------------------------------------
//
// Editor Toggles

View file

@ -924,7 +924,7 @@ function EditorGui::syncCameraGui( %this )
EditorFreeCameraTypeOptions.checkRadioItem( 0, 4, %flyModeRadioItem);
EditorPlayerCameraTypeOptions.checkRadioItem( 0, 4, -1);
}
else if (!$isFirstPersonVar) // if 3rd person
else if ($editorCameraMode $= "3rd Person")
{
EditorGui-->trdPersonCamera.setStateOn(true);
EWorldEditorToggleCamera.setBitmap("ToolsModule:3rd_person_camera_n_image");
@ -934,7 +934,7 @@ function EditorGui::syncCameraGui( %this )
EditorPlayerCameraTypeOptions.checkRadioItem( 0, 2, %flyModeRadioItem);
EditorGuiStatusBar.setCamera("3rd Person Camera");
}
else if ($isFirstPersonVar) // if 1st Person
else if ($editorCameraMode $= "1st Person")
{
EditorGui-->PlayerCamera.setStateOn(true);
EWorldEditorToggleCamera.setBitmap("ToolsModule:player_n_image");
@ -944,7 +944,12 @@ function EditorGui::syncCameraGui( %this )
EditorPlayerCameraTypeOptions.checkRadioItem( 0, 2, %flyModeRadioItem);
EditorFreeCameraTypeOptions.checkRadioItem( 0, 4, -1);
EditorGuiStatusBar.setCamera("1st Person Camera");
}
}
else if ($editorCameraMode !$= "")
{
//Unclear what the status is, but presumably it was set elsewhere, so we'll just make sure we adhere
EditorGuiStatusBar.setCamera($editorCameraMode);
}
}
//------------------------------------------------------------------------------
@ -2449,7 +2454,6 @@ function Editor::open(%this)
%this.editorEnabled();
Canvas.setContent(EditorGui);
$isFirstPersonVar = true;
EditorGui.syncCameraGui();
if(EditorSettings.value("WorldEditor/Layout/LayoutMode", "Classic") $= "Modern")
@ -3228,6 +3232,8 @@ function EWorldEditorStatusBarCamera::onWake( %this )
%this.add( "Isometric View" );
%this.add( "Smooth Camera" );
%this.add( "Smooth Rot Camera" );
callOnModules("onCameraModesListWake", "", %this);
}
function EWorldEditorStatusBarCamera::onSelect( %this, %id, %text )
@ -3285,6 +3291,9 @@ function EWorldEditorStatusBarCamera::onSelect( %this, %id, %text )
case "Smooth Rot Camera":
commandToServer( 'SetEditorCameraNewtonDamped' );
EditorGui.setDisplayType( $EditTsCtrl::DisplayTypePerspective );
default:
callOnModules("onCameraModesListSelect", "", %text);
}
}

View file

@ -57,14 +57,30 @@ function serverCmdToggleCamera(%client)
}
%client.camera.setVelocity("0 0 0");
%client.lastControlObject = %client.getControlObject();
%client.lastCameraObject = %client.getCameraObject();
%control = %client.camera;
%camera = %client.camera;
}
else
{
%client.player.setVelocity("0 0 0");
%control = %client.player;
//Toggle back onto whatever we had been last
%control = %client.lastControlObject;
%camera = %client.lastCameraObject;
}
//%client.lastCameraObject = %client.getCameraObject();
//%client.lastControlObject = %client.getControlObject();
if(%control != %client.getControlObject() && %camera != %client.getCameraObject())
{
%client.setControlObject(%control);
%client.setCameraObject(%camera);
}
%client.setControlObject(%control);
clientCmdSyncEditorGui();
}
@ -72,9 +88,18 @@ function serverCmdSetEditorCameraPlayer(%client)
{
// Switch to Player Mode
%client.player.setVelocity("0 0 0");
%client.setControlObject(%client.player);
ServerConnection.setFirstPerson(1);
$isFirstPersonVar = 1;
if(%client.player != %client.getControlObject())
{
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.player);
%client.setCameraObject(%client.player);
}
$editorCameraMode = "1st Person";
ServerConnection.setFirstPerson(true);
clientCmdSyncEditorGui();
}
@ -83,9 +108,18 @@ function serverCmdSetEditorCameraPlayerThird(%client)
{
// Swith to Player Mode
%client.player.setVelocity("0 0 0");
%client.setControlObject(%client.player);
ServerConnection.setFirstPerson(0);
$isFirstPersonVar = 0;
if(%client.player != %client.getControlObject())
{
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.player);
%client.setCameraObject(%client.player);
}
$editorCameraMode = "3rd Person";
ServerConnection.setFirstPerson(false);
clientCmdSyncEditorGui();
}
@ -101,7 +135,11 @@ function serverCmdDropPlayerAtCamera(%client)
%obj.setTransform(%client.camera.getTransform());
%obj.setVelocity("0 0 0");
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.player);
%client.setCameraObject(%client.player);
clientCmdSyncEditorGui();
}
@ -109,7 +147,12 @@ function serverCmdDropCameraAtPlayer(%client)
{
%client.camera.setTransform(%client.player.getEyeTransform());
%client.camera.setVelocity("0 0 0");
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.camera);
%client.setCameraObject(%client.camera);
clientCmdSyncEditorGui();
}
@ -137,7 +180,12 @@ function serverCmdCycleCameraFlyType(%client)
%client.camera.newtonMode = "0";
%client.camera.newtonRotation = "0";
}
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.camera);
%client.setCameraObject(%client.camera);
clientCmdSyncEditorGui();
}
}
@ -148,7 +196,16 @@ function serverCmdSetEditorCameraStandard(%client)
%client.camera.setFlyMode();
%client.camera.newtonMode = "0";
%client.camera.newtonRotation = "0";
%client.setControlObject(%client.camera);
if(%client.camera != %client.getControlObject() && %client.camera != %client.getCameraObject())
{
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.camera);
%client.setCameraObject(%client.camera);
}
clientCmdSyncEditorGui();
}
@ -159,7 +216,12 @@ function serverCmdSetEditorCameraNewton(%client)
%client.camera.newtonMode = "1";
%client.camera.newtonRotation = "0";
%client.camera.setVelocity("0 0 0");
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.camera);
%client.setCameraObject(%client.camera);
clientCmdSyncEditorGui();
}
@ -170,21 +232,36 @@ function serverCmdSetEditorCameraNewtonDamped(%client)
%client.camera.newtonMode = "1";
%client.camera.newtonRotation = "1";
%client.camera.setAngularVelocity("0 0 0");
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.camera);
%client.setCameraObject(%client.camera);
clientCmdSyncEditorGui();
}
function serverCmdSetEditorOrbitCamera(%client)
{
%client.camera.setEditOrbitMode();
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.camera);
%client.setCameraObject(%client.camera);
clientCmdSyncEditorGui();
}
function serverCmdSetEditorFlyCamera(%client)
{
%client.camera.setFlyMode();
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.camera);
%client.setCameraObject(%client.camera);
clientCmdSyncEditorGui();
}
@ -204,6 +281,11 @@ function serverCmdEditorOrbitCameraSelectChange(%client, %size, %center)
function serverCmdEditorCameraAutoFit(%client, %radius)
{
%client.camera.autoFitRadius(%radius);
%client.lastCameraObject = %client.getCameraObject();
%client.lastControlObject = %client.getControlObject();
%client.setControlObject(%client.camera);
clientCmdSyncEditorGui();
}
%client.setCameraObject(%client.camera);
clientCmdSyncEditorGui();
}

View file

@ -87,11 +87,18 @@ function Editor::onAdd(%this)
function Editor::checkActiveLoadDone()
{
if(isObject(EditorGui) && EditorGui.loadingMission)
if(isObject(EditorGui))
{
Canvas.setContent(EditorGui);
EditorGui.loadingMission = false;
return true;
if(EditorGui.loadingMission)
{
Canvas.setContent(EditorGui);
EditorGui.loadingMission = false;
return true;
}
if(EditorGui.isAwake())
{
return true;
}
}
return false;
}