|
@@ -3668,7 +3668,7 @@ DefineEngineMethod( WorldEditor, colladaExportSelection, void, ( const char* pat
|
|
|
object->colladaExportSelection( path );
|
|
|
}
|
|
|
|
|
|
-void WorldEditor::makeSelectionPrefab( const char *filename )
|
|
|
+void WorldEditor::makeSelectionPrefab( const char *filename, bool dontReplaceOriginals )
|
|
|
{
|
|
|
if ( mSelected->size() == 0 )
|
|
|
{
|
|
@@ -3761,25 +3761,28 @@ void WorldEditor::makeSelectionPrefab( const char *filename )
|
|
|
}
|
|
|
|
|
|
// Save out .prefab file.
|
|
|
- group->save( filename, false, "$ThisPrefab = " );
|
|
|
+ group->save( filename, false, "$ThisPrefab = " );
|
|
|
|
|
|
- // Allocate Prefab object and add to level.
|
|
|
- Prefab *fab = new Prefab();
|
|
|
- fab->setFile( filename );
|
|
|
- fabMat.inverse();
|
|
|
- fab->setTransform( fabMat );
|
|
|
- fab->registerObject();
|
|
|
- scene->addObject( fab );
|
|
|
+ if (!dontReplaceOriginals)
|
|
|
+ {
|
|
|
+ // Allocate Prefab object and add to level.
|
|
|
+ Prefab* fab = new Prefab();
|
|
|
+ fab->setFile(filename);
|
|
|
+ fabMat.inverse();
|
|
|
+ fab->setTransform(fabMat);
|
|
|
+ fab->registerObject();
|
|
|
+ scene->addObject(fab);
|
|
|
|
|
|
- // Select it, mark level as dirty.
|
|
|
- clearSelection();
|
|
|
- selectObject( fab );
|
|
|
- setDirty();
|
|
|
+ // Select it, mark level as dirty.
|
|
|
+ clearSelection();
|
|
|
+ selectObject(fab);
|
|
|
+ setDirty();
|
|
|
|
|
|
- // Delete original objects and temporary SimGroup.
|
|
|
- group->deleteObject();
|
|
|
- for ( S32 i = 0; i < cleanup.size(); i++ )
|
|
|
- cleanup[i]->deleteObject();
|
|
|
+ // Delete original objects and temporary SimGroup.
|
|
|
+ group->deleteObject();
|
|
|
+ for (S32 i = 0; i < cleanup.size(); i++)
|
|
|
+ cleanup[i]->deleteObject();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void WorldEditor::explodeSelectedPrefab()
|
|
@@ -3827,19 +3830,19 @@ void WorldEditor::explodeSelectedPrefab()
|
|
|
setDirty();
|
|
|
}
|
|
|
|
|
|
-void WorldEditor::makeSelectionAMesh(const char *filename)
|
|
|
+bool WorldEditor::makeSelectionAMesh(const char *filename)
|
|
|
{
|
|
|
if (mSelected->size() == 0)
|
|
|
{
|
|
|
Con::errorf("WorldEditor::makeSelectionAMesh - Nothing selected.");
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
Scene* scene = Scene::getRootScene();
|
|
|
if (!scene)
|
|
|
{
|
|
|
Con::errorf("WorldEditor::makeSelectionAMesh - Could not find root Scene.");
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
Vector< SimObject* > stack;
|
|
@@ -3887,7 +3890,7 @@ void WorldEditor::makeSelectionAMesh(const char *filename)
|
|
|
if (found.empty())
|
|
|
{
|
|
|
Con::warnf("WorldEditor::makeSelectionPrefab - No valid objects selected.");
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
// SimGroup we collect prefab objects into.
|
|
@@ -3911,7 +3914,7 @@ void WorldEditor::makeSelectionAMesh(const char *filename)
|
|
|
}
|
|
|
|
|
|
if ( objectList.empty() )
|
|
|
- return;
|
|
|
+ return false;
|
|
|
|
|
|
//
|
|
|
Point3F centroid;
|
|
@@ -3982,6 +3985,11 @@ void WorldEditor::makeSelectionAMesh(const char *filename)
|
|
|
ColladaUtils::exportToCollada(filename, exportData);
|
|
|
//
|
|
|
|
|
|
+ if (Platform::isFile(filename))
|
|
|
+ return true;
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+
|
|
|
// Allocate TSStatic object and add to level.
|
|
|
TSStatic *ts = new TSStatic();
|
|
|
ts->setShapeFileName(StringTable->insert(filename));
|
|
@@ -4000,11 +4008,11 @@ void WorldEditor::makeSelectionAMesh(const char *filename)
|
|
|
objectList[i]->deleteObject();
|
|
|
}
|
|
|
|
|
|
-DefineEngineMethod( WorldEditor, makeSelectionPrefab, void, ( const char* filename ),,
|
|
|
+DefineEngineMethod( WorldEditor, makeSelectionPrefab, void, ( const char* filename, bool dontDeleteOriginals ), (false),
|
|
|
"Save selected objects to a .prefab file and replace them in the level with a Prefab object."
|
|
|
"@param filename Prefab file to save the selected objects to.")
|
|
|
{
|
|
|
- object->makeSelectionPrefab( filename );
|
|
|
+ object->makeSelectionPrefab( filename, dontDeleteOriginals);
|
|
|
}
|
|
|
|
|
|
DefineEngineMethod( WorldEditor, explodeSelectedPrefab, void, (),,
|
|
@@ -4013,11 +4021,11 @@ DefineEngineMethod( WorldEditor, explodeSelectedPrefab, void, (),,
|
|
|
object->explodeSelectedPrefab();
|
|
|
}
|
|
|
|
|
|
-DefineEngineMethod(WorldEditor, makeSelectionAMesh, void, (const char* filename), ,
|
|
|
+DefineEngineMethod(WorldEditor, makeSelectionAMesh, bool, (const char* filename), ,
|
|
|
"Save selected objects to a .dae collada file and replace them in the level with a TSStatic object."
|
|
|
"@param filename collada file to save the selected objects to.")
|
|
|
{
|
|
|
- object->makeSelectionAMesh(filename);
|
|
|
+ return object->makeSelectionAMesh(filename);
|
|
|
}
|
|
|
|
|
|
DefineEngineMethod( WorldEditor, mountRelative, void, ( SceneObject *objA, SceneObject *objB ),,
|