diff --git a/Engine/source/gfx/bitmap/gBitmap.cpp b/Engine/source/gfx/bitmap/gBitmap.cpp
index ebd3741b1..21e1351f8 100644
--- a/Engine/source/gfx/bitmap/gBitmap.cpp
+++ b/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, '.');
diff --git a/Engine/source/gui/worldEditor/guiConvexShapeEditorCtrl.cpp b/Engine/source/gui/worldEditor/guiConvexShapeEditorCtrl.cpp
index 9350f39e0..ae1b90df8 100644
--- a/Engine/source/gui/worldEditor/guiConvexShapeEditorCtrl.cpp
+++ b/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 ) )
diff --git a/Templates/BaseGame/game/data/ExampleModule/ExampleModule.tscript b/Templates/BaseGame/game/data/ExampleModule/ExampleModule.tscript
index 0f540c0d8..137067959 100644
--- a/Templates/BaseGame/game/data/ExampleModule/ExampleModule.tscript
+++ b/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");
}
\ No newline at end of file
diff --git a/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript b/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript
index 7f36bfc0d..8851d1990 100644
--- a/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript
+++ b/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)
diff --git a/Templates/BaseGame/game/data/UI/images/dropdown_textEdit_image.asset.taml b/Templates/BaseGame/game/data/UI/images/dropdown_textEdit_image.asset.taml
deleted file mode 100644
index 63455e9dd..000000000
--- a/Templates/BaseGame/game/data/UI/images/dropdown_textEdit_image.asset.taml
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/Templates/BaseGame/game/tools/assetBrowser/art/terrainIcon_image.asset.taml b/Templates/BaseGame/game/tools/assetBrowser/art/terrainIcon_image.asset.taml
index 4a6ef4a57..5b7fffc0c 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/art/terrainIcon_image.asset.taml
+++ b/Templates/BaseGame/game/tools/assetBrowser/art/terrainIcon_image.asset.taml
@@ -1,8 +1,8 @@
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript
index fd71cba2f..cf331ac74 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript
+++ b/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)
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.tscript
index 6488b319f..d443157ea 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.tscript
+++ b/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;
}
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cubemap.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cubemap.tscript
index 78076654b..b050d37cd 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cubemap.tscript
+++ b/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;
}
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gameObject.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gameObject.tscript
index bdf079ad0..c25eda8f4 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gameObject.tscript
+++ b/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
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.tscript
index 4660d56fc..dfebccb47 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.tscript
+++ b/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;
}
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript
index f39d35349..0dbebd39b 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript
+++ b/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;
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.tscript
index e46e891c7..23be49e9f 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/level.tscript
+++ b/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;
}
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript
index 53d102324..fb6b8a4ad 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript
+++ b/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;
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript
index 7ce0acb1b..15c48079b 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript
+++ b/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;
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/sound.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/sound.tscript
index 04ab8d508..8cc63bdf4 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/sound.tscript
+++ b/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);
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/stateMachine.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/stateMachine.tscript
index dff204024..0e9188a97 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/stateMachine.tscript
+++ b/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)
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript
index ad1212e11..8fc9e21f9 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript
+++ b/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 )
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript
index 4b71d7660..2d088f27a 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/editAsset.tscript
+++ b/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)
diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript
index f22c6f73d..f2ea27660 100644
--- a/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript
+++ b/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 !$= "")
{
diff --git a/Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript b/Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript
index 09215601a..0baf0eb70 100644
--- a/Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript
+++ b/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)
diff --git a/Templates/BaseGame/game/tools/guiEditor/scripts/guiEditorCanvas.ed.tscript b/Templates/BaseGame/game/tools/guiEditor/scripts/guiEditorCanvas.ed.tscript
index f62fe12ea..59df87bd9 100644
--- a/Templates/BaseGame/game/tools/guiEditor/scripts/guiEditorCanvas.ed.tscript
+++ b/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()
{
diff --git a/Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui
index 0f71d8757..d1d46b2b1 100644
--- a/Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui
+++ b/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";
diff --git a/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript b/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript
index d157c817a..de003fdc8 100644
--- a/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript
+++ b/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);
}
\ No newline at end of file
diff --git a/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui b/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui
index 1a7d1caf1..4eef5308f 100644
--- a/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui
+++ b/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";
diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript
index 1d1b16bfc..11b3b06d4 100644
--- a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript
+++ b/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;
diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript
index b49cef39a..fd1063618 100644
--- a/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript
+++ b/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);
+}