Quellcode durchsuchen

Merge pull request #753 from Areloch/miscFixes20220327

Misc Fixes for 2022/03/27
Brian Roberts vor 3 Jahren
Ursprung
Commit
c64671ff91
27 geänderte Dateien mit 311 neuen und 127 gelöschten Zeilen
  1. 5 0
      Engine/source/gfx/bitmap/gBitmap.cpp
  2. 1 1
      Engine/source/gui/worldEditor/guiConvexShapeEditorCtrl.cpp
  3. 10 1
      Templates/BaseGame/game/data/ExampleModule/ExampleModule.tscript
  4. 6 1
      Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript
  5. 0 8
      Templates/BaseGame/game/data/UI/images/dropdown_textEdit_image.asset.taml
  6. 2 2
      Templates/BaseGame/game/tools/assetBrowser/art/terrainIcon_image.asset.taml
  7. 1 7
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript
  8. 1 6
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.tscript
  9. 1 6
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cubemap.tscript
  10. 1 12
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gameObject.tscript
  11. 1 6
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.tscript
  12. 15 4
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript
  13. 0 5
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.tscript
  14. 11 12
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript
  15. 8 9
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript
  16. 1 1
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/sound.tscript
  17. 2 18
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/stateMachine.tscript
  18. 72 2
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript
  19. 2 2
      Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript
  20. 8 5
      Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript
  21. 1 1
      Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript
  22. 9 0
      Templates/BaseGame/game/tools/guiEditor/scripts/guiEditorCanvas.ed.tscript
  23. 13 0
      Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui
  24. 80 2
      Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript
  25. 6 6
      Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui
  26. 4 2
      Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript
  27. 50 8
      Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript

+ 5 - 0
Engine/source/gfx/bitmap/gBitmap.cpp

@@ -1373,6 +1373,11 @@ DefineEngineFunction(saveScaledImage, bool, (const char* bitmapSource, const cha
       return false;
    }
 
+   if (!Platform::isFile(bitmapSource))
+   {
+      return false;
+   }
+
    //First, gotta check the extension, as we have some extra work to do if it's
    //a DDS file
    const char* ret = dStrrchr(bitmapSource, '.');

+ 1 - 1
Engine/source/gui/worldEditor/guiConvexShapeEditorCtrl.cpp

@@ -204,7 +204,7 @@ void GuiConvexEditorCtrl::setVisible( bool val )
 			mConvexHL = NULL;			
 			mFaceHL = -1;
 
-         setSelection( NULL, -1 );
+            setSelection( NULL, -1 );
 
 			WorldEditor *wedit;
 			if ( Sim::findObject( "EWorldEditor", wedit ) )

+ 10 - 1
Templates/BaseGame/game/data/ExampleModule/ExampleModule.tscript

@@ -81,7 +81,6 @@ function ExampleModule::initClient(%this)
       exec(%prefPath @ "/keybinds." @ $TorqueScriptFileExtension);
       
    %this.queueExec("./scripts/inputCommands");
-   addOptionsMenuCategory("Example Options", "testExampleOptions();");
 }
 
 //This is called when a game session client successfuly connects to a game server. 
@@ -108,7 +107,17 @@ function ExampleModule::onDestroyClientConnection(%this)
    ExampleMoveMap.pop();
 }
 
+function ExampleModule::populateOptionsMenuCategories(%this)
+{
+   addOptionsMenuCategory("Example Options", "testExampleOptions();");
+}
+
 function testExampleOptions()
 {
+   OptionsMenuSettingsList.clear();
+   
+   OptionName.setText("");
+   OptionDescription.setText("");
+   
    addListOption("Test Option", "This is a test option", $testOptionValue, "OptionA\tOptionB");  
 }

+ 6 - 1
Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript

@@ -65,6 +65,8 @@ function OptionsMenu::onAdd(%this)
    addOptionsMenuCategory("Audio", "populateAudioSettingsList();");
    addOptionsMenuCategory("Keyboard & Mouse", "populateKeyboardMouseSettingsList();");
    addOptionsMenuCategory("Gamepad", "populateGamepadSettingsList();");
+   
+   callOnModules("populateOptionsMenuCategories", "Game");
 }
 
 function OptionsMenuSettingsList::onAdd(%this)
@@ -898,7 +900,10 @@ function OptionsMenu::onKeybindChanged(%this, %actionMap, %keybind)
 //
 function addOptionsMenuCategory(%categoryName, %selectCallback)
 {
-   OptionsMenu.optionsCategories.add(%categoryName, %selectCallback);
+   //Don't add duplicates!
+   %index = OptionsMenu.optionsCategories.getIndexFromKey(%categoryName);
+   if(%index == -1)
+      OptionsMenu.optionsCategories.add(%categoryName, %selectCallback);
 }
 
 function removeOptionsMenuCategory(%categoryName)

+ 0 - 8
Templates/BaseGame/game/data/UI/images/dropdown_textEdit_image.asset.taml

@@ -1,8 +0,0 @@
-<ImageAsset
-    canSave="true"
-    canSaveDynamicFields="true"
-    AssetName="dropdown_textEdit_image"
-    imageFile="@assetFile=dropdown-textEdit.png"
-    UseMips="true"
-    isHDRImage="false"
-    imageType="Albedo" />

+ 2 - 2
Templates/BaseGame/game/tools/assetBrowser/art/terrainIcon_image.asset.taml

@@ -1,8 +1,8 @@
 <ImageAsset
     canSave="true"
     canSaveDynamicFields="true"
-    AssetName="terrainMaterialIcon_image"
-    imageFile="@assetFile=terrainMaterialIcon.png"
+    AssetName="terrainIcon_image"
+    imageFile="@assetFile=terrainIcon.png"
     UseMips="true"
     isHDRImage="false"
     imageType="Albedo" />

+ 1 - 7
Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript

@@ -931,13 +931,7 @@ function AssetBrowser::deleteMaterial( %this, %materialName, %secondFilter, %sec
       AssetBrowserPerMan.saveDirty();
    }
       
-   AssetBrowser.preloadFilter();
-}
-
-function AssetBrowser::thumbnailCountUpdate(%this)
-{
-   $Pref::AssetBrowser::ThumbnailCountIndex = AssetBrowser-->materialPreviewCountPopup.getSelected();
-   AssetBrowser.LoadFilter( AssetBrowser.currentFilter, AssetBrowser.currentStaticFilter );
+   AssetBrowser.refresh();
 }
 
 function AssetBrowser::toggleTagFilterPopup(%this)

+ 1 - 6
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.tscript

@@ -54,12 +54,7 @@ function AssetBrowser::createComponentAsset(%this)
 	%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
 
-	AssetBrowser.loadFilters();
-	
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "ComponentAsset");
-	
-	AssetBrowserFilterTree.onSelect(%smItem);
+	AssetBrowser.refresh();
 	
 	return %tamlpath;
 }

+ 1 - 6
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cubemap.tscript

@@ -28,12 +28,7 @@ function AssetBrowser::createCubemapAsset(%this)
 	%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
 
-	AssetBrowser.loadFilters();
-	
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "CubemapAsset");
-	
-	AssetBrowserFilterTree.onSelect(%smItem);
+	AssetBrowser.refresh();
 	
 	return %tamlpath;
 }

+ 1 - 12
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gameObject.tscript

@@ -73,21 +73,10 @@ function AssetBrowser::duplicateGameObjectAsset(%this, %assetDef, %targetModule)
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlPath);
 
    //Refresh the browser
-	AssetBrowser.loadFilters();
-	
-	//Ensure our context is set
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%targetModule);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "GameObjectAsset");
-	
-	AssetBrowserFilterTree.selectItem(%smItem);
+	AssetBrowser.refresh();
 	
 	//Rename it for convenience
 	AssetBrowser.performRenameAsset(%assetName, "New" @ %assetName);
-	
-	//Expand and refresh the target module
-   AssetBrowserFilterTree.expandItem(%treeItemId,true);
-	
-	AssetBrowserFilterTree.buildVisibleTree();
 }
 
 //not used

+ 1 - 6
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.tscript

@@ -79,12 +79,7 @@ function AssetBrowser::createGUIAsset(%this)
 	%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
 
-	AssetBrowser.loadFilters();
-	
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "GUIs");
-	
-	AssetBrowserFilterTree.onSelect(%smItem);
+	AssetBrowser.refresh();
 	
 	return %tamlpath;  
 }

+ 15 - 4
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript

@@ -233,13 +233,17 @@ function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData)
    
    //Revalidate. If it didn't work, just use the default placeholder one
    if(!isFile(%previewFilePath))
-      %previewAssetName = "ToolsModule:genericAssetIcon_image";
+   {
+      %previewData.previewImage = "ToolsModule:genericAssetIcon_image";
+   }
+   else
+   {
+      %previewData.previewImage = %previewAssetName;
+   }
    
    %previewData.assetName = %assetDef.assetName;
    %previewData.assetPath = %assetDef.scriptFile;
    
-   %previewData.previewImage = %previewAssetName;
-   
    %previewData.assetFriendlyName = %assetDef.assetName;
    %previewData.assetDesc = %assetDef.description;
    
@@ -324,7 +328,14 @@ function GuiInspectorTypeImageAssetPtr::onControlDropped( %this, %payload, %posi
    
    if(%assetType $= "ImageAsset")
    {
-      echo("DROPPED A IMAGE ON AN IMAGE ASSET COMPONENT FIELD!");  
+      %module = %payload.moduleName;
+      %asset = %payload.assetName;
+      
+      %oldValue = %this.targetObject.bitmapAsset;
+      %arrayIndex = "";
+      
+      %targetObject = %this.targetObject;
+      %targetObject.bitmapAsset = %module @ ":" @ %asset; 
    }
    
    EWorldEditor.isDirty = true;

+ 0 - 5
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.tscript

@@ -61,11 +61,6 @@ function AssetBrowser::createLevelAsset(%this)
 
 	AssetBrowser.refresh();
 	
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Levels");
-	
-	AssetBrowserFilterTree.onSelect(%smItem);
-	
 	return %tamlpath;  
 }
 

+ 11 - 12
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript

@@ -24,12 +24,7 @@ function AssetBrowser::createMaterialAsset(%this)
    %moduleDef = ModuleDatabase.findModule(%moduleName, 1);
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
 
-	AssetBrowser.loadFilters();
-	
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Materials");
-	
-	AssetBrowserFilterTree.onSelect(%smItem);
+	AssetBrowser.refresh();
    
 	return %tamlpath;
 }
@@ -428,7 +423,7 @@ function AssetBrowser::importMaterialAsset(%this, %assetItem)
 
 function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData)
 {
-   %module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%assetDef.getScriptPath())));
+   %module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(AssetDatabase.getAssetFilePath(%assetDef.getAssetId()))));
    %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/";
 
    if(!IsDirectory(%previewPath))
@@ -460,8 +455,8 @@ function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData)
    {
       displayEditorLoadingGui("Generating Material Asset Preview...");
    
-   if(isObject(%assetDef.materialDefinitionName))
-   {
+      if(isObject(%assetDef.materialDefinitionName))
+      {
          %previewShapeDef = AssetDatabase.acquireAsset("ToolsModule:previewSphereShape");
          %generatedFilePath = %previewShapeDef.generateCachedPreviewImage(256, %assetDef.materialDefinitionName);
       
@@ -488,13 +483,17 @@ function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData)
    
    //Revalidate. If it didn't work, just use the default placeholder one
    if(!isFile(%previewFilePath))
-      %previewAssetName = "ToolsModule:materialIcon_image";
+   {
+      %previewData.previewImage = "ToolsModule:materialIcon_image";
+   }
+   else
+   {
+      %previewData.previewImage = "ToolsModule:" @ %previewAssetName;
+   }
       
    %previewData.assetName = %assetDef.assetName;
    %previewData.assetPath = %assetDef.scriptFile;
    
-   %previewData.previewImage = "ToolsModule:" @ %previewAssetName;//%assetDef.fileName;
-   
    %previewData.assetFriendlyName = %assetDef.assetName;
    %previewData.assetDesc = %assetDef.description;
 

+ 8 - 9
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript

@@ -26,12 +26,7 @@ function AssetBrowser::createShapeAsset(%this)
 	%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
 
-	AssetBrowser.loadFilters();
-	
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "ShapeAsset");
-	
-	AssetBrowserFilterTree.onSelect(%smItem);
+	AssetBrowser.refresh();
 	
 	return %tamlpath;
 }
@@ -302,12 +297,16 @@ function AssetBrowser::buildShapeAssetPreview(%this, %assetDef, %previewData)
    
    //Revalidate. If it didn't work, just use the default placeholder one
    if(!isFile(%previewFilePath))
-      %previewAssetName = "ToolsModule:genericAssetIcon_image";
+   {
+      %previewData.previewImage = "ToolsModule:genericAssetIcon_image";
+   }
+   else
+   {
+      %previewData.previewImage = "ToolsModule:" @ %previewAssetName;
+   }
    
    %previewData.assetName = %assetDef.assetName;
    %previewData.assetPath = %assetDef.fileName;
-
-   %previewData.previewImage = "ToolsModule:" @ %previewAssetName;//%assetDef.fileName;
    
    %previewData.assetFriendlyName = %assetDef.assetName;
    %previewData.assetDesc = %assetDef.description;

+ 1 - 1
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/sound.tscript

@@ -75,7 +75,7 @@ function AssetBrowser::onSoundAssetEditorDropped(%this, %assetDef, %position)
    
 }
 
-function GuiInspectorTypeShapeAssetPtr::onControlDropped( %this, %payload, %position )
+function GuiInspectorTypeSoundAssetPtr::onControlDropped( %this, %payload, %position )
 {
    Canvas.popDialog(EditorDragAndDropLayer);
    

+ 2 - 18
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/stateMachine.tscript

@@ -47,12 +47,7 @@ function AssetBrowser::createStateMachineAsset(%this)
    %moduleDef = ModuleDatabase.findModule(%moduleName, 1);
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
 
-	AssetBrowser.loadFilters();
-	
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "StateMachines");
-	
-	AssetBrowserFilterTree.onSelect(%smItem);
+	AssetBrowser.refresh();
    
 	return %tamlpath;
 }
@@ -123,21 +118,10 @@ function AssetBrowser::duplicateStateMachineAsset(%this, %assetDef)
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlPath);
 
    //Refresh the browser
-	AssetBrowser.loadFilters();
-	
-	//Ensure our context is set
-	%treeItemId = AssetBrowserFilterTree.findItemByName(%targetModule);
-	%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "StateMachineAsset");
-	
-	AssetBrowserFilterTree.selectItem(%smItem);
+	AssetBrowser.refresh();
 	
 	//Rename it for convenience
 	AssetBrowser.performRenameAsset(%assetName, "New" @ %assetName);
-	
-	//Expand and refresh the target module
-   AssetBrowserFilterTree.expandItem(%treeItemId,true);
-	
-	AssetBrowserFilterTree.buildVisibleTree();
 }
 
 function AssetBrowser::renameGameObjectAsset(%this, %assetDef, %newAssetId, %originalName, %newName)

+ 72 - 2
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript

@@ -91,15 +91,85 @@ function AssetBrowser::deleteTerrainMaterialAsset(%this, %assetDef)
 
 function AssetBrowser::buildTerrainMaterialAssetPreview(%this, %assetDef, %previewData)
 {
+   %module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(AssetDatabase.getAssetFilePath(%assetDef.getAssetId()))));
+   %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/";
+
+   if(!IsDirectory(%previewPath))
+   {
+      %this.dirHandler.createFolder(%previewPath);
+   }
+
+   %generatePreview = false;
+
+   %previewFilePath = %previewPath @ %assetDef.assetName @ "_Preview.dds";
+   if(!isFile(%previewFilePath))
+   {
+      %generatePreview = true;
+   }
+   else
+   {
+      if(isObject(%assetDef.materialDefinitionName))
+      {
+         if(compareFileTimes(%assetDef.materialDefinitionName.getDiffuseMap(), %previewFilePath) == 1 ||
+            compareFileTimes(%assetDef.materialDefinitionName.getFilename(), %previewFilePath) == 1)
+         %generatePreview = true;
+      }
+   }
+
+   %previewAssetName = %module.moduleId @ "_" @ %assetDef.assetName @ "_PreviewImage";
+                                   
+   if(%generatePreview)
+   {
+      displayEditorLoadingGui("Generating Material Asset Preview...");
+   
+      if(isObject(%assetDef.materialDefinitionName))
+      {
+         %previewShapeDef = AssetDatabase.acquireAsset("ToolsModule:previewSphereShape");
+         %generatedFilePath = %previewShapeDef.generateCachedPreviewImage(256, %assetDef.materialDefinitionName);
+      
+         pathCopy(%generatedFilePath, %previewFilePath);
+         fileDelete(%generatedFilePath);
+
+         %previewAsset = new ImageAsset()
+         {
+            assetName = %previewAssetName;
+            versionId = 1;
+            imageFile = fileName(%previewFilePath);
+         };
+         
+         %previewImgAssetPath = %previewPath @ %previewAsset.assetName @ ".asset.taml";
+         %assetImportSuccessful = TAMLWrite(%previewAsset, %previewImgAssetPath); 
+         
+         %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1);
+            
+         %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath);
+      }
+      
+      hideEditorLoadingGui();
+   }
+   
+   //Revalidate. If it didn't work, just use the default placeholder one
+   if(!isFile(%previewFilePath))
+   {
+      %previewData.previewImage = "ToolsModule:terrainMaterialIcon_image";
+   }
+   else
+   {
+      %previewData.previewImage = "ToolsModule:" @ %previewAssetName;
+   }
+      
    %previewData.assetName = %assetDef.assetName;
    %previewData.assetPath = "";
    %previewData.doubleClickCommand = "";
    
-   %previewData.previewImage = "ToolsModule:terrainMaterialIcon_image";
-   
    %previewData.assetFriendlyName = %assetDef.gameObjectName;
    %previewData.assetDesc = %assetDef.description;
    %previewData.tooltip = %assetDef.gameObjectName;
+   
+   %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ 
+                           "\nAsset Type: Terrain Material Asset" @  
+                           "\nAsset Definition ID: " @  %assetDef @
+                           "\nDefinition Path: " @ %assetDef.getScriptPath();
 }
 
 function GuiInspectorTypeTerrainMaterialAssetPtr::onClick( %this, %fieldName )

+ 2 - 2
Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript

@@ -163,7 +163,7 @@ function AssetBrowser::performRenameAsset(%this, %originalAssetName, %newName)
    %ModuleItem = AssetBrowser-->filterTree.findItemByName(%moduleName);
 
    // TODO is this correct?
-   %assetType = %ModuleItem.getClassName();
+   /*%assetType = %ModuleItem.getClassName();
 
    %assetTypeId = AssetBrowser-->filterTree.findChildItemByName(%ModuleItem, %assetType);
    
@@ -172,7 +172,7 @@ function AssetBrowser::performRenameAsset(%this, %originalAssetName, %newName)
    %selectedItem = AssetBrowser-->filterTree.getSelectedItem();
    AssetBrowser-->filterTree.scrollVisibleByObjectId(%selectedItem);
    
-   AssetBrowser-->filterTree.buildVisibleTree(); 
+   AssetBrowser-->filterTree.buildVisibleTree();*/ 
 }
 
 function renameAssetFile(%assetDef, %newName)

+ 8 - 5
Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript

@@ -182,11 +182,14 @@ function CreateNewAsset()
 	Canvas.popDialog(AssetBrowser_newAsset);
 	
 	//Load it
-	%moduleDef = ModuleDatabase.findModule(%moduleName,1);
-	AssetDatabase.addDeclaredAsset(%moduleDef, %assetFilePath);
-	//For utilities' sake, we'll acquire it immediately so it can be utilized 
-	//without delay if it's got any script/dependencies stuff
-	AssetDatabase.acquireAsset("\"" @ %moduleName @ ":" @ %assetName @ "\"");
+	if(!AssetDatabase.isDeclaredAsset(%moduleName @ ":" @ %assetName))
+	{
+      %moduleDef = ModuleDatabase.findModule(%moduleName,1);
+      AssetDatabase.addDeclaredAsset(%moduleDef, %assetFilePath);
+      //For utilities' sake, we'll acquire it immediately so it can be utilized 
+      //without delay if it's got any script/dependencies stuff
+      AssetDatabase.acquireAsset("\"" @ %moduleName @ ":" @ %assetName @ "\"");
+	}
 	
 	if(AssetBrowser_newAsset.callbackFunc !$= "")
 	{

+ 1 - 1
Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript

@@ -179,7 +179,7 @@ function ConvexEditorMaterialBtn::gotMaterialName(%this, %name)
 
    ConvexEditorOptionsWindow-->matPreviewBtn.setBitmap(getAssetPreviewImage(%diffusemap));
 
-   ConvexEditorOptionsWindow.activeMaterial = %materialAsset.materialDefinitionName;
+   ConvexEditorOptionsWindow.activeMaterial = %materialAsset.getAssetId();
 }
 
 function ConvexEditorMaterialApplyBtn::onClick(%this)

+ 9 - 0
Templates/BaseGame/game/tools/guiEditor/scripts/guiEditorCanvas.ed.tscript

@@ -186,6 +186,15 @@ function GuiEditCanvas::onCreateMenu(%this)
          item[8] = "Show Guides" TAB "" TAB "GuiEditor.toggleDrawGuides();";
          item[9] = "Clear Guides" TAB "" TAB "GuiEditor.clearGuides();";
       };
+      
+      new PopupMenu()
+      {
+         superClass = "MenuBuilder";
+         barTitle = "Tools";
+         internalName = "ToolsMenu";
+
+         item[0] = "Project Importer" TAB "" TAB "ProjectImporter::beginProjectImport();";
+      };
 
       new PopupMenu()
       {

+ 13 - 0
Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui

@@ -260,6 +260,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
                         position = "6 21";
                         Extent = "185 52";
                         HorizSizing = "width";
+                        className = "materialEditorDiffuseMapContainer";
 
                         new GuiBitmapCtrl() {
                            canSaveDynamicFields = "0";
@@ -412,6 +413,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
                         position = "6 79";
                         Extent = "185 52";
                         HorizSizing = "width";
+                        className = "materialEditorNormalMapContainer";
                         
                         new GuiBitmapCtrl() {
                            canSaveDynamicFields = "0";
@@ -764,6 +766,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
                         position = "6 364";
                         Extent = "185 52";
                         HorizSizing = "width";
+                        className = "materialEditorORMConfigMapContainer";
                         
                         new GuiBitmapCtrl() {
                            canSaveDynamicFields = "0";
@@ -985,6 +988,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
 					  isContainer = "1";
 					  canSave = "1";
 					  canSaveDynamicFields = "0";
+					  className = "materialEditorRoughnessMapContainer";
 
 					  new GuiBitmapCtrl() {
 						 bitmapAsset = "ToolsModule:unknownImage_image";
@@ -1221,6 +1225,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
 					  isContainer = "1";
 					  canSave = "1";
 					  canSaveDynamicFields = "0";
+					  className = "materialEditorAOMapContainer";
 
 					  new GuiBitmapCtrl() {
 						 bitmapAsset = "ToolsModule:unknownImage_image";
@@ -1457,6 +1462,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
 					  isContainer = "1";
 					  canSave = "1";
 					  canSaveDynamicFields = "0";
+					  className = "materialEditorMetalMapContainer";
 
 					  new GuiBitmapCtrl() {
 						 bitmapAsset = "ToolsModule:unknownImage_image";
@@ -1710,6 +1716,8 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
 					  isContainer = "1";
 					  canSave = "1";
 					  canSaveDynamicFields = "0";
+					  className = "materialEditorGlowMapContainer";
+					  
 					  new GuiBitmapCtrl() {
 						 bitmapAsset = "ToolsModule:unknownImage_image";
 						 wrap = "0";
@@ -1945,6 +1953,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
                         position = "6 193";
                         Extent = "185 52";
                         HorizSizing = "width";
+                        className = "materialEditorDetailMapContainer";
                         
                         new GuiBitmapCtrl() {
                            canSaveDynamicFields = "0";
@@ -2090,6 +2099,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
                         position = "6 136";
                         Extent = "185 52";
                         HorizSizing = "width";
+                        className = "materialEditorDetailNormalMapContainer";
                         
                         new GuiBitmapCtrl() {
                            canSaveDynamicFields = "0";
@@ -2235,6 +2245,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
                         position = "6 136";
                         Extent = "185 52";
                         HorizSizing = "width";
+                        className = "materialEditorOverlayMapContainer";
                         
                         new GuiBitmapCtrl() {
                            canSaveDynamicFields = "0";
@@ -2361,6 +2372,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
                         position = "6 250";
                         Extent = "185 52";
                         HorizSizing = "width";
+                        className = "materialEditorLightMapContainer";
                         
                         new GuiBitmapCtrl() {
                            canSaveDynamicFields = "0";
@@ -2487,6 +2499,7 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) {
                         position = "6 307";
                         Extent = "185 52";
                         HorizSizing = "width";
+                        className = "materialEditorToneMapContainer";
                         
                         new GuiBitmapCtrl() {
                            canSaveDynamicFields = "0";

+ 80 - 2
Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript

@@ -1174,8 +1174,8 @@ function MaterialEditorGui::updateTextureMap( %this, %type, %action )
 function MaterialEditorGui::doUpdateTextureMap( %this, %assetId )
 {
    if(%assetId !$= "")
-{
-   %layer = MaterialEditorGui.currentLayer;
+   {
+      %layer = MaterialEditorGui.currentLayer;
    
       %type = %this.updatingTextureType;
       
@@ -2419,4 +2419,82 @@ function MaterialEditorGui::swapMaterial(%this)
 function MaterialEditorGui::doSwapMaterial(%this, %materialAsset)
 {
    MaterialEditorGui.showMaterialChangeSaveDialog(%materialAsset);
+}
+
+//
+//
+function matEdDragNDropMapAssignment(%type, %payload)
+{
+   %assetType = %payload.assetType;
+   if(%assetType !$= "ImageAsset")
+      return;
+      
+   %module = %payload.moduleName;
+   %assetName = %payload.assetName;
+   %assetId = %module @ ":" @ %assetName;
+   
+   MaterialEditorGui.updatingTextureType = %type;
+   MaterialEditorGui.guiSync( materialEd_previewMaterial );
+   
+   MaterialEditorGui.doUpdateTextureMap( %assetId );
+}
+
+function materialEditorDiffuseMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Diffuse", %payload);
+}
+
+function materialEditorNormalMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Normal", %payload);
+}
+
+function materialEditorORMConfigMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("ORMConfig", %payload);
+}
+
+function materialEditorRoughnessMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Roughness", %payload);
+}
+
+function materialEditorAOMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("AO", %payload);
+}
+
+function materialEditorMetalMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Metal", %payload);
+}
+
+function materialEditorGlowMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Glow", %payload);
+}
+
+function materialEditorDetailMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Detail", %payload);
+}
+
+function materialEditorDetailNormalMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("DetailNormal", %payload);
+}
+
+function materialEditorOverlayMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Overlay", %payload);
+}
+
+function materialEditorLightMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Light", %payload);
+}
+
+function materialEditorToneMapContainer::onControlDropped( %this, %payload, %position )
+{
+   matEdDragNDropMapAssignment("Tone", %payload);
 }

+ 6 - 6
Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui

@@ -5,7 +5,7 @@ $guiContent = new GuiControl(TerrainMaterialDlg,EditorGuiGroup) {
    minExtent = "8 2";
    horizSizing = "right";
    vertSizing = "bottom";
-   profile = "ToolsGuiDefaultProfile";
+   profile = "ToolsGuiDefaultNonModalProfile";
    visible = "1";
    active = "1";
    tooltipProfile = "ToolsGuiToolTipProfile";
@@ -256,7 +256,7 @@ $guiContent = new GuiControl(TerrainMaterialDlg,EditorGuiGroup) {
             canSave = "1";
             canSaveDynamicFields = "0";
          };
-         new GuiContainer(BaseMapContainer) {
+         new GuiContainer(DiffuseMapContainer) {
             margin = "0 0 0 0";
             padding = "0 0 0 0";
             anchorTop = "1";
@@ -312,7 +312,7 @@ $guiContent = new GuiControl(TerrainMaterialDlg,EditorGuiGroup) {
                tooltipProfile = "ToolsGuiToolTipProfile";
                hovertime = "1000";
                isContainer = "0";
-               internalName = "texBaseMap";
+               internalName = "texDiffuseMap";
                canSave = "1";
                canSaveDynamicFields = "0";
             };
@@ -334,7 +334,7 @@ $guiContent = new GuiControl(TerrainMaterialDlg,EditorGuiGroup) {
                profile = "ToolsGuiDefaultProfile";
                visible = "1";
                active = "1";
-               command = "TerrainMaterialDlg.updateTextureMap(\"BaseMap\");";
+               command = "TerrainMaterialDlg.updateTextureMap(\"DiffuseMap\");";
                tooltipProfile = "ToolsGuiDefaultProfile";
                tooltip = "Change the Active Diffuse Map for this layer";
                hovertime = "1000";
@@ -402,7 +402,7 @@ $guiContent = new GuiControl(TerrainMaterialDlg,EditorGuiGroup) {
                profile = "ToolsGuiButtonProfile";
                visible = "1";
                active = "1";
-               command = "TerrainMaterialDlg.updateTextureMap(\"BaseMap\");";
+               command = "TerrainMaterialDlg.updateTextureMap(\"DiffuseMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
                hovertime = "1000";
                isContainer = "0";
@@ -427,7 +427,7 @@ $guiContent = new GuiControl(TerrainMaterialDlg,EditorGuiGroup) {
                profile = "ToolsGuiDefaultProfile";
                visible = "1";
                active = "1";
-               command = "TerrainMaterialDlg.clearTextureMap(\"BaseMap\");";
+               command = "TerrainMaterialDlg.clearTextureMap(\"DiffuseMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
                hovertime = "1000";
                isContainer = "0";

+ 4 - 2
Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript

@@ -2319,11 +2319,13 @@ function EWorldEditor::SetActiveScene(%this, %sceneObj)
    {
       $ActiveEditingScene.isEditing = false;
       %itemId = EditorTree.findItemByObjectId($ActiveScene);
-      EditorTree.markItem(%itemId);
+      if(%itemId != -1)
+         EditorTree.markItem(%itemId);
    }
       
    %itemId = EditorTree.findItemByObjectId(%sceneObj);
-   EditorTree.markItem(%itemId);
+   if(%itemId != -1)
+      EditorTree.markItem(%itemId);
    
    $ActiveEditingScene = %sceneObj;
    $ActiveEditingScene.isEditing = true;

+ 50 - 8
Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript

@@ -269,27 +269,27 @@ function TerrainMaterialDlg::changeTerrainMatMapAsset(%this)
 
    %imgAsset = AssetBrowser.selectedAsset;
    if(%imgAsset !$= "")
-{   
+   {   
       %targetMap.asset = %imgAsset;
       %image = %imgAsset;
 
       if(%this.updateTargetMap $= "DetailMap")
-   {
+      {
          //show the supplemental maps
          NormalMapContainer.callOnChildren("setActive", true);  
          ORMMapContainer.callOnChildren("setActive", true);
          MacroMapContainer.callOnChildren("setActive", true);
+      }
    }
-}
-      else
+   else
    {
       %image = $TerrainMaterialEditor::emptyMaterialImage;
    }
 
    %targetMap.setBitmap( getAssetPreviewImage(%image) );  
 
-   %targetMapName = %targetMap @ "AssetId";
-   %targetMapName.setText(%imgAsset);
+   %targetMapNameText = %this.findObjectByInternalName(%this.updateTargetMap @ "AssetId", true);
+   %targetMapNameText.setText(%imgAsset);
 
    TerrainMaterialDlg.matDirty = true;
 }
@@ -412,7 +412,7 @@ function TerrainMaterialDlg::setActiveMaterial( %this, %mat )
       %imgPath = %mat.getDiffuseMap();
       %imgPathText = %imgPath !$= "" && %imgPath !$= $TerrainMaterialEditor::emptyMaterialImage ? %mat.getDiffuseMapAsset() : "None";
       %this-->diffuseMapAssetId.setText( %imgPathText );
-      %this-->texBaseMap.setBitmap( getAssetPreviewImage(%imgPath) );
+      %this-->texDiffuseMap.setBitmap( getAssetPreviewImage(%imgPath) );
 
       //
       %imgPath = %mat.getNormalMap();
@@ -487,7 +487,7 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
    
    
    //---
-   %newDiffuse = %this-->texBaseMap.getBitmap();
+   %newDiffuse = %this-->texDiffuseMap.getBitmap();
    if(%newDiffuse $= $TerrainMaterialEditor::emptyMaterialImage || %newDiffuse $= %blankBitmap)
       %newDiffuse = "";
    
@@ -741,3 +741,45 @@ function TerrainMaterialDlgBlendHeightContrastTextEdit::onValidate(%this)
    TerrainMaterialDlg.activeMat.blendHeightContrast = %this.getText();
    TerrainMaterialDlg.matDirty = true;
 }
+
+//
+//
+function terrMatEdDragNDropMapAssignment(%mapName, %payload)
+{
+   %assetType = %payload.assetType;
+   if(%assetType !$= "ImageAsset")
+      return;
+      
+   %module = %payload.moduleName;
+   %assetName = %payload.assetName;
+   %assetId = %module @ ":" @ %assetName;
+   
+   TerrainMaterialDlg.updateTargetMap = %mapName;
+   AssetBrowser.selectedAsset = %assetId;
+   TerrainMaterialDlg.changeTerrainMatMapAsset();
+}
+
+function DiffuseMapContainer::onControlDropped( %this, %payload, %position )
+{
+   terrMatEdDragNDropMapAssignment("DiffuseMap", %payload);
+}
+
+function DetailMapContainer::onControlDropped( %this, %payload, %position )
+{
+   terrMatEdDragNDropMapAssignment("DetailMap", %payload);
+}
+
+function NormalMapContainer::onControlDropped( %this, %payload, %position )
+{
+   terrMatEdDragNDropMapAssignment("NormalMap", %payload);
+}
+
+function ORMMapContainer::onControlDropped( %this, %payload, %position )
+{
+   terrMatEdDragNDropMapAssignment("ORMMap", %payload);
+}
+
+function MacroMapContainer::onControlDropped( %this, %payload, %position )
+{
+   terrMatEdDragNDropMapAssignment("MacroMap", %payload);
+}