diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index 165b103f5..4376614ed 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -438,15 +438,15 @@ ImageAsset::ImageTypes ImageAsset::getImageTypeFromName(const char* name) } DefineEngineMethod(ImageAsset, getImagePath, const char*, (), , - "Creates an instance of the given GameObject given the asset definition.\n" - "@return The GameObject entity created from the asset.") + "Gets the image filepath of this asset.\n" + "@return File path of the image file.") { return object->getImagePath(); } DefineEngineMethod(ImageAsset, getImageInfo, const char*, (), , - "Creates an instance of the given GameObject given the asset definition.\n" - "@return The GameObject entity created from the asset.") + "Gets the info and properties of the image.\n" + "@return The info/properties of the image.") { return object->getImageInfo(); } diff --git a/Engine/source/T3D/assets/TerrainAsset.cpp b/Engine/source/T3D/assets/TerrainAsset.cpp index 997806ed6..da0372097 100644 --- a/Engine/source/T3D/assets/TerrainAsset.cpp +++ b/Engine/source/T3D/assets/TerrainAsset.cpp @@ -429,6 +429,13 @@ void TerrainAsset::copyTo(SimObject* object) Parent::copyTo(object); } +DefineEngineMethod(TerrainAsset, getTerrainFilePath, const char*, (), , + "Gets the terrain filepath of this asset.\n" + "@return File path of the terrain file.") +{ + return object->getTerrainFilePath(); +} + //----------------------------------------------------------------------------- // GuiInspectorTypeAssetId //----------------------------------------------------------------------------- diff --git a/Engine/source/gui/editor/inspector/variableInspector.cpp b/Engine/source/gui/editor/inspector/variableInspector.cpp index e639cad0f..e280cbfb7 100644 --- a/Engine/source/gui/editor/inspector/variableInspector.cpp +++ b/Engine/source/gui/editor/inspector/variableInspector.cpp @@ -150,7 +150,7 @@ void GuiVariableInspector::addField(const char* name, const char* label, const c { VariableField newField; newField.mFieldName = StringTable->insert(name); - newField.mFieldLabel = StringTable->insert(label); + newField.mFieldLabel = StringTable->insert(label, true); newField.mFieldTypeName = StringTable->insert(typeName); newField.mFieldDescription = StringTable->insert(description); newField.mDefaultValue = StringTable->insert(defaultValue); diff --git a/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui b/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui index 92f4358c5..fc815d5cb 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui +++ b/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui @@ -247,7 +247,7 @@ tooltip = "Create a new asset in the current directory"; hovertime = "1000"; isContainer = "0"; - internalName = "CreateAssetButton"; + class="CreateAssetButton"; canSave = "1"; canSaveDynamicFields = "0"; }; diff --git a/Templates/BaseGame/game/tools/assetBrowser/guis/newAsset.gui b/Templates/BaseGame/game/tools/assetBrowser/guis/newAsset.gui index cd9cc378b..722df448d 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/guis/newAsset.gui +++ b/Templates/BaseGame/game/tools/assetBrowser/guis/newAsset.gui @@ -31,7 +31,7 @@ anchorBottom = "0"; anchorLeft = "1"; anchorRight = "0"; - position = "328 140"; + position = "328 159"; extent = "368 450"; minExtent = "48 92"; horizSizing = "center"; @@ -54,7 +54,7 @@ anchorBottom = "0"; anchorLeft = "1"; anchorRight = "0"; - position = "12 54"; + position = "12 29"; extent = "116 17"; minExtent = "8 2"; horizSizing = "right"; @@ -68,6 +68,35 @@ canSave = "1"; canSaveDynamicFields = "0"; }; + new GuiPopUpMenuCtrlEx(NewAssetTargetModule) { + maxPopupHeight = "200"; + sbUsesNAColor = "0"; + reverseTextList = "0"; + bitmapBounds = "16 16"; + hotTrackCallback = "0"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "135 28"; + extent = "202 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiPopUpMenuProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + internalName = "ModuleList"; + class = "AssetBrowserModuleList"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; new GuiTextCtrl() { text = "Target Path:"; maxLength = "1024"; @@ -77,7 +106,7 @@ anchorBottom = "0"; anchorLeft = "1"; anchorRight = "0"; - position = "12 30"; + position = "12 54"; extent = "116 17"; minExtent = "8 2"; horizSizing = "right"; @@ -104,7 +133,7 @@ anchorBottom = "0"; anchorLeft = "1"; anchorRight = "0"; - position = "135 30"; + position = "135 54"; extent = "201 18"; minExtent = "8 2"; horizSizing = "width"; @@ -128,7 +157,7 @@ groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - position = "343 27"; + position = "340 51"; extent = "22 22"; minExtent = "8 2"; horizSizing = "left"; @@ -144,33 +173,6 @@ canSave = "1"; canSaveDynamicFields = "0"; }; - new GuiTextEditCtrl(NewAssetTargetModule) { - historySize = "0"; - tabComplete = "0"; - sinkAllKeyEvents = "0"; - password = "0"; - passwordMask = "*"; - maxLength = "1024"; - margin = "0 0 0 0"; - padding = "0 0 0 0"; - anchorTop = "1"; - anchorBottom = "0"; - anchorLeft = "1"; - anchorRight = "0"; - position = "135 53"; - extent = "202 18"; - minExtent = "8 2"; - horizSizing = "width"; - vertSizing = "bottom"; - profile = "ToolsGuiTextEditProfile"; - visible = "1"; - active = "0"; - tooltipProfile = "GuiToolTipProfile"; - hovertime = "1000"; - isContainer = "1"; - canSave = "1"; - canSaveDynamicFields = "0"; - }; new GuiScrollCtrl() { willFirstRespond = "1"; hScrollBar = "alwaysOn"; @@ -213,7 +215,7 @@ changeChildSizeToFit = "1"; changeChildPosition = "1"; position = "1 1"; - extent = "337 338"; + extent = "337 56"; minExtent = "16 16"; horizSizing = "width"; vertSizing = "height"; diff --git a/Templates/BaseGame/game/tools/assetBrowser/guis/selectModule.gui b/Templates/BaseGame/game/tools/assetBrowser/guis/selectModule.gui index 95bf9b399..7a6bcb337 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/guis/selectModule.gui +++ b/Templates/BaseGame/game/tools/assetBrowser/guis/selectModule.gui @@ -44,6 +44,7 @@ isContainer = "1"; canSave = "1"; canSaveDynamicFields = "0"; + closeCommand="Canvas.popDialog(AssetBrowser_SelectModule);"; new GuiPopUpMenuCtrlEx() { maxPopupHeight = "200"; @@ -95,7 +96,7 @@ tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; - class = "SelectPackage_NewAssetModuleBtn"; + class = "AssetBrowserSelModuleAddBtn"; canSave = "1"; canSaveDynamicFields = "0"; }; @@ -132,7 +133,7 @@ profile = "ToolsGuiButtonProfile"; visible = "1"; active = "1"; - command = "Canvas.popDialog(AssetBrowser_addModule);"; + command = "Canvas.popDialog(AssetBrowser_SelectModule);"; tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/addModuleWindow.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/addModuleWindow.tscript index 7a704613e..833a3031b 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/addModuleWindow.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/addModuleWindow.tscript @@ -32,7 +32,7 @@ function AssetBrowser_addModuleWindow::onGainFirstResponder(%this) function AssetBrowser_addModuleWindow::close() { Canvas.popDialog(AssetBrowser_addModule); - eval(AssetBrowser_addModuleWindow.callbackFunction); + //eval(AssetBrowser_addModuleWindow.callbackFunction); } function AssetBrowser_addModuleWindow::CreateNewModule(%this) @@ -127,4 +127,9 @@ function AssetBrowserModuleList::refresh(%this) %moduleName = getWord(%moduleList, %i); %this.add(%moduleName.ModuleId, %i); } +} + +function AssetBrowserSelModuleAddBtn::onClick(%this) +{ + AssetBrowser.CreateNewModule("AssetBrowser_selectModule.newModuleAdded();"); } \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript index 86fef8518..e95ec0572 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript @@ -36,7 +36,10 @@ function AssetBrowser::initialize(%this) new ArrayObject(AssetPreviewArray); if(!isObject(%this.dirHandler)) + { %this.dirHandler = makedirectoryHandler(AssetBrowser-->filterTree, "cache,shaderCache", ""); + %this.dirHandler.currentAddress = "data/"; + } AssetBrowser-->filterTree.buildIconTable( ":tools/classIcons/Prefab:tools/classIcons/Prefab" @ ":tools/classIcons/SimSet:tools/classIcons/SimSet"); @@ -2090,7 +2093,14 @@ function AssetBrowser::navigateTo(%this, %address, %historyNav) if(%this.hasLooseFilesInDir()) { + if(EditorSettings.value("Assets/AutoImportLooseFiles", false) && EditorSettings.value("Assets/AutoImport", false)) + { + AssetBrowser.autoImportSimpleLooseFiles(); + } + else + { %this-->AutoImportAssetButton.visible = true; + } } else { diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript index b306c9300..4a727143b 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript @@ -196,6 +196,8 @@ function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData) %success = saveScaledImage(%assetDef.getImagePath(), %previewFilePath); + if(%success) + { %previewAsset = new ImageAsset() { assetName = %previewAssetName; @@ -203,15 +205,26 @@ function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData) imageFile = fileName(%previewFilePath); }; + %previewAssetName = "ToolsModule:" @ %previewAssetName; %previewImgAssetPath = %previewPath @ %previewAsset.assetName @ ".asset.taml"; %assetImportSuccessful = TAMLWrite(%previewAsset, %previewImgAssetPath); %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1); %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath); + } + else + { + %previewFilePath = %assetDef.getImagePath(); + %previewAssetName = %module.moduleId @ ":" @ %assetDef.assetName; + } hideEditorLoadingGui(); } + else + { + %previewAssetName = "ToolsModule:" @ %previewAssetName; + } //Revalidate. If it didn't work, just use the default placeholder one if(!isFile(%previewFilePath)) @@ -220,7 +233,7 @@ function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData) %previewData.assetName = %assetDef.assetName; %previewData.assetPath = %assetDef.scriptFile; - %previewData.previewImage = "ToolsModule:" @ %previewAssetName;//%assetDef.fileName; + %previewData.previewImage = %previewAssetName; %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 e4687faf1..17fa1c430 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript @@ -318,30 +318,20 @@ function AssetBrowser::buildShapeAssetPreview(%this, %assetDef, %previewData) "Shape File path: " @ %assetDef.getShapeFile(); if(%this.selectMode) + { %previewData.doubleClickCommand = "AssetBrowser.selectAsset( AssetBrowser.selectedAsset );"; + } else + { + if(EditorSettings.value("Assets/Browser/doubleClickAction", "Edit Asset") $= "Edit Asset") %previewData.doubleClickCommand = "AssetBrowser.editAsset( "@%assetDef@" );"; + else + %previewData.doubleClickCommand = "AssetBrowser.onShapeAssetEditorDropped( "@%assetDef@" );"; + } } function AssetBrowser::onShapeAssetEditorDropped(%this, %assetDef, %position) { - //echo("DROPPED A SHAPE ON THE EDITOR WINDOW!"); - - %targetPosition = EWorldEditor.unproject(%position SPC 1000); - %camPos = LocalClientConnection.camera.getPosition(); - %rayResult = containerRayCast(%camPos, %targetPosition, -1); - - %pos = EWCreatorWindow.getCreateObjectPosition(); - - if(%rayResult != 0) - { - %pos = getWords(%rayResult, 1, 3); - } - else - { - %pos = "0 0 0"; - } - %assetId = %assetDef.getAssetId(); %newStatic = new TSStatic() @@ -354,6 +344,8 @@ function AssetBrowser::onShapeAssetEditorDropped(%this, %assetDef, %position) EWorldEditor.clearSelection(); EWorldEditor.selectObject(%newStatic); + + EWorldEditor.dropSelection(); EWorldEditor.isDirty = true; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrain.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrain.tscript index 1c51a7d42..27cbc0b7c 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrain.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrain.tscript @@ -148,6 +148,11 @@ function AssetBrowser::dragAndDropTerrainAsset(%this, %assetDef, %dropTarget) return; } +function AssetBrowser::onTerrainAssetEditorDropped(%this, %assetDef, %position) +{ + createTerrainBlock(%assetDef.getAssetId()); +} + function AssetBrowser::renameTerrainAsset(%this, %assetDef, %newAssetId, %originalName, %newName) { } @@ -160,7 +165,6 @@ function AssetBrowser::buildTerrainAssetPreview(%this, %assetDef, %previewData) { %previewData.assetName = %assetDef.assetName; %previewData.assetPath = ""; - %previewData.doubleClickCommand = ""; %previewData.previewImage = "ToolsModule:gameObjectIcon_image"; @@ -170,6 +174,18 @@ function AssetBrowser::buildTerrainAssetPreview(%this, %assetDef, %previewData) "\nAsset Type: Terrain Asset" @ "\nAsset Definition ID: " @ %assetDef @ "\nDefinition Path: " @ %assetDef.getTerrainFilePath(); + + if(%this.selectMode) + { + %previewData.doubleClickCommand = "AssetBrowser.selectAsset( AssetBrowser.selectedAsset );"; + } + else + { + if(EditorSettings.value("Assets/Browser/doubleClickAction", "Edit Asset") $= "Edit Asset") + %previewData.doubleClickCommand = ""; + else + %previewData.doubleClickCommand = "createTerrainBlock(\""@%assetDef.getAssetId()@"\");"; + } } function GuiInspectorTypeTerrainAssetPtr::onClick( %this, %fieldName ) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/editModule.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/editModule.tscript index 4d5a22ff1..71e248c2c 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/editModule.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/editModule.tscript @@ -10,12 +10,13 @@ function AssetBrowser::ConvertFolderIntoModule(%this, %folderName) AssetBrowser_addModuleWindow.CreateNewModule(); } -function AssetBrowser::CreateNewModule(%this) +function AssetBrowser::CreateNewModule(%this, %callback) { Canvas.pushDialog(AssetBrowser_AddModule); AssetBrowser_addModuleWindow.selectWindow(); AssetBrowser_addModuleWindow.callbackFunction = "AssetBrowser.promptNewModuleFolders();"; + AssetBrowser_addModuleWindow.callbackFallthrough = %callback; } function AssetBrowser::promptNewModuleFolders(%this) @@ -24,6 +25,9 @@ function AssetBrowser::promptNewModuleFolders(%this) "Do you want to create some common folders for organization of your new Module?", "AssetBrowser.makeModuleFolders();", //if yes, make the foldesr "AssetBrowser.loadDirectories();"); //if no, just refresh + + if(AssetBrowser_addModuleWindow.callbackFallthrough !$= "") + eval(AssetBrowser_addModuleWindow.callbackFallthrough); } function AssetBrowser::makeModuleFolders(%this) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript index dc46dcd2b..f22c6f73d 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript @@ -26,9 +26,22 @@ function CreateAssetButton::onClick(%this) function AssetBrowser_newAsset::onWake(%this) { - NewAssetTargetAddress.text = AssetBrowser.dirHandler.currentAddress; - NewAssetTargetModule.text = AssetBrowser.dirHandler.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress).ModuleId; + %targetModule = AssetBrowser.dirHandler.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress).ModuleId; + if(%targetModule $= "") + %targetModule = EditorSettings.value("Assets/New/defaultModule", ""); + + NewAssetTargetModule.setText(%targetModule); + + %moduleDef = ModuleDatabase.findModule(%targetModule); + + %targetPath = AssetBrowser.dirHandler.currentAddress; + if(!startsWith(%targetPath, %moduleDef.ModulePath)) + { + %targetPath = %moduleDef.ModulePath; + } + + NewAssetTargetAddress.text = %targetPath; } function AssetBrowser_newAssetWindow::onClose(%this) @@ -107,34 +120,6 @@ function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName, %call %command = %this @ ".setupCreateNew"@%assetType @"();"; eval(%command); } - /*if(%assetType $= "ComponentAsset") - { - NewAssetPropertiesInspector.startGroup("Components"); - NewAssetPropertiesInspector.addField("parentClass", "New Asset Parent Class", "String", "Name of the new asset's parent class", "Component", "", %this.newAssetSettings); - NewAssetPropertiesInspector.addField("componentGroup", "Component Group", "String", "Name of the group of components this component asset belongs to", "", "", %this.newAssetSettings); - //NewAssetPropertiesInspector.addField("componentName", "Component Name", "String", "Name of the new component", "", "", %this.newAssetSettings); - NewAssetPropertiesInspector.endGroup(); - }*/ - //Special case, we only do this via internal means like baking - /*else if(%assetType $= "ShapeAsset") - { - NewAssetPropertiesInspector.startGroup("Shape"); - NewAssetPropertiesInspector.addField("isServerScript", "Is Server Script", "bool", "Is this script used on the server?", "1", "", %this.newAssetSettings); - NewAssetPropertiesInspector.endGroup(); - }*/ - /*else if(%assetType $= "ShapeAnimationAsset") - { - NewAssetPropertiesInspector.startGroup("Animation"); - NewAssetPropertiesInspector.addField("sourceFile", "Source File", "filename", "Source file this animation will pull from", "", "", %this.newAssetSettings); - NewAssetPropertiesInspector.addField("animationName", "Animation Name", "string", "Name of the animation clip when used in a shape", "", "", %this.newAssetSettings); - - NewAssetPropertiesInspector.addField("startFrame", "Starting Frame", "int", "Source file this animation will pull from", "", "", %this.newAssetSettings); - NewAssetPropertiesInspector.addField("endFrame", "Ending Frame", "int", "Source file this animation will pull from", "", "", %this.newAssetSettings); - - NewAssetPropertiesInspector.addField("padRotation", "Pad Rotations", "bool", "Source file this animation will pull from", "0", "", %this.newAssetSettings); - NewAssetPropertiesInspector.addField("padTransforms", "Pad Transforms", "bool", "Source file this animation will pull from", "0", "", %this.newAssetSettings); - NewAssetPropertiesInspector.endGroup(); - }*/ } function NewAssetPropertiesInspector::updateNewAssetField(%this) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/selectModule.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/selectModule.tscript index 54358a8e8..9796ff901 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/selectModule.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/selectModule.tscript @@ -7,6 +7,14 @@ function AssetBrowser_SelectModule::showDialog(%this, %callback) function AssetBrowser_SelectModule::onWake(%this) { AssetBrowser_SelectModuleWindow-->ModuleList.refresh(); + + %defaultModule = EditorSettings.value("Assets/New/defaultModule", ""); + if(%defaultModule !$= "" && + EditorSettings.value("Assets/New/alwaysPromptModuleTarget", false) == false) + { + Canvas.popDialog(AssetBrowser_SelectModule); + eval(%this.callback @ "(" @ %defaultModule @ ");"); + } } function AssetBrowser_SelectModule::moduleSelected(%this) @@ -24,10 +32,7 @@ function AssetBrowser_SelectModule::moduleSelected(%this) function SelectModule_NewAssetModuleBtn::onClick(%this) { - Canvas.pushDialog(AssetBrowser_AddModule); - AssetBrowser_addModuleWindow.selectWindow(); - - AssetBrowser_AddModule.callback = "AssetBrowser_selectModule.newModuleAdded();"; + AssetBrowser.CreateNewModule("AssetBrowser_selectModule.newModuleAdded();"); } function AssetBrowser_selectModule::newModuleAdded(%this) diff --git a/Templates/BaseGame/game/tools/datablockEditor/datablockEditor.tscript b/Templates/BaseGame/game/tools/datablockEditor/datablockEditor.tscript index 6ef48370a..4980dd3c2 100644 --- a/Templates/BaseGame/game/tools/datablockEditor/datablockEditor.tscript +++ b/Templates/BaseGame/game/tools/datablockEditor/datablockEditor.tscript @@ -686,6 +686,12 @@ function DatablockEditorPlugin::pickedNewDBTargetModule(%this, %module) %moduleDef = ModuleDatabase.findModule(%module); $DATABLOCK_EDITOR_DEFAULT_FILENAME = %moduleDef.ModulePath @ "/scripts/managedData/managedDatablocks." @ $TorqueScriptFileExtension; + + if(!isDirectory(filePath($DATABLOCK_EDITOR_DEFAULT_FILENAME))) + { + AssetBrowser.dirHandler.createFolder(filePath($DATABLOCK_EDITOR_DEFAULT_FILENAME)); + } + DatablockEditorPlugin.createDatablock(); } diff --git a/Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript b/Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript index f3bfc991e..0138d5331 100644 --- a/Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript +++ b/Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript @@ -167,6 +167,11 @@ function DecalEditorGui::pickedNewDecalTargetModule(%this, %module) %moduleDef = ModuleDatabase.findModule(%module); $decalDataFile = %moduleDef.ModulePath @ "/scripts/managedData/managedDecalData." @ $TorqueScriptFileExtension; + if(!isDirectory(filePath($decalDataFile))) + { + AssetBrowser.dirHandler.createFolder(filePath($decalDataFile)); + } + %name = getUniqueName( "NewDecalData" ); %str = "datablock DecalData( " @ %name @ " ) { Material = \"WarningMaterial\"; };"; diff --git a/Templates/BaseGame/game/tools/forestEditor/forestEditorGui.tscript b/Templates/BaseGame/game/tools/forestEditor/forestEditorGui.tscript index 93e659307..dd88668a1 100644 --- a/Templates/BaseGame/game/tools/forestEditor/forestEditorGui.tscript +++ b/Templates/BaseGame/game/tools/forestEditor/forestEditorGui.tscript @@ -180,6 +180,12 @@ function ForestEditorGui::pickedNewMeshTargetModule(%this, %module) %moduleDef = ModuleDatabase.findModule(%module); ForestEditorGui.forestItemDataPath = %moduleDef.ModulePath @ "/scripts/managedData/managedForestItemData." @ $TorqueScriptFileExtension; + + if(!isDirectory(filePath(ForestEditorGui.forestItemDataPath))) + { + AssetBrowser.dirHandler.createFolder(filePath(ForestEditorGui.forestItemDataPath)); + } + AssetBrowser.showDialog("ShapeAsset", "selectNewForestMesh", "", "", ""); } diff --git a/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.tscript b/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.tscript index 08f0f5038..3b41dca16 100644 --- a/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.tscript +++ b/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.tscript @@ -493,6 +493,28 @@ function ESettingsWindow::getAssetEditingSettings(%this) { ImportAssetWindow::reloadImportOptionConfigs(); + //First, get our list of modules + %moduleList = ModuleDatabase.findModules(); + %formattedModuleList = ""; + + %count = getWordCount(%moduleList); + for(%i=0; %i < %count; %i++) + { + %module = getWord(%moduleList, %i); + if(%module.group !$= "Tools" && %module.group !$= "Core") + { + if(%formattedModuleList $= "") + %formattedModuleList = %module.moduleId; + else + %formattedModuleList = %formattedModuleList @ "," @ %module.moduleId; + } + } + + SettingsInspector.startGroup("Asset Creation"); + SettingsInspector.addSettingsField("Assets/New/defaultModule", "Default Module", "list", "Default Module for new assets to be created into", %formattedModuleList); + SettingsInspector.addSettingsField("Assets/New/alwaysPromptModuleTarget", "Always Prompt Target Module", "bool", "If off, use the default module"); + SettingsInspector.endGroup(); + for(%i=0; %i < ImportAssetWindow.importConfigsList.Count(); %i++) { %configName = ImportAssetWindow.importConfigsList.getKey(%i); @@ -506,6 +528,7 @@ function ESettingsWindow::getAssetEditingSettings(%this) "will attempt to automatically import any inbound assets"@ "using the default config, without prompting the import window."@ "The window will still display if any issues are detected", ""); + SettingsInspector.addSettingsField("Assets/AutoImportLooseFiles", "Automatically Import Loose Files", "bool", "If on, will automatically import unassociated loose files in assets when navigating the Asset Browser.", ""); SettingsInspector.endGroup(); SettingsInspector.startGroup("Asset Browser"); @@ -516,7 +539,7 @@ function ESettingsWindow::getAssetEditingSettings(%this) SettingsInspector.addSettingsField("Assets/Browser/showEmptyFolders", "Show Empty Folders in Tiles view in Asset Browser", "bool", ""); SettingsInspector.addSettingsField("Assets/Browser/showLooseFiles", "Show Loose Files when viewing in Asset Browser", "bool", ""); SettingsInspector.addSettingsField("AssetManagement/Assets/promptOnRename", "Prompt on Rename", "bool", ""); - + SettingsInspector.addSettingsField("Assets/Browser/doubleClickAction", "Double Click Action", "list", "Dictates what sort of action double clicking on an asset in the Browser will invoke", "Edit Asset,Spawn Asset"); SettingsInspector.addSettingsField("AssetManagement/Assets/closeBrowserOnDragAction", "Close Browser on Drag Action", "bool", "If on, the Asset Browser will automatically close after dragging an asset from it to the editor interface."); SettingsInspector.endGroup(); } diff --git a/Templates/BaseGame/game/tools/gui/profiles.ed.tscript b/Templates/BaseGame/game/tools/gui/profiles.ed.tscript index c95f2bc6a..003bd314d 100644 --- a/Templates/BaseGame/game/tools/gui/profiles.ed.tscript +++ b/Templates/BaseGame/game/tools/gui/profiles.ed.tscript @@ -353,13 +353,18 @@ new GuiControlProfile( ToolsGuiButtonProfile ) { opaque = true; border = true; + fillColor = EditorSettings.value("Theme/tabsColor"); + fillColorHL = EditorSettings.value("Theme/tabsGLColor"); + fillColorSEL = EditorSettings.value("Theme/tabsSELColor"); + fillColorNA = EditorSettings.value("Theme/tabsSELColor"); + fontColor = EditorSettings.value("Theme/fieldTextColor"); fontColorHL = EditorSettings.value("Theme/fieldTextHLColor"); fontColorNA = EditorSettings.value("Theme/fieldTextSELColor"); fixedExtent = false; justify = "center"; canKeyFocus = false; - bitmapAsset = "ToolsModule:button_image"; + //bitmapAsset = "ToolsModule:button_image"; hasBitmapArray = false; category = "Tools"; }; diff --git a/Templates/BaseGame/game/tools/gui/scriptEditorDlg.ed.gui b/Templates/BaseGame/game/tools/gui/scriptEditorDlg.ed.gui index 328a2f525..34cc45762 100644 --- a/Templates/BaseGame/game/tools/gui/scriptEditorDlg.ed.gui +++ b/Templates/BaseGame/game/tools/gui/scriptEditorDlg.ed.gui @@ -1,76 +1,80 @@ //--- OBJECT WRITE BEGIN --- %guiContent = new GuiControl(ScriptEditorDlg,EditorGuiGroup) { - isContainer = "1"; - Profile = "ToolsGuiDefaultNonModalProfile"; - HorizSizing = "width"; - VertSizing = "height"; position = "0 0"; - Extent = "1024 768"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "ToolsGuiToolTipProfile"; + extent = "1024 768"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "height"; + profile = "ToolsGuiDefaultNonModalProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; - canSaveDynamicFields = "0"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "1"; new GuiWindowCtrl() { + text = "Text Pad"; resizeWidth = "0"; resizeHeight = "0"; canMove = "1"; canClose = "1"; canMinimize = "1"; canMaximize = "1"; - minSize = "50 50"; + canCollapse = "0"; closeCommand = "ScriptEditorDlg.close();"; - EdgeSnap = "1"; - text = "Text Pad"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - isContainer = "1"; - Profile = "ToolsGuiWindowProfile"; - HorizSizing = "center"; - VertSizing = "center"; - position = "176 120"; - Extent = "656 464"; - MinExtent = "8 8"; - canSave = "1"; - Visible = "1"; - Command = "ScriptEditorDlg.close();"; - Accelerator = "escape"; - tooltipprofile = "ToolsGuiToolTipProfile"; + edgeSnap = "1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "219 162"; + extent = "524 373"; + minExtent = "8 8"; + horizSizing = "center"; + vertSizing = "center"; + profile = "ToolsGuiWindowProfile"; + visible = "1"; + active = "1"; + command = "ScriptEditorDlg.close();"; + accelerator = "escape"; + tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; + isContainer = "1"; + canSave = "1"; canSaveDynamicFields = "0"; new GuiControl() { - isContainer = "1"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "width"; - VertSizing = "height"; position = "8 24"; - Extent = "640 392"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "ToolsGuiToolTipProfile"; + extent = "508 291"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "height"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; + isContainer = "1"; + canSave = "1"; canSaveDynamicFields = "0"; new GuiControl() { - isContainer = "1"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "width"; - VertSizing = "height"; - position = "8 7"; - Extent = "627 380"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "ToolsGuiToolTipProfile"; + position = "1 7"; + extent = "507 286"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "height"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; + isContainer = "1"; + canSave = "1"; canSaveDynamicFields = "0"; new GuiScrollCtrl() { @@ -82,23 +86,24 @@ constantThumbHeight = "0"; childMargin = "1 1"; mouseWheelScrollSpeed = "-1"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - isContainer = "1"; - Profile = "ToolsGuiScrollProfile"; - HorizSizing = "width"; - VertSizing = "height"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "0 0"; - Extent = "627 380"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "ToolsGuiToolTipProfile"; + extent = "507 286"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "height"; + profile = "ToolsGuiScrollProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; + isContainer = "1"; + canSave = "1"; canSaveDynamicFields = "0"; new GuiMLTextEditCtrl() { @@ -106,18 +111,19 @@ allowColorChars = "0"; maxChars = "-1"; useURLMouseCursor = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextPadProfile"; - HorizSizing = "width"; - VertSizing = "height"; position = "2 2"; - Extent = "623 380"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "ToolsGuiToolTipProfile"; + extent = "505 286"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "height"; + profile = "ToolsGuiTextPadProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; + isContainer = "0"; internalName = "TextPad"; + canSave = "1"; canSaveDynamicFields = "0"; }; }; @@ -125,7 +131,7 @@ }; new GuiIconButtonCtrl() { buttonMargin = "4 4"; - bitmapAsset = "ToolsModule:iconCancel_image"; + BitmapAsset = "ToolsModule:iconCancel_image"; iconLocation = "Left"; sizeIconToButton = "0"; makeIconSquare = "0"; @@ -136,23 +142,24 @@ groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "left"; - VertSizing = "top"; - position = "460 424"; - Extent = "80 25"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "ScriptEditorDlg.close();"; - tooltipprofile = "ToolsGuiToolTipProfile"; + position = "335 334"; + extent = "80 25"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "top"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "ScriptEditorDlg.close();"; + tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; + isContainer = "0"; + canSave = "1"; canSaveDynamicFields = "0"; }; new GuiIconButtonCtrl() { buttonMargin = "4 4"; - bitmapAsset = "ToolsModule:iconAccept_image"; + BitmapAsset = "ToolsModule:iconAccept_image"; iconLocation = "Left"; sizeIconToButton = "0"; makeIconSquare = "0"; @@ -163,18 +170,19 @@ groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "left"; - VertSizing = "top"; - position = "560 424"; - Extent = "80 25"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "_TextPadOnOk();"; - tooltipprofile = "ToolsGuiToolTipProfile"; + position = "436 334"; + extent = "80 25"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "top"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "_TextPadOnOk();"; + tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; + isContainer = "0"; + canSave = "1"; 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 c3acecec6..d37a0c645 100644 --- a/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript @@ -2039,13 +2039,17 @@ function MaterialEditorGui::pickedNewMaterialTargetModule( %this, %module ) PE_EmitterEditor.targetModule = %module; MaterialEditorGui.defaultMaterialFile = %moduleDef.ModulePath @ "/scripts/managedData/materials." @ $TorqueScriptFileExtension; + if(!isDirectory(filePath(MaterialEditorGui.defaultMaterialFile))) + { + AssetBrowser.dirHandler.createFolder(filePath(MaterialEditorGui.defaultMaterialFile)); + } + %action = %this.createUndo(ActionCreateNewMaterial, "Create New Material"); %action.object = ""; %material = getUniqueName( "newMaterial" ); new Material(%material) { - diffuseMap[0] = "core/rendering/images/warnmat"; mapTo = "unmapped_mat"; parentGroup = RootGroup; }; diff --git a/Templates/BaseGame/game/tools/particleEditor/particleEmitterEditor.ed.tscript b/Templates/BaseGame/game/tools/particleEditor/particleEmitterEditor.ed.tscript index ecd6c0209..d68fb936d 100644 --- a/Templates/BaseGame/game/tools/particleEditor/particleEmitterEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/particleEditor/particleEmitterEditor.ed.tscript @@ -563,6 +563,11 @@ function PE_EmitterEditor::pickedNewEmitterTargetModule( %this, %module ) PE_EmitterEditor.targetModule = %module; $PE_EMITTEREDITOR_DEFAULT_FILENAME = %moduleDef.ModulePath @ "/scripts/managedData/managedParticleEmitterData." @ $TorqueScriptFileExtension; + if(!isDirectory(filePath($PE_EMITTEREDITOR_DEFAULT_FILENAME))) + { + AssetBrowser.dirHandler.createFolder(filePath($PE_EMITTEREDITOR_DEFAULT_FILENAME)); + } + // Create a new emitter. %emitter = getUniqueName( "newEmitter" ); datablock ParticleEmitterData( %emitter : DefaultEmitter ) diff --git a/Templates/BaseGame/game/tools/particleEditor/particleParticleEditor.ed.tscript b/Templates/BaseGame/game/tools/particleEditor/particleParticleEditor.ed.tscript index ff6f4cd5f..e1a34fe4b 100644 --- a/Templates/BaseGame/game/tools/particleEditor/particleParticleEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/particleEditor/particleParticleEditor.ed.tscript @@ -498,6 +498,11 @@ function PE_ParticleEditor::pickedNewParticleTargetModule(%this, %module) %moduleDef = ModuleDatabase.findModule(%module); $PE_PARTICLEEDITOR_DEFAULT_FILENAME = %moduleDef.ModulePath @ "/scripts/managedData/managedParticleData." @ $TorqueScriptFileExtension; + if(!isDirectory(filePath($PE_PARTICLEEDITOR_DEFAULT_FILENAME))) + { + AssetBrowser.dirHandler.createFolder(filePath($PE_PARTICLEEDITOR_DEFAULT_FILENAME)); + } + // Create the particle datablock and add to the emitter. %newParticle = getUniqueName( "newParticle" ); diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.tscript index 6942a0cf9..e9f39b003 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.tscript @@ -159,7 +159,7 @@ function EPainter::updateLayers( %this, %matIndex ) %ctrl = new GuiIconButtonCtrl() { profile = "GuiCreatorIconButtonProfile"; - iconBitmap = "~/worldEditor/images/terrainpainter/new_layer_icon"; + iconBitmapAsset = "ToolsModule:new_layer_icon_image"; iconLocation = "Left"; textLocation = "Right"; extent = %listWidth SPC "46"; 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 3670c6ada..296fea200 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript @@ -246,14 +246,22 @@ function TerrainMaterialDlg::clearTextureMap(%this, %mapName) %targetMap.setBitmap($TerrainMaterialEditor::emptyMaterialImage); %targetMap.asset = ""; + %targetMapName = %this.findObjectByInternalName(%mapName @ "AssetId", true); + %targetMapName.setText("None"); + TerrainMaterialDlg.matDirty = true; if(%mapName $= "DetailMap") { //hide the supplemental maps NormalMapContainer.callOnChildren("setActive", false); + %this.clearTextureMap("NormalMap"); + ORMMapContainer.callOnChildren("setActive", false); + %this.clearTextureMap("ORMMap"); + MacroMapContainer.callOnChildren("setActive", false); + %this.clearTextureMap("MacroMap"); } } @@ -290,6 +298,9 @@ function TerrainMaterialDlg::changeTerrainMatMapAsset(%this) %targetMap.setBitmap( %image ); + %targetMapName = %mapName @ "AssetId"; + %targetMapName.setText(%imgAsset); + TerrainMaterialDlg.matDirty = true; } @@ -546,29 +557,32 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat ) %newName = %this-->matNameCtrl.getText(); + %blankBitmap = AssetDatabase.acquireAsset($TerrainMaterialEditor::emptyMaterialImage).getImagePath(); + + //--- %newDiffuse = %this-->texBaseMap.getBitmap(); - if(%newDiffuse $= $TerrainMaterialEditor::emptyMaterialImage) + if(%newDiffuse $= $TerrainMaterialEditor::emptyMaterialImage || %newDiffuse $= %blankBitmap) %newDiffuse = ""; //--- %newNormal = %this-->texNormalMap.getBitmap(); - if(%newNormal $= $TerrainMaterialEditor::emptyMaterialImage) + if(%newNormal $= $TerrainMaterialEditor::emptyMaterialImage || %newNormal $= %blankBitmap) %newNormal = ""; //--- %newormConfig = %this-->texORMConfigMap.getBitmap(); - if(%newormConfig $= $TerrainMaterialEditor::emptyMaterialImage) + if(%newormConfig $= $TerrainMaterialEditor::emptyMaterialImage || %newormConfig $= %blankBitmap) %newormConfig = ""; //--- %newDetail = %this-->texDetailMap.getBitmap(); - if(%newDetail $= $TerrainMaterialEditor::emptyMaterialImage) + if(%newDetail $= $TerrainMaterialEditor::emptyMaterialImage || %newDetail $= %blankBitmap) %newDetail = ""; //--- %newMacro = %this-->texMacroMap.getBitmap(); - if(%newMacro $= $TerrainMaterialEditor::emptyMaterialImage) + if(%newMacro $= $TerrainMaterialEditor::emptyMaterialImage || %newMacro $= %blankBitmap) %newMacro = ""; %detailSize = %this-->detSizeCtrl.getText(); diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.tscript index ee18a443f..efe33ee45 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.tscript @@ -1059,7 +1059,12 @@ function EditorDropTypeMenu::onSelectItem(%this, %id, %text) // a drop type is selected in the menu. EWorldEditor.dropType = getField(%this.item[%id], 2); - %this.checkRadioItem(0, (%this.getItemCount() - 1), %id); + for(%i=0; %i < %this.getItemCount() + 1; %i++) + { + %this.checkItem(%i, false); + } + + %this.checkItem(%id, true); return true; }