Initial implementation of the Scene object for handling scenes/levels in a more consistent and deliberate way.

This commit is contained in:
Areloch 2019-02-23 15:55:28 -06:00
parent e0627973fb
commit 1c2f90a190
37 changed files with 509 additions and 140 deletions

View file

@ -184,11 +184,11 @@ function TimeAdjustSliderCtrl::onAction(%this)
if ( !isObject( %this.tod ) )
{
if ( isObject( MissionGroup ) )
if ( isObject( getScene(0) ) )
{
for ( %i = 0; %i < MissionGroup.getCount(); %i++ )
for ( %i = 0; %i < getScene(0).getCount(); %i++ )
{
%obj = MissionGroup.getObject( %i );
%obj = getScene(0).getObject( %i );
if ( %obj.getClassName() $= "TimeOfDay" )
{

View file

@ -947,10 +947,10 @@ function ObjectBuilderGui::buildPlayerDropPoint(%this)
%this.addField("spawnClass", "TypeString", "Spawn Class", "Player");
%this.addField("spawnDatablock", "TypeDataBlock", "Spawn Data", "PlayerData DefaultPlayerData");
if( EWCreatorWindow.objectGroup.getID() == MissionGroup.getID() )
if( EWCreatorWindow.objectGroup.getID() == getScene(0).getID() )
{
if( !isObject("PlayerDropPoints") )
MissionGroup.add( new SimGroup("PlayerDropPoints") );
getScene(0).add( new SimGroup("PlayerDropPoints") );
%this.objectGroup = "PlayerDropPoints";
}
@ -967,10 +967,10 @@ function ObjectBuilderGui::buildObserverDropPoint(%this)
%this.addField("spawnClass", "TypeString", "Spawn Class", "Camera");
%this.addField("spawnDatablock", "TypeDataBlock", "Spawn Data", "CameraData Observer");
if( EWCreatorWindow.objectGroup.getID() == MissionGroup.getID() )
if( EWCreatorWindow.objectGroup.getID() == getScene(0).getID() )
{
if( !isObject("ObserverDropPoints") )
MissionGroup.add( new SimGroup("ObserverDropPoints") );
getScene(0).add( new SimGroup("ObserverDropPoints") );
%this.objectGroup = "ObserverDropPoints";
}

View file

@ -637,7 +637,7 @@ function EditorGui::addCameraBookmark( %this, %name )
if( !isObject(CameraBookmarks) )
{
%grp = new SimGroup(CameraBookmarks);
MissionGroup.add(%grp);
getScene(0).add(%grp);
}
CameraBookmarks.add( %obj );
@ -835,12 +835,17 @@ function EditorGui::syncCameraGui( %this )
function WorldEditorPlugin::onActivated( %this )
{
if(!isObject(Scenes))
$scenesRootGroup = new SimGroup(Scenes);
$scenesRootGroup.add(getScene(0));
EditorGui.bringToFront( EWorldEditor );
EWorldEditor.setVisible(true);
EditorGui.menuBar.insert( EditorGui.worldMenu, EditorGui.menuBar.dynamicItemInsertPos );
EWorldEditor.makeFirstResponder(true);
EditorTree.open(MissionGroup,true);
EWCreatorWindow.setNewObjectGroup(MissionGroup);
EditorTree.open($scenesRootGroup,true);
EWCreatorWindow.setNewObjectGroup(getScene(0));
EWorldEditor.syncGui();
@ -1464,7 +1469,7 @@ function EditorTree::onDeleteObject( %this, %object )
return true;
if( %object == EWCreatorWindow.objectGroup )
EWCreatorWindow.setNewObjectGroup( MissionGroup );
EWCreatorWindow.setNewObjectGroup( getScene(0) );
// Append it to our list.
%this.undoDeleteList = %this.undoDeleteList TAB %object;
@ -1596,6 +1601,13 @@ function EditorTree::onRightMouseUp( %this, %itemId, %mouse, %obj )
{
%popup.item[ 0 ] = "Add Camera Bookmark" TAB "" TAB "EditorGui.addCameraBookmarkByGui();";
}
else if( %obj.isMemberOfClass( "Scene" ))
{
%popup.item[ 0 ] = "Set as Active Scene" TAB "" TAB "EditorTree.showItemRenameCtrl( EditorTree.findItemByObjectId(" @ %popup.object @ ") );";
%popup.item[ 1 ] = "Delete" TAB "" TAB "EWorldEditor.deleteMissionObject(" @ %popup.object @ ");";
%popup.item[ 2 ] = "Inspect" TAB "" TAB "inspectObject(" @ %popup.object @ ");";
%popup.item[ 3 ] = "-";
}
else
{
%popup.object = %obj;
@ -1673,8 +1685,8 @@ function EditorTree::onRightMouseUp( %this, %itemId, %mouse, %obj )
if( %haveObjectEntries )
{
%popup.enableItem( 0, %obj.isNameChangeAllowed() && %obj.getName() !$= "MissionGroup" );
%popup.enableItem( 1, %obj.getName() !$= "MissionGroup" );
%popup.enableItem( 0, %obj.isNameChangeAllowed() && %obj !$= getScene(0) );
%popup.enableItem( 1, %obj !$= getScene(0) );
if( %haveLockAndHideEntries )
{
@ -2025,21 +2037,21 @@ function EWorldEditor::syncToolPalette( %this )
function EWorldEditor::addSimGroup( %this, %groupCurrentSelection )
{
%activeSelection = %this.getActiveSelection();
if ( %activeSelection.getObjectIndex( MissionGroup ) != -1 )
if ( %activeSelection.getObjectIndex( getScene(0) ) != -1 )
{
MessageBoxOK( "Error", "Cannot add MissionGroup to a new SimGroup" );
MessageBoxOK( "Error", "Cannot add Scene to a new SimGroup" );
return;
}
// Find our parent.
%parent = MissionGroup;
%parent = getScene(0);
if( !%groupCurrentSelection && isObject( %activeSelection ) && %activeSelection.getCount() > 0 )
{
%firstSelectedObject = %activeSelection.getObject( 0 );
if( %firstSelectedObject.isMemberOfClass( "SimGroup" ) )
%parent = %firstSelectedObject;
else if( %firstSelectedObject.getId() != MissionGroup.getId() )
else if( %firstSelectedObject.getId() != getScene(0).getId() )
%parent = %firstSelectedObject.parentGroup;
}

View file

@ -40,7 +40,7 @@ function ESelectObjectsWindow::toggleVisibility( %this )
/// to start searching for objects.
function ESelectObjectsWindow::getRootGroup( %this )
{
return MissionGroup;
return getScene(0);
}
//---------------------------------------------------------------------------------------------

View file

@ -179,7 +179,7 @@ function EWCreatorWindow::createStatic( %this, %file )
return;
if( !isObject(%this.objectGroup) )
%this.setNewObjectGroup( MissionGroup );
%this.setNewObjectGroup( getScene(0) );
%objId = new TSStatic()
{
@ -197,7 +197,7 @@ function EWCreatorWindow::createPrefab( %this, %file )
return;
if( !isObject(%this.objectGroup) )
%this.setNewObjectGroup( MissionGroup );
%this.setNewObjectGroup( getScene(0) );
%objId = new Prefab()
{
@ -215,7 +215,7 @@ function EWCreatorWindow::createObject( %this, %cmd )
return;
if( !isObject(%this.objectGroup) )
%this.setNewObjectGroup( MissionGroup );
%this.setNewObjectGroup( getScene(0) );
pushInstantGroup();
%objId = eval(%cmd);

View file

@ -124,6 +124,12 @@ function WorldEditor::onSelectionCentroidChanged( %this )
Inspector.refresh();
}
function WorldEditor::setSceneAsDirty(%this)
{
EWorldEditor.isDirty = true;
}
//////////////////////////////////////////////////////////////////////////
function WorldEditor::init(%this)
@ -198,7 +204,7 @@ function WorldEditor::export(%this)
function WorldEditor::doExport(%this, %file)
{
missionGroup.save("~/editor/" @ %file, true);
getScene(0).save("~/editor/" @ %file, true);
}
function WorldEditor::import(%this)

View file

@ -272,7 +272,7 @@ function EditorSaveMission()
// now write the terrain and mission files out:
if(EWorldEditor.isDirty || ETerrainEditor.isMissionDirty)
MissionGroup.save($Server::MissionFile);
getScene(0).save($Server::MissionFile);
if(ETerrainEditor.isDirty)
{
// Find all of the terrain files
@ -483,6 +483,21 @@ function EditorOpenMission(%filename)
}
}
function EditorOpenSceneAppend(%levelAsset)
{
//Load the asset's level file
exec(%levelAsset.levelFile);
//We'll assume the scene name and assetname are the same for now
%sceneName = %levelAsset.AssetName;
%scene = nameToID(%sceneName);
if(isObject(%scene))
{
//Append it to our scene heirarchy
$scenesRootGroup.add(%scene);
}
}
function EditorExportToCollada()
{