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); +}