From 70a70dfc102e2763420735e075381c504277bcec Mon Sep 17 00:00:00 2001 From: JeffR Date: Sat, 23 Apr 2022 16:07:36 -0500 Subject: [PATCH 1/3] Fixes issue with some of the On/Off options not properly toggling in the OptionsMenu Adds staged loading/generation of preview images for image, shape, material and terrain material types to improve navigation responsiveness Disabled lookup of bitmap info of image assets for tooltip metadata as it was causing major hangs when the images were high resolution Added function so Import new File button on AB interface will correctly prompt to find and then import in a new file Fixed theming of AssetBrowser preview card profiles to improve readability Fixed theming of ToolsGuiTextListProfile to improve readability Fixed issue where trying to import in a splat map for importing terrain data could fail due to not having full path when trying to load the bitmap's channel data Corrected Import Terrain Heightmap item in menubar to prompt creation of a new terrain asset in addition to opening the import terraindata window to avoid missed steps foc creation --- .../game/data/UI/guis/optionsMenu.tscript | 8 +- .../tools/assetBrowser/guis/assetBrowser.gui | 1 + .../assetBrowser/scripts/assetBrowser.tscript | 34 ++++++- .../scripts/assetTypes/image.tscript | 91 +++++++++-------- .../scripts/assetTypes/material.tscript | 97 +++++++++++-------- .../scripts/assetTypes/shape.tscript | 83 ++++++++++------ .../assetTypes/terrainMaterial.tscript | 71 ++++++++------ .../assetBrowser/scripts/newAsset.tscript | 27 ++++++ .../assetBrowser/scripts/profiles.tscript | 31 +++--- .../game/tools/gui/profiles.ed.tscript | 6 ++ .../worldEditor/gui/guiTerrainImportGui.gui | 2 +- .../worldEditor/scripts/menus.ed.tscript | 2 +- 12 files changed, 288 insertions(+), 165 deletions(-) diff --git a/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript b/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript index aa343f81f..40540c1ab 100644 --- a/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript +++ b/Templates/BaseGame/game/data/UI/guis/optionsMenu.tscript @@ -836,11 +836,11 @@ function OptionsMenuSettingsList::addOptionBoolRow(%this, %label, %targetPrefVar if(%qualityLevelList $= $yesNoList && isInt(%defaultValue)) { - %defaultValue = convertBoolToYesNo(!%defaultValue); + %defaultValue = convertBoolToYesNo(%defaultValue); } else if(%qualityLevelList $= $onOffList && isInt(%defaultValue)) { - %defaultValue = convertBoolToOnOff(!%defaultValue); + %defaultValue = convertBoolToOnOff(%defaultValue); } return %this.addOptionRow(%label, %targetPrefVar, %qualityLevelList, @@ -995,9 +995,11 @@ function MenuOptionsButton::onChange(%this) OptionsMenu.unappliedChanges.add(%targetVar, "\"" @ %saveReadyValue @ "\"" ); } else + { OptionsMenu.unappliedChanges.setValue("\"" @ %saveReadyValue @ "\"", %prefIndex); } } + } else if(%optionMode == 1) { %currentValue = %this.getValue(); @@ -1009,7 +1011,9 @@ function MenuOptionsButton::onChange(%this) OptionsMenu.unappliedChanges.add(%targetVar, "\"" @ %currentValue @ "\"" ); } else + { OptionsMenu.unappliedChanges.setValue("\"" @ %currentValue @ "\"", %prefIndex); + } } //Update the UI in case there's responsive logic diff --git a/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui b/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui index 29c282c5b..c4df19d95 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui +++ b/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui @@ -276,6 +276,7 @@ $guiContent = new GuiControl(AssetBrowser) { hovertime = "1000"; isContainer = "0"; internalName = "ImportAssetButton"; + command="AssetBrowser.importNewFile();"; canSave = "1"; canSaveDynamicFields = "0"; }; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript index fd3a7b213..3dd7b881d 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript @@ -368,8 +368,6 @@ function AssetBrowser::buildAssetPreview( %this, %asset, %moduleName ) %this.previewData.doubleClickCommand = ""; } - AssetPreviewArray.empty(); - %previewImage = "core/art/warnmat"; if(/*%moduleName !$= "" && */ModuleDatabase.findModule(%moduleName, 1) !$= "") @@ -512,6 +510,7 @@ function AssetBrowser::buildAssetPreview( %this, %asset, %moduleName ) textLocation = "Bottom"; extent = %previewSize.x SPC %previewSize.y + %textBottomPad; buttonType = "RadioButton"; + buttonMargin = "0 -10"; profile = ToolsGuiDefaultProfile; }; @@ -528,11 +527,15 @@ function AssetBrowser::buildAssetPreview( %this, %asset, %moduleName ) %previewButton.iconLocation = "Left"; %previewButton.textLocation = "Right"; %previewButton.setextent(120,20); + + AssetBrowser.previewListMode = true; } else { %size = %previewSize.x * %previewScaleSize; %previewButton.setextent(%size,%size + %textBottomPad); + + AssetBrowser.previewListMode = false; } //%previewButton.extent = %previewSize.x + %previewBounds SPC %previewSize.y + %previewBounds + 24; @@ -549,6 +552,8 @@ function AssetBrowser::buildAssetPreview( %this, %asset, %moduleName ) %doubleClickCommand = "AssetBrowser.editAsset( "@%assetDesc@" );"; } + %this.previewData.previewLoaded = true; + //Build out the preview %buildCommand = %this @ ".build" @ %assetType @ "Preview(\"" @ %assetDesc @ "\"," @ %this.previewData @ ");"; eval(%buildCommand); @@ -579,7 +584,8 @@ function AssetBrowser::buildAssetPreview( %this, %asset, %moduleName ) AssetBrowser-->assetList.add(%previewButton); // add to the array object for reference later - AssetPreviewArray.add( %previewButton, %this.previewData.previewImage ); + if(%this.previewData.previewLoaded == false) + AssetPreviewArray.add( %previewButton ); } function AssetBrowser::refresh(%this) @@ -607,6 +613,25 @@ function AssetBrowser::doRefresh(%this) %this.dirty = false; } } + +function AssetBrowser::populatePreviewImages(%this) +{ + echo("AssetBrowser::populatePreviewImages() - Previews to generate: " @ AssetPreviewArray.count()); + for(%i=0; %i < AssetPreviewArray.count(); %i++) + { + %previewButton = AssetPreviewArray.getKey(%i); + %type = %previewButton.assetType; + + echo(" - Generating preview for asset: " @ %previewButton.moduleName @ ":" @ %previewButton.assetName); + + AssetBrowser.call("generate" @ %previewButton.assetType @ "PreviewImage", %previewButton); + AssetPreviewArray.erase(%i); + + echo(" - done, scheduling another pass"); + AssetBrowser.schedule(32, "populatePreviewImages"); + return; + } +} // // /*function AssetPreviewButton::onClick(%this) @@ -716,7 +741,6 @@ function AssetBrowser::loadDirectories( %this ) //} // } - AssetPreviewArray.empty(); AssetBrowser-->filterTree.buildVisibleTree(true); @@ -1776,6 +1800,8 @@ function AssetBrowser::doRebuildAssetArray(%this) for(%i=0; %i < $AssetBrowser::AssetArray.count(); %i++) AssetBrowser.buildAssetPreview( $AssetBrowser::AssetArray.getValue(%i), $AssetBrowser::AssetArray.getKey(%i) ); + //Queue population of any non-Type Card preview images + AssetBrowser.schedule(32, "populatePreviewImages"); AssetBrowser_FooterText.text = %finalAssetCount @ " Assets"; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript index 167b3f197..f118fc078 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript @@ -175,20 +175,48 @@ function AssetBrowser::importImageAsset(%this, %assetItem) AssetDatabase.refreshAsset(%assetId); } -function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData, %forcePreviewRegenerate) +function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData) { - if(%forcePreviewRegenerate $= "") - %forcePreviewRegenerate = false; + //%module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%assetDef.getImagePath()))); - %module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%assetDef.getImagePath()))); - %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/"; + %previewData.previewImage = "ToolsModule:genericAssetIcon_image"; + %previewData.previewLoaded = false; //this marks it for loading progressively later + + %previewData.assetName = %assetDef.assetName; + %previewData.assetPath = %assetDef.scriptFile; + + %previewData.assetFriendlyName = %assetDef.assetName; + %previewData.assetDesc = %assetDef.description; + + //image info + //%info = %assetDef.getImageInfo(); + + %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ "\n" @ + "Asset Type: Image Asset\n" @ + "Asset Definition ID: " @ %assetDef @ "\n" @ + "Image Type: " @ %assetDef.imageType @ "\n" @ + /* "Format: " @ getWord(%info, 0) @ "\n" @ + "Height: " @ getWord(%info, 1) @ "\n" @ + "Width: " @ getWord(%info, 2) @ "\n" @ + "Depth: " @ getWord(%info, 3) @ "\n" @ */ + "Image File path: " @ %assetDef.getImagePath(); +} + +function AssetBrowser::generateImageAssetPreviewImage(%this, %previewButton, %forceRegenerate) +{ + if(%forceRegenerate $= "") + %forceRegenerate = false; + + %previewPath = "tools/resources/previewCache/" @ %previewButton.moduleName @ "/"; if(!IsDirectory(%previewPath)) { %this.dirHandler.createFolder(%previewPath); } - %generatePreview = false; + %assetId = %previewButton.moduleName @ ":" @ %previewButton.assetName; + + %assetDef = AssetDatabase.acquireAsset(%assetId); %previewFilePath = %previewPath @ %assetDef.assetName @ "_Preview.png"; if(!isFile(%previewFilePath) || (compareFileTimes(%assetDef.getImagePath(), %previewFilePath) == 1)) @@ -196,12 +224,10 @@ function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData, %f %generatePreview = true; } - %previewAssetName = %module.moduleId @ "_" @ %assetDef.assetName @ "_PreviewImage"; + %previewAssetName = %previewButton.moduleName @ "_" @ %assetDef.assetName @ "_PreviewImage"; - if(%generatePreview || %forcePreviewRegenerate) + if(%generatePreview || %forceRegenerate) { - displayEditorLoadingGui("Generating Image Asset Preview..."); - %success = saveScaledImage(%assetDef.getImagePath(), %previewFilePath, EditorSettings.value("Assets/Browser/PreviewImageSize")); if(%success) @@ -222,49 +248,28 @@ function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData, %f %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1); %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath); + + if(!%success) + { + return false; //failed to register the preview image for some reason? } } - else - { - %previewFilePath = %assetDef.getImagePath(); - %previewAssetName = %module.moduleId @ ":" @ %assetDef.assetName; + + %previewButton.bitmapAsset = %previewAssetName; + return true; } - - hideEditorLoadingGui(); } else { - %previewAssetName = "ToolsModule:" @ %previewAssetName; - } - - //Revalidate. If it didn't work, just use the default placeholder one - if(!isFile(%previewFilePath)) + //just map the existing one then + if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) { - %previewData.previewImage = "ToolsModule:genericAssetIcon_image"; + %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; + return true; } - else - { - %previewData.previewImage = %previewAssetName; } - %previewData.assetName = %assetDef.assetName; - %previewData.assetPath = %assetDef.scriptFile; - - %previewData.assetFriendlyName = %assetDef.assetName; - %previewData.assetDesc = %assetDef.description; - - //image info - %info = %assetDef.getImageInfo(); - - %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ "\n" @ - "Asset Type: Image Asset\n" @ - "Asset Definition ID: " @ %assetDef @ "\n" @ - "Image Type: " @ %assetDef.imageType @ "\n" @ - "Format: " @ getWord(%info, 0) @ "\n" @ - "Height: " @ getWord(%info, 1) @ "\n" @ - "Width: " @ getWord(%info, 2) @ "\n" @ - "Depth: " @ getWord(%info, 3) @ "\n" @ - "Image File path: " @ %assetDef.getImagePath(); + return false; } //Renames the asset diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript index d6d48819c..12c6d4e3d 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript @@ -426,8 +426,43 @@ function AssetBrowser::importMaterialAsset(%this, %assetItem) function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData, %forcePreviewRegenerate) { - if(%forcePreviewRegenerate $= "") - %forcePreviewRegenerate = false; + %previewData.previewImage = "ToolsModule:genericAssetIcon_image"; + %previewData.previewLoaded = false; //this marks it for loading progressively later + + %previewData.assetName = %assetDef.assetName; + %previewData.assetPath = %assetDef.scriptFile; + + %previewData.assetFriendlyName = %assetDef.assetName; + %previewData.assetDesc = %assetDef.description; + + if(%this.selectMode) + %previewData.doubleClickCommand = "AssetBrowser.selectAsset( AssetBrowser.selectedAsset );"; + else + %previewData.doubleClickCommand = "AssetBrowser.editAsset( "@%assetDef@" );"; + + %definitionPath = %assetDef.getScriptPath(); + if(%definitionPath $= "") + %definitionPath = %assetDef.getFilename(); + + %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ + "\nAsset Type: Material Asset" @ + "\nAsset Definition ID: " @ %assetDef @ + "\nDefinition Path: " @ %definitionPath; + + if(!%this.selectMode) + { + %previewData.doubleClickCommand = "AssetBrowser.editAsset( "@%assetDef@" );"; + } +} + +function AssetBrowser::generateMaterialAssetPreviewImage(%this, %previewButton, %forceRegenerate) +{ + if(%forceRegenerate $= "") + %forceRegenerate = false; + + %assetId = %previewButton.moduleName @ ":" @ %previewButton.assetName; + + %assetDef = AssetDatabase.acquireAsset(%assetId); %module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(AssetDatabase.getAssetFilePath(%assetDef.getAssetId())))); %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/"; @@ -456,10 +491,8 @@ function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData, %previewAssetName = %module.moduleId @ "_" @ %assetDef.assetName @ "_PreviewImage"; - if(%generatePreview || %forcePreviewRegenerate) + if(%generatePreview || %forceRegenerate) { - displayEditorLoadingGui("Generating Material Asset Preview..."); - if(isObject(%assetDef.materialDefinitionName)) { //real fast, we'll be 100% sure that the image resource we need is loaded @@ -490,50 +523,28 @@ function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData, %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1); %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath); + + if(!%success) + { + return false; //failed to register the preview image for some reason? } } - else + + %previewButton.bitmapAsset = %previewAssetName; + return true; + } + } + else + { + //just map the existing one then + if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) { - error("Failed to generate preview for material: " @ %assetDef.materialDefinitionName); + %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; + return true; } - - hideEditorLoadingGui(); - } - - //Revalidate. If it didn't work, just use the default placeholder one - if(!isFile(%previewFilePath)) - { - %previewData.previewImage = "ToolsModule:materialIcon_image"; - } - else - { - %previewData.previewImage = "ToolsModule:" @ %previewAssetName; } - %previewData.assetName = %assetDef.assetName; - %previewData.assetPath = %assetDef.scriptFile; - - %previewData.assetFriendlyName = %assetDef.assetName; - %previewData.assetDesc = %assetDef.description; - - if(%this.selectMode) - %previewData.doubleClickCommand = "AssetBrowser.selectAsset( AssetBrowser.selectedAsset );"; - else - %previewData.doubleClickCommand = "AssetBrowser.editAsset( "@%assetDef@" );"; - - %definitionPath = %assetDef.getScriptPath(); - if(%definitionPath $= "") - %definitionPath = %assetDef.getFilename(); - - %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ - "\nAsset Type: Material Asset" @ - "\nAsset Definition ID: " @ %assetDef @ - "\nDefinition Path: " @ %definitionPath; - - if(!%this.selectMode) - { - %previewData.doubleClickCommand = "AssetBrowser.editAsset( "@%assetDef@" );"; - } + return false; } function AssetBrowser::onMaterialAssetEditorDropped(%this, %assetDef, %position) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript index c70750e90..4195cf1b9 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript @@ -265,8 +265,44 @@ function AssetBrowser::importShapeAsset(%this, %assetItem) function AssetBrowser::buildShapeAssetPreview(%this, %assetDef, %previewData, %forcePreviewRegenerate) { - if(%forcePreviewRegenerate $= "") - %forcePreviewRegenerate = false; + %previewData.previewImage = "ToolsModule:genericAssetIcon_image"; + %previewData.previewLoaded = false; //this marks it for loading progressively later + + %previewData.assetName = %assetDef.assetName; + %previewData.assetPath = %assetDef.fileName; + + %previewData.assetFriendlyName = %assetDef.assetName; + %previewData.assetDesc = %assetDef.description; + %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ "\n" @ + "Asset Type: Shape Asset\n" @ + "Asset Definition ID: " @ %assetDef @ "\n" @ + "Shape File path: " @ %assetDef.getShapePath(); + + 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::generateShapeAssetPreviewImage(%this, %previewButton, %forceRegenerate) +{ + if(%forceRegenerate $= "") + %forceRegenerate = false; + + %assetId = %previewButton.moduleName @ ":" @ %previewButton.assetName; + + %assetDef = AssetDatabase.acquireAsset(%assetId); %module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%assetDef.getShapePath()))); %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/"; @@ -286,10 +322,8 @@ function AssetBrowser::buildShapeAssetPreview(%this, %assetDef, %previewData, %f %previewAssetName = %module.moduleId @ "_" @ %assetDef.assetName @ "_PreviewImage"; - if(%generatePreview || %forcePreviewRegenerate) + if(%generatePreview || %forceRegenerate) { - displayEditorLoadingGui("Generating Shape Asset Preview..."); - //real fast, we'll be 100% sure that the image resource we need is loaded %matSlot0AssetId = %assetDef.materialSlot0; @@ -322,46 +356,31 @@ function AssetBrowser::buildShapeAssetPreview(%this, %assetDef, %previewData, %f %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1); %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath); - } - hideEditorLoadingGui(); + if(!%success) + { + return false; //failed to register the preview image for some reason? } - - //Revalidate. If it didn't work, just use the default placeholder one - if(!isFile(%previewFilePath)) - { - %previewData.previewImage = "ToolsModule:genericAssetIcon_image"; } else { - %previewData.previewImage = "ToolsModule:" @ %previewAssetName; + %previewAssetName = "ToolsModule:" @ %previewAssetName; } - %previewData.assetName = %assetDef.assetName; - %previewData.assetPath = %assetDef.fileName; - - %previewData.assetFriendlyName = %assetDef.assetName; - %previewData.assetDesc = %assetDef.description; - %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ "\n" @ - "Asset Type: Shape Asset\n" @ - "Asset Definition ID: " @ %assetDef @ "\n" @ - "Shape File path: " @ %assetDef.getShapePath(); - - if(%this.selectMode) - { - %previewData.doubleClickCommand = "AssetBrowser.selectAsset( AssetBrowser.selectedAsset );"; + %previewButton.bitmapAsset = %previewAssetName; + return true; } else { - if(EditorSettings.value("Assets/Browser/doubleClickAction", "Edit Asset") $= "Edit Asset") + //just map the existing one then + if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) { - %previewData.doubleClickCommand = "AssetBrowser.editAsset( "@%assetDef@" );"; - } - else - { - %previewData.doubleClickCommand = "AssetBrowser.onShapeAssetEditorDropped( "@%assetDef@" );"; + %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; + return true; } } + + return false; } function AssetBrowser::onShapeAssetEditorDropped(%this, %assetDef, %position) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript index 8176d0da0..ded898e9f 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript @@ -111,8 +111,35 @@ function AssetBrowser::moveTerrainMaterialAsset(%this, %assetDef, %destination) function AssetBrowser::buildTerrainMaterialAssetPreview(%this, %assetDef, %previewData, %forcePreviewRegenerate) { - if(%forcePreviewRegenerate $= "") - %forcePreviewRegenerate = false; + %previewData.previewImage = "ToolsModule:genericAssetIcon_image"; + %previewData.previewLoaded = false; //this marks it for loading progressively later + + %previewData.assetName = %assetDef.assetName; + %previewData.assetPath = ""; + %previewData.doubleClickCommand = ""; + + %previewData.assetFriendlyName = %assetDef.gameObjectName; + %previewData.assetDesc = %assetDef.description; + %previewData.tooltip = %assetDef.gameObjectName; + + %definitionPath = %assetDef.getScriptPath(); + if(%definitionPath $= "") + %definitionPath = %assetDef.getFilename(); + + %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ + "\nAsset Type: Terrain Material Asset" @ + "\nAsset Definition ID: " @ %assetDef @ + "\nDefinition Path: " @ %definitionPath; +} + +function AssetBrowser::generateTerrainMaterialAssetPreviewImage(%this, %previewButton, %forceRegenerate) +{ + if(%forceRegenerate $= "") + %forceRegenerate = false; + + %assetId = %previewButton.moduleName @ ":" @ %previewButton.assetName; + + %assetDef = AssetDatabase.acquireAsset(%assetId); %module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(AssetDatabase.getAssetFilePath(%assetDef.getAssetId())))); %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/"; @@ -141,10 +168,8 @@ function AssetBrowser::buildTerrainMaterialAssetPreview(%this, %assetDef, %previ %previewAssetName = %module.moduleId @ "_" @ %assetDef.assetName @ "_PreviewImage"; - if(%generatePreview || %forcePreviewRegenerate) + if(%generatePreview || %forceRegenerate) { - displayEditorLoadingGui("Generating Material Asset Preview..."); - if(isObject(%assetDef.materialDefinitionName)) { %previewShapeDef = AssetDatabase.acquireAsset("ToolsModule:previewSphereShape"); @@ -169,38 +194,28 @@ function AssetBrowser::buildTerrainMaterialAssetPreview(%this, %assetDef, %previ %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1); %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath); + + if(!%success) + { + return false; //failed to register the preview image for some reason? } } - hideEditorLoadingGui(); + %previewButton.bitmapAsset = %previewAssetName; + return true; } - - //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; + //just map the existing one then + if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) + { + %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; + return true; + } } - %previewData.assetName = %assetDef.assetName; - %previewData.assetPath = ""; - %previewData.doubleClickCommand = ""; - - %previewData.assetFriendlyName = %assetDef.gameObjectName; - %previewData.assetDesc = %assetDef.description; - %previewData.tooltip = %assetDef.gameObjectName; - - %definitionPath = %assetDef.getScriptPath(); - if(%definitionPath $= "") - %definitionPath = %assetDef.getFilename(); - - %previewData.tooltip = "Asset Name: " @ %assetDef.assetName @ - "\nAsset Type: Terrain Material Asset" @ - "\nAsset Definition ID: " @ %assetDef @ - "\nDefinition Path: " @ %definitionPath; + return false; } function GuiInspectorTypeTerrainMaterialAssetPtr::onClick( %this, %fieldName ) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript index e3a813862..c4fe9b537 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/newAsset.tscript @@ -139,6 +139,33 @@ function newAssetUpdatePath(%newPath) NewAssetTargetModule.text = AssetBrowser.dirHandler.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress).ModuleId; } +// +function AssetBrowser::importNewFile(%this) +{ + %importingPath = ""; + + %dlg = new OpenFileDialog() + { + Filters = "(All Files (*.*)|*.*|"; + DefaultFile = ""; + ChangePath = false; + MustExist = true; + MultipleFiles = false; + forceRelativePath = false; + }; + + if ( %dlg.Execute() ) + { + %importingPath = makeFullPath(%dlg.FileName); + } + + %dlg.delete(); + + AssetBrowser.onBeginDropFiles(); + AssetBrowser.onDropFile(%importingPath); + AssetBrowser.onEndDropFiles(); +} + // function NewAssetTargetModule::onSelect(%this, %idx, %idy) { diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/profiles.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/profiles.tscript index b8825155e..5c3f03ba7 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/profiles.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/profiles.tscript @@ -1,7 +1,7 @@ singleton GuiControlProfile(AssetBrowserPreviewImageAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected - //fillColorNA = "230 126 0 255"; //fill color default + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "230 126 0 255"; @@ -10,7 +10,8 @@ singleton GuiControlProfile(AssetBrowserPreviewImageAsset : ToolsGuiDefaultProfi singleton GuiControlProfile(AssetBrowserPreviewMaterialAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "0 100 0 255"; @@ -19,7 +20,8 @@ singleton GuiControlProfile(AssetBrowserPreviewMaterialAsset : ToolsGuiDefaultPr singleton GuiControlProfile(AssetBrowserPreviewShapeAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "0 0 200 255"; @@ -28,7 +30,8 @@ singleton GuiControlProfile(AssetBrowserPreviewShapeAsset : ToolsGuiDefaultProfi singleton GuiControlProfile(AssetBrowserPreviewShapeAnimationAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "0 0 200 255"; @@ -37,7 +40,8 @@ singleton GuiControlProfile(AssetBrowserPreviewShapeAnimationAsset : ToolsGuiDef singleton GuiControlProfile(AssetBrowserPreviewSoundAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "75 101 135 255"; @@ -46,7 +50,8 @@ singleton GuiControlProfile(AssetBrowserPreviewSoundAsset : ToolsGuiDefaultProfi singleton GuiControlProfile(AssetBrowserPreviewTerrainAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "200 198 198 255"; @@ -55,7 +60,8 @@ singleton GuiControlProfile(AssetBrowserPreviewTerrainAsset : ToolsGuiDefaultPro singleton GuiControlProfile(AssetBrowserPreviewTerrainMaterialAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "200 198 198 255"; @@ -64,7 +70,8 @@ singleton GuiControlProfile(AssetBrowserPreviewTerrainMaterialAsset : ToolsGuiDe singleton GuiControlProfile(AssetBrowserPreviewStateMachineAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "0 76 135 255"; @@ -73,7 +80,8 @@ singleton GuiControlProfile(AssetBrowserPreviewStateMachineAsset : ToolsGuiDefau singleton GuiControlProfile(AssetBrowserPreviewGUIAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "17 5 44 255"; @@ -82,7 +90,8 @@ singleton GuiControlProfile(AssetBrowserPreviewGUIAsset : ToolsGuiDefaultProfile singleton GuiControlProfile(AssetBrowserPreviewLevelAsset : ToolsGuiDefaultProfile) { - fillColor = "128 128 128 255"; //hovered/selected + fillcolor = EditorSettings.value("Theme/windowBackgroundColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); border = true; borderColor = "0 208 186 255"; diff --git a/Templates/BaseGame/game/tools/gui/profiles.ed.tscript b/Templates/BaseGame/game/tools/gui/profiles.ed.tscript index 65d068e8a..478c15ce7 100644 --- a/Templates/BaseGame/game/tools/gui/profiles.ed.tscript +++ b/Templates/BaseGame/game/tools/gui/profiles.ed.tscript @@ -285,6 +285,12 @@ new GuiControlProfile( ToolsGuiTextArrayProfile : ToolsGuiTextProfile ) if( !isObject( ToolsGuiTextListProfile ) ) new GuiControlProfile( ToolsGuiTextListProfile : ToolsGuiTextProfile ) { + fontColor = EditorSettings.value("Theme/fieldTextColor"); + fontColorHL = EditorSettings.value("Theme/fieldTextHLColor"); + fontColorSEL = EditorSettings.value("Theme/fieldTextSELColor"); + fillColor = EditorSettings.value("Theme/fieldBGColor"); + fillColorHL = EditorSettings.value("Theme/fieldBGHLColor"); + fillColorSEL = EditorSettings.value("Theme/fieldBGSELColor"); tab = true; canKeyFocus = true; category = "Tools"; diff --git a/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainImportGui.gui b/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainImportGui.gui index ae0342a2a..3576e8734 100644 --- a/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainImportGui.gui +++ b/Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainImportGui.gui @@ -586,7 +586,7 @@ function TerrainImportGuiAddOpacityMap( %name ) // once per channel in the file // currently it works with just grayscale. %channelsTxt = "R" TAB "G" TAB "B" TAB "A"; - %bitmapInfo = getBitmapinfo( %name ); + %bitmapInfo = getBitmapinfo( makeFullPath(%name) ); %channelCount = getWord( %bitmapInfo, 2 ); diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.tscript index 48cb8c5d5..0fd609019 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.tscript @@ -158,7 +158,7 @@ function EditorGui::buildMenus(%this) //%fileMenu.appendItem("Create Blank Terrain" TAB "" TAB "Canvas.pushDialog( CreateNewTerrainGui );"); %fileMenu.appendItem("Create Blank Terrain" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule, createTerrainBlock);"); - %fileMenu.appendItem("Import Terrain Heightmap" TAB "" TAB "Canvas.pushDialog( TerrainImportGui );"); + %fileMenu.appendItem("Import Terrain Heightmap" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule, createTerrainBlock); Canvas.pushDialog( TerrainImportGui );"); %fileMenu.appendItem("Export Terrain Heightmap" TAB "" TAB "Canvas.pushDialog( TerrainExportGui );"); %fileMenu.appendItem("-"); From 4f3d6c918bcbad23c15967a0602b84ac9feeffd3 Mon Sep 17 00:00:00 2001 From: JeffR Date: Sun, 24 Apr 2022 12:16:22 -0500 Subject: [PATCH 2/3] Fixes issue where storing of AB position and extent wasn't applying correctly Changes ShapeEditor's Library tab to an "Assets" tab and opens the AB with the shapeAsset filter on Adds Asset tab to world editor scenetree window that opens the assetBrowser Fixes issue where opening default scene in worldEditor would activate the saveAs dirty flag, then if you exit the level and open a new one, you can only saveAs and not save the existing level asset --- .../tools/assetBrowser/guis/assetBrowser.gui | 4 +- .../game/tools/assetBrowser/main.tscript | 9 + .../gui/shapeEdSelectWindow.ed.gui | 122 +-------- .../game/tools/shapeEditor/main.tscript | 1 - .../scripts/shapeEditor.ed.tscript | 234 +----------------- .../gui/WorldEditorTreeWindow.ed.gui | 23 ++ .../worldEditor/scripts/EditorGui.ed.tscript | 2 + .../worldEditor/scripts/editor.ed.tscript | 1 + 8 files changed, 49 insertions(+), 347 deletions(-) diff --git a/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui b/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui index c4df19d95..1d3209b90 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui +++ b/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui @@ -157,8 +157,8 @@ $guiContent = new GuiControl(AssetBrowser) { position = "204 80"; extent = "615 608"; minExtent = "383 274"; - horizSizing = "center"; - vertSizing = "center"; + horizSizing = "windowRelative"; + vertSizing = "windowRelative"; profile = "ToolsGuiWindowProfile"; visible = "1"; active = "1"; diff --git a/Templates/BaseGame/game/tools/assetBrowser/main.tscript b/Templates/BaseGame/game/tools/assetBrowser/main.tscript index 8f6ca92dd..c912f2ee3 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/main.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/main.tscript @@ -169,6 +169,15 @@ function AssetBrowserPlugin::onWorldEditorStartup( %this ) { } +function AssetBrowserPlugin::onWorldEditorShutdown( %this ) +{ + //force close us real fast to save off current settings/configs + if(AssetBrowser.isAwake()) + { + AssetBrowser.hideDialog(); + } +} + function AssetBrowserPlugin::initSettings( %this ) { EditorSettings.beginGroup( "Assets", true ); diff --git a/Templates/BaseGame/game/tools/shapeEditor/gui/shapeEdSelectWindow.ed.gui b/Templates/BaseGame/game/tools/shapeEditor/gui/shapeEdSelectWindow.ed.gui index 1311e16ea..c92f2ac3b 100644 --- a/Templates/BaseGame/game/tools/shapeEditor/gui/shapeEdSelectWindow.ed.gui +++ b/Templates/BaseGame/game/tools/shapeEditor/gui/shapeEdSelectWindow.ed.gui @@ -45,7 +45,7 @@ $guiContent = new GuiControl() { EdgeSnap = "1"; text = "Shapes"; - new GuiTabBookCtrl() { + new GuiTabBookCtrl(ShapeEditorTabbook) { internalName = "tabBook"; canSaveDynamicFields = "0"; isContainer = "1"; @@ -175,126 +175,8 @@ $guiContent = new GuiControl() { AnchorBottom = "0"; AnchorLeft = "1"; AnchorRight = "0"; - text = "Library"; + text = "Assets"; maxLength = "1024"; - - new GuiContainer() { - isContainer = "1"; - HorizSizing = "width"; - VertSizing = "height"; - position = "0 0"; - Extent = "202 146"; - MinExtent = "0 -500"; - Profile = "GuiInspectorProfile"; - }; - new GuiBitmapBorderCtrl() { - isContainer = "1"; - HorizSizing = "width"; - VertSizing = "height"; - position = "0 0"; - Extent = "202 146"; - MinExtent = "0 -500"; - Profile = "ToolsGuiTabBorderProfile"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "3 4"; - Extent = "20 19"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "ShapeEdSelectWindow.navigateUp();"; - tooltipprofile = "ToolsGuiToolTipProfile"; - hovertime = "1000"; - groupNum = "0"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmapAsset = "ToolsModule:folderUp_image"; - }; - new GuiPopUpMenuCtrl(ShapeEdSelectMenu) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiPopUpMenuProfile"; - HorizSizing = "width"; - VertSizing = "bottom"; - position = "26 4"; - Extent = "172 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "ToolsGuiToolTipProfile"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "art"; - maxLength = "1024"; - maxPopupHeight = "200"; - sbUsesNAColor = "0"; - reverseTextList = "0"; - bitmapBounds = "16 16"; - }; - new GuiScrollCtrl() { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiScrollProfile"; - HorizSizing = "width"; - VertSizing = "height"; - position = "0 24"; - Extent = "202 122"; - MinExtent = "8 -500"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "ToolsGuiToolTipProfile"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - willFirstRespond = "1"; - hScrollBar = "dynamic"; - vScrollBar = "dynamic"; - lockHorizScroll = false; - lockVertScroll = "false"; - constantThumbHeight = "0"; - childMargin = "0 0"; - mouseWheelScrollSpeed = "-1"; - - new GuiDynamicCtrlArrayControl() { - internalName = "shapeLibrary"; - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiTransparentProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "189 42"; - MinExtent = "8 11"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "ToolsGuiToolTipProfile"; - hovertime = "1000"; - colCount = "1"; - colSize = "64"; - rowCount = "0"; - RowSize = "64"; - rowSpacing = "4"; - colSpacing = "4"; - frozen = "0"; - autoCellSize = "1"; - fillRowFirst = "1"; - dynamicSize = "1"; - }; - }; }; //--------------------------------------------------------------- diff --git a/Templates/BaseGame/game/tools/shapeEditor/main.tscript b/Templates/BaseGame/game/tools/shapeEditor/main.tscript index 1fa7626c4..958d609f6 100644 --- a/Templates/BaseGame/game/tools/shapeEditor/main.tscript +++ b/Templates/BaseGame/game/tools/shapeEditor/main.tscript @@ -127,7 +127,6 @@ function ShapeEditorPlugin::onWorldEditorStartup(%this) ShapeEdSeqNodeTabBook.selectPage(0); ShapeEdAdvancedWindow-->tabBook.selectPage(0); ShapeEdSelectWindow-->tabBook.selectPage(0); - ShapeEdSelectWindow.navigate(""); SetToggleButtonValue( ShapeEditorToolbar-->orbitNodeBtn, 0 ); SetToggleButtonValue( ShapeEditorToolbar-->ghostMode, 0 ); diff --git a/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.tscript b/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.tscript index b53e1edaa..4d60f1f9e 100644 --- a/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.tscript @@ -366,230 +366,6 @@ function ShapeEdShapeTreeView::onSelect( %this, %obj ) ShapeEdHintMenu.setSelected( %hintId ); } -// Find all DTS or COLLADA models. Note: most of this section was shamelessly -// stolen from creater.ed.tscript => great work whoever did the original! -function ShapeEdSelectWindow::navigate( %this, %address ) -{ - // Freeze the icon array so it doesn't update until we've added all of the - // icons - %this-->shapeLibrary.frozen = true; - %this-->shapeLibrary.clear(); - ShapeEdSelectMenu.clear(); - - %filePatterns = getFormatExtensions(); - %fullPath = findFirstFileMultiExpr( %filePatterns ); - - while ( %fullPath !$= "" ) - { - // Ignore cached DTS files - if ( endswith( %fullPath, "cached.dts" ) ) - { - %fullPath = findNextFileMultiExpr( %filePatterns ); - continue; - } - - // Ignore assets in the tools folder - %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, " ", "_" ); - %splitPath = strreplace( %splitPath, "/", " " ); - if ( getWord( %splitPath, 0 ) $= "tools" ) - { - %fullPath = findNextFileMultiExpr( %filePatterns ); - continue; - } - - %dirCount = getWordCount( %splitPath ) - 1; - %pathFolders = getWords( %splitPath, 0, %dirCount - 1 ); - - // Add this file's path ( parent folders ) to the - // popup menu if it isn't there yet. - %temp = strreplace( %pathFolders, " ", "/" ); - %temp = strreplace( %temp, "_", " " ); - %r = ShapeEdSelectMenu.findText( %temp ); - if ( %r == -1 ) - ShapeEdSelectMenu.add( %temp ); - - // Is this file in the current folder? - if ( stricmp( %pathFolders, %address ) == 0 ) - { - %this.addShapeIcon( %fullPath ); - } - // Then is this file in a subfolder we need to add - // a folder icon for? - else - { - %wordIdx = 0; - %add = false; - - if ( %address $= "" ) - { - %add = true; - %wordIdx = 0; - } - else - { - for ( ; %wordIdx < %dirCount; %wordIdx++ ) - { - %temp = getWords( %splitPath, 0, %wordIdx ); - if ( stricmp( %temp, %address ) == 0 ) - { - %add = true; - %wordIdx++; - break; - } - } - } - - if ( %add == true ) - { - %folder = getWord( %splitPath, %wordIdx ); - - // Add folder icon if not already present - %ctrl = %this.findIconCtrl( %folder ); - if ( %ctrl == -1 ) - %this.addFolderIcon( %folder ); - } - } - - %fullPath = findNextFileMultiExpr( %filePatterns ); - } - - %this-->shapeLibrary.sort( "alphaIconCompare" ); - for ( %i = 0; %i < %this-->shapeLibrary.getCount(); %i++ ) - %this-->shapeLibrary.getObject( %i ).autoSize = false; - - %this-->shapeLibrary.frozen = false; - %this-->shapeLibrary.refresh(); - %this.address = %address; - - ShapeEdSelectMenu.sort(); - - %str = strreplace( %address, " ", "/" ); - %r = ShapeEdSelectMenu.findText( %str ); - if ( %r != -1 ) - ShapeEdSelectMenu.setSelected( %r, false ); - else - ShapeEdSelectMenu.setText( %str ); -} - -function ShapeEdSelectWindow::navigateDown( %this, %folder ) -{ - if ( %this.address $= "" ) - %address = %folder; - else - %address = %this.address SPC %folder; - - // Because this is called from an IconButton::onClick command - // we have to wait a tick before actually calling navigate, else - // we would delete the button out from under itself. - %this.schedule( 1, "navigate", %address ); -} - -function ShapeEdSelectWindow::navigateUp( %this ) -{ - %count = getWordCount( %this.address ); - - if ( %count == 0 ) - return; - - if ( %count == 1 ) - %address = ""; - else - %address = getWords( %this.address, 0, %count - 2 ); - - %this.navigate( %address ); -} - -function ShapeEdSelectWindow::findIconCtrl( %this, %name ) -{ - for ( %i = 0; %i < %this-->shapeLibrary.getCount(); %i++ ) - { - %ctrl = %this-->shapeLibrary.getObject( %i ); - if ( %ctrl.text $= %name ) - return %ctrl; - } - return -1; -} - -function ShapeEdSelectWindow::createIcon( %this ) -{ - %ctrl = new GuiIconButtonCtrl() - { - profile = "GuiCreatorIconButtonProfile"; - iconLocation = "Left"; - textLocation = "Right"; - extent = "348 19"; - textMargin = 8; - buttonMargin = "2 2"; - autoSize = false; - sizeIconToButton = true; - makeIconSquare = true; - buttonType = "radioButton"; - groupNum = "-1"; - }; - - return %ctrl; -} - -function ShapeEdSelectWindow::addFolderIcon( %this, %text ) -{ - %ctrl = %this.createIcon(); - - %ctrl.altCommand = "ShapeEdSelectWindow.navigateDown( \"" @ %text @ "\" );"; - %ctrl.iconBitmap = "tools/gui/images/folder.png"; - %ctrl.text = %text; - %ctrl.tooltip = %text; - %ctrl.class = "CreatorFolderIconBtn"; - - %ctrl.buttonType = "radioButton"; - %ctrl.groupNum = "-1"; - - %this-->shapeLibrary.addGuiControl( %ctrl ); -} - -function ShapeEdSelectWindow::addShapeIcon( %this, %fullPath ) -{ - %ctrl = %this.createIcon(); - - %ext = fileExt( %fullPath ); - %file = fileBase( %fullPath ); - %fileLong = %file @ %ext; - %tip = %fileLong NL - "Size: " @ fileSize( %fullPath ) / 1000.0 SPC "KB" NL - "Date Created: " @ fileCreatedTime( %fullPath ) NL - "Last Modified: " @ fileModifiedTime( %fullPath ); - - %ctrl.altCommand = "ShapeEdSelectWindow.onSelect( \"" @ %fullPath @ "\" );"; - %ctrl.iconBitmap = ( ( %ext $= ".dts" ) ? EditorIconRegistry::findIconByClassName( "TSStatic" ) : "tools/gui/images/iconCollada" ); - %ctrl.text = %file; - %ctrl.class = "CreatorStaticIconBtn"; - %ctrl.tooltip = %tip; - - %ctrl.buttonType = "radioButton"; - %ctrl.groupNum = "-1"; - - // Check if a shape specific icon is available - %formats = ".png .jpg .dds .bmp .gif .jng .tga"; - %count = getWordCount( %formats ); - for ( %i = 0; %i < %count; %i++ ) - { - %ext = getWord( %formats, %i ); - if ( isFile( %fullPath @ %ext ) ) - { - %ctrl.iconBitmap = %fullPath @ %ext; - break; - } - } - - %this-->shapeLibrary.addGuiControl( %ctrl ); -} - -function ShapeEdSelectMenu::onSelect( %this, %id, %text ) -{ - %split = strreplace( %text, "/", " " ); - ShapeEdSelectWindow.navigate( %split ); -} - // Update the GUI in response to the shape selection changing function ShapeEdPropWindow::update_onShapeSelectionChanged( %this ) { @@ -3444,3 +3220,13 @@ function showShapeEditorPreview() %visible = ShapeEditorToolbar-->showPreview.getValue(); ShapeEdPreviewGui.setVisible( %visible ); } + +// +function ShapeEditorTabbook::onTabSelected( %this ) +{ + if( EditorTreeTabBook.getSelectedPage() == 1) + { + AssetBrowser.toggleDialog(); + AssetBrowser.toggleAssetTypeFilter(12); //show only shapeAssets + } +} \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorTreeWindow.ed.gui b/Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorTreeWindow.ed.gui index 45bc34cae..bcf9fbf44 100644 --- a/Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorTreeWindow.ed.gui +++ b/Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorTreeWindow.ed.gui @@ -176,6 +176,29 @@ $guiContent = new GuiControl() { }; }; }; + + new GuiTabPageCtrl() { + canSaveDynamicFields = "0"; + Enabled = "1"; + isContainer = "1"; + Profile = "ToolsGuiEditorTabPage"; + HorizSizing = "width"; + VertSizing = "height"; + position = "0 19"; + Extent = "197 271"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + Margin = "0 0 0 0"; + Padding = "0 0 0 0"; + AnchorTop = "1"; + AnchorBottom = "0"; + AnchorLeft = "1"; + AnchorRight = "0"; + text = "Assets"; + maxLength = "1024"; + }; }; new GuiBitmapButtonCtrl() { canSaveDynamicFields = "0"; diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript index a10c44c87..74a4e30a7 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript @@ -1932,6 +1932,8 @@ function EditorTreeTabBook::onTabSelected( %this ) } else { + AssetBrowser.toggleDialog(); + EditorTreeTabBook.selectPage(0); EWTreeWindow-->DeleteSelection.visible = false; EWTreeWindow-->LockSelection.visible = false; EWTreeWindow-->AddSimGroup.visible = false; diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/editor.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/editor.ed.tscript index cdd34c3d2..ff5696dd5 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/editor.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/editor.ed.tscript @@ -191,6 +191,7 @@ package EditorDisconnectOverride { if ( isObject( Editor ) && Editor.isEditorEnabled() ) { + EditorGui.saveAs = false; //whatever edits we were doing are irrelevent now %mainMenuGUI = ProjectSettings.value("UI/mainMenuName"); if (isObject( %mainMenuGUI )) Editor.close( %mainMenuGUI ); From 81eec1dcb4a0d9f7b19d8825000be9c48bcfaa42 Mon Sep 17 00:00:00 2001 From: JeffR Date: Sun, 24 Apr 2022 13:03:33 -0500 Subject: [PATCH 3/3] Added multi type filter support to AB select mode Adjusted logic for World Editor's Assets tab to filter by ShapeAssets and Datablocks Improved ShapeEditor's Assets tab filter and select logic Added ability for AB search to work on creator section Fixed icon display of AB on preview cards when in list mode --- .../tools/assetBrowser/guis/assetBrowser.gui | 2 +- .../assetBrowser/scripts/assetBrowser.tscript | 29 +++++++++++++++++-- .../scripts/shapeEditor.ed.tscript | 11 +++++-- .../worldEditor/scripts/EditorGui.ed.tscript | 5 +--- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui b/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui index 1d3209b90..5a7aade06 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui +++ b/Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui @@ -771,7 +771,7 @@ $guiContent = new GuiControl(AssetBrowser) { position = "0 0"; extent = "23 23"; minExtent = "8 2"; - horizSizing = "left"; + horizSizing = "right"; vertSizing = "bottom"; profile = "ToolsGuiSolidDefaultProfile"; visible = "1"; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript index 3dd7b881d..0c7270d10 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript @@ -527,6 +527,7 @@ function AssetBrowser::buildAssetPreview( %this, %asset, %moduleName ) %previewButton.iconLocation = "Left"; %previewButton.textLocation = "Right"; %previewButton.setextent(120,20); + %previewButton.buttonMargin = "0 0"; AssetBrowser.previewListMode = true; } @@ -1519,7 +1520,11 @@ function AssetBrowser::doRebuildAssetArray(%this) { if(AssetBrowser.assetTypeFilter !$= "") { - if(AssetBrowser.assetTypeFilter $= %assetType) + %filtersCount = getWordCount(AssetBrowser.assetTypeFilter); + for(%fltrIdx = 0; %fltrIdx < %filtersCount; %fltrIdx++) + { + %fltr = getWord(AssetBrowser.assetTypeFilter, %fltrIdx); + if(%fltr $= %assetType) { $AssetBrowser::AssetArray.add( %moduleName, %assetId ); @@ -1527,6 +1532,7 @@ function AssetBrowser::doRebuildAssetArray(%this) %finalAssetCount++; } } + } else { //got it. @@ -1574,7 +1580,22 @@ function AssetBrowser::doRebuildAssetArray(%this) } //Add Non-Asset Scripted Objects. Datablock, etc based - if(AssetBrowser.assetTypeFilter $= "" && %breadcrumbPath !$= "" && isDirectory(%breadcrumbPath)) + %hasDBFilter = true; + if(AssetBrowser.assetTypeFilter !$= "") + { + %hasDBFilter = false; + %filterCount = getWordCount(AssetBrowser.assetTypeFilter); + for(%fltrIdx = 0; %fltrIdx < %filterCount; %fltrIdx++) + { + %fltr = getWord(AssetBrowser.assetTypeFilter, %fltrIdx); + if(%fltr $= "Datablock" || %fltr $= "Datablocks") + { + %hasDBFilter = true; + break; + } + } + } + if(%hasDBFilter && %breadcrumbPath !$= "" && isDirectory(%breadcrumbPath)) { %category = getWord( %breadcrumbPath, 1 ); %dataGroup = "DataBlockGroup"; @@ -1792,6 +1813,10 @@ function AssetBrowser::doRebuildAssetArray(%this) %name = %creatorObj.val[1]; %func = %creatorObj.val[2]; + %searchActive = AssetSearchTerms.count() != 0; + if(%searchActive && !matchesSearch(%name, "Creator")) + continue; + $AssetBrowser::AssetArray.add( %name, "Creator" TAB %creatorObj ); } } diff --git a/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.tscript b/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.tscript index 4d60f1f9e..929fc510e 100644 --- a/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/shapeEditor/scripts/shapeEditor.ed.tscript @@ -3224,9 +3224,14 @@ function showShapeEditorPreview() // function ShapeEditorTabbook::onTabSelected( %this ) { - if( EditorTreeTabBook.getSelectedPage() == 1) + if( ShapeEditorTabbook.getSelectedPage() == 1) { - AssetBrowser.toggleDialog(); - AssetBrowser.toggleAssetTypeFilter(12); //show only shapeAssets + AssetBrowser.showDialog("ShapeAsset", "openShapeInShapeEditor"); } +} + +function openShapeInShapeEditor(%shapeAssetId) +{ + %assetDef = AssetDatabase.acquireAsset(%shapeAssetId); + AssetBrowser.editShapeAsset(%assetDef); } \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript index 74a4e30a7..58686e20e 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.tscript @@ -1932,11 +1932,8 @@ function EditorTreeTabBook::onTabSelected( %this ) } else { - AssetBrowser.toggleDialog(); + AssetBrowser.showDialog("ShapeAsset Datablock"); EditorTreeTabBook.selectPage(0); - EWTreeWindow-->DeleteSelection.visible = false; - EWTreeWindow-->LockSelection.visible = false; - EWTreeWindow-->AddSimGroup.visible = false; } }