From a3351390c6d1ff642a04ccbf0478c0a9a894edb3 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 6 Nov 2021 22:36:59 -0500 Subject: [PATCH 1/8] Expands handling of the collada enumerator so if the material is not named the same as the image file, it performs a lookup to find the associated material. --- Engine/source/T3D/assets/assetImporter.cpp | 70 +++++++++++++++++++++- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/Engine/source/T3D/assets/assetImporter.cpp b/Engine/source/T3D/assets/assetImporter.cpp index 2b284f5a5..4fbac249c 100644 --- a/Engine/source/T3D/assets/assetImporter.cpp +++ b/Engine/source/T3D/assets/assetImporter.cpp @@ -1158,12 +1158,76 @@ static bool enumColladaForImport(const char* shapePath, GuiTreeViewCtrl* tree, b { domImage* img = libraryImages->getImage_array()[j]; - S32 materialID = tree->findItemByName(_GetNameOrId(img)); + String imageName = _GetNameOrId(img); + + S32 materialID = tree->findItemByName(imageName.c_str()); if (materialID == 0) - continue; + { + bool materialFound = false; + String matName = ""; - tree->setItemValue(materialID, img->getInit_from()->getValue().str().c_str()); + //If we don't have an immediate name match, we'll have to actually go look it up + for (S32 e = 0; e < root->getLibrary_effects_array().getCount(); e++) + { + const domLibrary_effects* libraryEffects = root->getLibrary_effects_array()[e]; + + for (S32 f = 0; f < libraryEffects->getEffect_array().getCount(); f++) + { + domEffect* efct = libraryEffects->getEffect_array()[f]; + + String effectName = efct->getID(); + + for (S32 p = 0; p < efct->getFx_profile_abstract_array().getCount(); p++) + { + domProfile_COMMON* profile = daeSafeCast(efct->getFx_profile_abstract_array()[p]); + + for (S32 n = 0; n < profile->getNewparam_array().getCount(); n++) + { + domCommon_newparam_typeRef param = profile->getNewparam_array()[n]; + String paramName = param->getSid(); + if (paramName.endsWith("-surface")) + { + //ok it's surface data, parse out the name + String surfaceName = paramName.substr(0, paramName.length() - 8); + if (surfaceName == imageName) + { + //got a match! + matName = effectName; + if (matName.endsWith("-effect")) + { + matName = matName.substr(0, matName.length() - 7); + materialFound = true; + break; + } + } + } + } + + if (materialFound) + break; + } + + if (materialFound) + { + materialID = tree->findItemByName(matName.c_str()); + } + + if (materialID != 0) + break; + } + } + + //if we STILL haven't found a match, then yes, we've failed + if (materialID == 0) + continue; + } + + String imagePath = img->getInit_from()->getValue().str().c_str(); + if (imagePath.startsWith("/")) + imagePath = imagePath.substr(1, imagePath.length() - 1); + + tree->setItemValue(materialID, StringTable->insert(imagePath.c_str())); } } From b60d51969e2e1dec9c06a2b3bd50625e934498c2 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Sat, 13 Nov 2021 19:05:26 -0600 Subject: [PATCH 2/8] brdf handling corrections 1-handle the brdfTexture in linear space, not srgb. 2-clamp surface.NoV across the board for consistency. (solves several new and ongoing artifacts) --- Engine/source/renderInstance/renderProbeMgr.cpp | 2 +- .../BaseGame/game/core/rendering/shaders/gl/lighting.glsl | 2 +- .../BaseGame/game/core/rendering/shaders/lighting.hlsl | 7 +++---- .../lighting/advanced/gl/reflectionProbeArrayP.glsl | 5 ++--- .../shaders/lighting/advanced/reflectionProbeArrayP.hlsl | 3 +-- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/Engine/source/renderInstance/renderProbeMgr.cpp b/Engine/source/renderInstance/renderProbeMgr.cpp index d39048971..bfbf65815 100644 --- a/Engine/source/renderInstance/renderProbeMgr.cpp +++ b/Engine/source/renderInstance/renderProbeMgr.cpp @@ -290,7 +290,7 @@ bool RenderProbeMgr::onAdd() } String brdfTexturePath = GFXTextureManager::getBRDFTexturePath(); - if (!mBRDFTexture.set(brdfTexturePath, &GFXTexturePersistentSRGBProfile, "BRDFTexture")) + if (!mBRDFTexture.set(brdfTexturePath, &GFXTexturePersistentProfile, "BRDFTexture")) { Con::errorf("RenderProbeMgr::onAdd: Failed to load BRDF Texture"); return false; diff --git a/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl b/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl index ab35bc103..a26b5aa7f 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl @@ -106,7 +106,7 @@ struct Surface void updateSurface(inout Surface surface) { - surface.NdotV = abs(dot(surface.N, surface.V)) + 1e-5f; // avoid artifact + surface.NdotV = clamp( dot(surface.N, surface.V), 0.0009765625f,0.9990234375f); //0.5f/512.0f (512 is size of dfg/brdf lookup tex) surface.linearRoughness = surface.roughness * surface.roughness; surface.linearRoughnessSq = surface.linearRoughness * surface.linearRoughness; diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl index fd053b60e..13871f1cf 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl @@ -105,10 +105,9 @@ struct Surface inline void Update() { - NdotV = abs(dot(N, V)) + 1e-5f; // avoid artifact - - linearRoughness = roughness * roughness; - linearRoughnessSq = linearRoughness * linearRoughness; + NdotV = clamp( dot(N, V), 0.0009765625f,0.9990234375f); // avoid artifact + linearRoughness = roughness * roughness; + linearRoughnessSq = linearRoughness * linearRoughness; albedo = baseColor.rgb * (1.0f - metalness); f0 = lerp(0.04f, baseColor.rgb, metalness); diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl index c5ffd6f67..8efe15c05 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl @@ -202,14 +202,13 @@ void main() return; #endif - + //energy conservation vec3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness); vec3 kD = 1.0f - F; kD *= 1.0f - surface.metalness; - float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex) - vec2 envBRDF = textureLod(BRDFTexture, vec2(dfgNdotV, surface.roughness),0).rg; + vec2 envBRDF = textureLod(BRDFTexture, vec2(surface.NdotV, surface.roughness),0).rg; specular *= F * envBRDF.x + surface.f90 * envBRDF.y; irradiance *= kD * surface.baseColor.rgb; diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl index aaff0145b..cff06decf 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl @@ -197,8 +197,7 @@ float4 main(PFXVertToPix IN) : SV_TARGET float3 kD = 1.0f - F; kD *= 1.0f - surface.metalness; - float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex) - float2 envBRDF = TORQUE_TEX2DLOD(BRDFTexture, float4(dfgNdotV, surface.roughness,0,0)).rg; + float2 envBRDF = TORQUE_TEX2DLOD(BRDFTexture, float4(surface.NdotV, surface.roughness,0,0)).rg; specular *= F * envBRDF.x + surface.f90 * envBRDF.y; irradiance *= kD * surface.baseColor.rgb; From 72ef719c18e8346b3f181d59643fc5ae7baec9c4 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Sat, 13 Nov 2021 19:18:03 -0600 Subject: [PATCH 3/8] kill redundant clamp in forward --- .../BaseGame/game/core/rendering/shaders/gl/lighting.glsl | 3 +-- Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl b/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl index a26b5aa7f..55d9866ce 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl @@ -650,8 +650,7 @@ vec4 debugVizForwardProbes(Surface surface, vec3 kD = 1.0f - F; kD *= 1.0f - surface.metalness; - float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex) - vec2 envBRDF = textureLod(BRDFTexture, vec2(dfgNdotV, surface.roughness),0).rg; + vec2 envBRDF = textureLod(BRDFTexture, vec2(surface.NdotV, surface.roughness),0).rg; specular *= F * envBRDF.x + surface.f90 * envBRDF.y; irradiance *= kD * surface.baseColor.rgb; diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl index 13871f1cf..c91bd21a1 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl @@ -653,8 +653,7 @@ float4 debugVizForwardProbes(Surface surface, float3 kD = 1.0f - F; kD *= 1.0f - surface.metalness; - float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex) - float2 envBRDF = TORQUE_TEX2DLOD(BRDFTexture, float4(dfgNdotV, surface.roughness,0,0)).rg; + float2 envBRDF = TORQUE_TEX2DLOD(BRDFTexture, float4(surface.NdotV, surface.roughness,0,0)).rg; specular *= F * envBRDF.x + surface.f90 * envBRDF.y; irradiance *= kD * surface.baseColor.rgb; From 97484247ae5c3e7ecb21c2b9abce4f5b0bb2d5ae Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 14 Nov 2021 01:26:04 -0600 Subject: [PATCH 4/8] Fixes Settings window not being able to be brought forward over AB Adds checkbox to mark as not showing Import Window each time Added loaded import config to import log output Fixed targeted material map slot field names Added helper function for playing a sound asset via AssetId Updated import config to have some more common suffixes Updated editor settings to have Import Window show by default Changed AB context menu from listing item as "Refresh Asset" to "Reload Asset" for improved clarity Removed unneeded duplicate editor settings window script file --- Engine/source/T3D/assets/assetImporter.cpp | 11 +- Engine/source/T3D/assets/assetImporter.h | 10 +- .../utility/scripts/helperFunctions.tscript | 10 ++ .../tools/assetBrowser/assetImportConfigs.xml | 12 +- .../assetBrowser/scripts/assetImport.tscript | 15 +- .../scripts/assetImportConfig.tscript | 4 +- .../assetBrowser/scripts/popupMenus.tscript | 4 +- .../tools/gui/editorSettingsWindow.ed.tscript | 13 +- Templates/BaseGame/game/tools/settings.xml | 2 +- .../worldEditor/scripts/EditorGui.ed.tscript | 2 - .../scripts/editorSettingsWindow.ed.tscript | 142 ------------------ 11 files changed, 56 insertions(+), 169 deletions(-) delete mode 100644 Templates/BaseGame/game/tools/worldEditor/scripts/editorSettingsWindow.ed.tscript diff --git a/Engine/source/T3D/assets/assetImporter.cpp b/Engine/source/T3D/assets/assetImporter.cpp index e4ca498eb..2ceb677af 100644 --- a/Engine/source/T3D/assets/assetImporter.cpp +++ b/Engine/source/T3D/assets/assetImporter.cpp @@ -2381,6 +2381,9 @@ void AssetImporter::resetImportConfig() Settings* importConfigs; if (Sim::findObject("AssetImportSettings", importConfigs)) { + dSprintf(importLogBuffer, sizeof(importLogBuffer), "Loading import config: %s!", defaultImportConfig.c_str()); + activityLog.push_back(importLogBuffer); + //Now load the editor setting-deigned config! activeImportConfig->loadImportConfig(importConfigs, defaultImportConfig.c_str()); } @@ -2798,7 +2801,7 @@ Torque::Path AssetImporter::importMaterialAsset(AssetImportObject* assetItem) } else if (imageType == ImageAsset::ImageTypes::Metalness) { - mapFieldName = "MetalnessMap"; + mapFieldName = "MetalMap"; } else if (imageType == ImageAsset::ImageTypes::AO) { @@ -2806,7 +2809,7 @@ Torque::Path AssetImporter::importMaterialAsset(AssetImportObject* assetItem) } else if (imageType == ImageAsset::ImageTypes::Roughness) { - mapFieldName = "RoughnessMap"; + mapFieldName = "RoughMap"; } assetFieldName = mapFieldName + "Asset[0]"; @@ -2874,7 +2877,7 @@ Torque::Path AssetImporter::importMaterialAsset(AssetImportObject* assetItem) } else if (imageType == ImageAsset::ImageTypes::Metalness) { - mapFieldName = "MetalnessMap"; + mapFieldName = "MetalMap"; } else if (imageType == ImageAsset::ImageTypes::AO) { @@ -2882,7 +2885,7 @@ Torque::Path AssetImporter::importMaterialAsset(AssetImportObject* assetItem) } else if (imageType == ImageAsset::ImageTypes::Roughness) { - mapFieldName = "RoughnessMap"; + mapFieldName = "RoughMap"; hasRoughness = true; } diff --git a/Engine/source/T3D/assets/assetImporter.h b/Engine/source/T3D/assets/assetImporter.h index 327b38dca..6605ebe8f 100644 --- a/Engine/source/T3D/assets/assetImporter.h +++ b/Engine/source/T3D/assets/assetImporter.h @@ -905,9 +905,15 @@ public: /// AssetImportConfig* getImportConfig() { return activeImportConfig; } - void setImportConfig(AssetImportConfig* importConfig) { - if(importConfig != nullptr) + void setImportConfig(AssetImportConfig* importConfig) + { + if (importConfig != nullptr) + { + dSprintf(importLogBuffer, sizeof(importLogBuffer), "Loading import config: %s!", importConfig->getName()); + activityLog.push_back(importLogBuffer); + activeImportConfig = importConfig; + } } /// diff --git a/Templates/BaseGame/game/core/utility/scripts/helperFunctions.tscript b/Templates/BaseGame/game/core/utility/scripts/helperFunctions.tscript index ee7378bf8..3143eb410 100644 --- a/Templates/BaseGame/game/core/utility/scripts/helperFunctions.tscript +++ b/Templates/BaseGame/game/core/utility/scripts/helperFunctions.tscript @@ -642,4 +642,14 @@ function populateAllFonts(%font) populateFontCacheRange(%font,24,0,65535); populateFontCacheRange(%font,32,0,65535); populateFontCacheRange(%font,36,0,65535); +} + +//------------------------------------------------------------------------------ +function playSoundAsset(%soundAssetId) +{ + %assetDef = AssetDatabase.acquireAsset(%soundAssetId); + if(isObject(%assetDef)) + %assetDef.playSound(); + + AssetDatabase.releaseAsset(%soundAssetId); } \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml b/Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml index ae2e6b034..ad9de2677 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml +++ b/Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml @@ -26,18 +26,18 @@ _image 1 _AO,_AMBIENT,_AMBIENTOCCLUSION - _COMP,_COMPOSITE,_PBR,-COMP,-COMPOSITE,-PBR,_ORM,-ORM + _COMP,_COMPOSITE,_PBR,-COMP,-COMPOSITE,-PBR,_ORM,-ORM,_C 1 _ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL 0 N/A 1 0 - _METAL,_MET,_METALNESS,_METALLIC - _NORMAL,_NORM - _ROUGH,_ROUGHNESS + _METAL,_MET,_METALNESS,_METALLIC,_M + _NORMAL,_NORM,_N + _ROUGH,_ROUGHNESS,_R 1.0 - _SMOOTH,_SMOOTHNESS + _SMOOTH,_SMOOTHNESS,_S Bilinear 1 @@ -45,6 +45,8 @@ _mat 0 1 + 1 + DefaultMaterial 1 1 1 diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.tscript index 14023d9b2..f96b1b645 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.tscript @@ -86,6 +86,8 @@ function ImportAssetWindow::onWake(%this) %this.importer.targetModuleId = AssetImportTargetModule.getText(); %this.refresh(); + + toggleImportWindowVizBtn.setStateOn(EditorSettings.value("Assets/AutoImport")); } // @@ -469,9 +471,7 @@ function ImportAssetWindow::doRefresh(%this) ImportAssetWindow.importer.processImportingAssets(); //%this.processImportAssets(); - //ImportAssetWindow.hasImportIssues = %this.validateAssets(); - - ImportAssetWindow.importer.validateImportingAssets(); + ImportAssetWindow.hasImportIssues = ImportAssetWindow.importer.hasImportIssues(); AssetImportCtrl-->NewAssetsTree.clear(); AssetImportCtrl-->NewAssetsTree.insertItem(0, "Importing Assets"); @@ -947,3 +947,12 @@ function ImportAssetModuleList::refresh(%this) } } // + +// +function toggleImportWindowViz() +{ + %value = EditorSettings.value("Assets/AutoImport"); + EditorSettings.setValue("Assets/AutoImport", !%value); + +} +// diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImportConfig.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImportConfig.tscript index 39ed541db..175d0f4d5 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImportConfig.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImportConfig.tscript @@ -66,7 +66,7 @@ function setupImportConfigSettingsList() ImportAssetConfigSettingsList.addNewConfigSetting("Materials/ImportMaterials", "Import Materials", "bool", "", "1", ""); ImportAssetConfigSettingsList.addNewConfigSetting("Materials/AlwaysAddMaterialSuffix", "Always Add Material Suffix", "bool", "", "1", ""); ImportAssetConfigSettingsList.addNewConfigSetting("Materials/AddedMaterialSuffix", "Added Material Suffix", "string", "", "_mat", ""); - ImportAssetConfigSettingsList.addNewConfigSetting("Materials/CreateComposites", "Create Composites", "bool", "", "1", ""); + ImportAssetConfigSettingsList.addNewConfigSetting("Materials/CreateORMConfig", "Create ORM Map", "bool", "", "1", ""); ImportAssetConfigSettingsList.addNewConfigSetting("Materials/UseDiffuseSuffixOnOriginImage", "Use Diffuse Suffix for Origin Image", "bool", "", "1", ""); ImportAssetConfigSettingsList.addNewConfigSetting("Materials/UseExistingMaterials", "Use Existing Materials", "bool", "", "1", ""); ImportAssetConfigSettingsList.addNewConfigSetting("Materials/IgnoreMaterials", "Ignore Materials", "command", "", "", ""); @@ -185,7 +185,7 @@ function ImportAssetOptionsWindow::editImportSettings(%this, %assetItem) else if(%assetType $= "MaterialAsset") { ImportOptionsList.startGroup("Material"); - ImportOptionsList.addField("CreateComposites", "Create Composite Textures", "bool", "", "1", "", %assetConfigObj); + ImportOptionsList.addField("CreateORMConfig", "Create ORM Map", "bool", "", "1", "", %assetConfigObj); ImportOptionsList.endGroup(); } else if(%assetType $= "ImageAsset") diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.tscript index 31909cf07..3294387b0 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/popupMenus.tscript @@ -25,7 +25,7 @@ function AssetBrowser::buildPopupMenus(%this) item[ 0 ] = "Edit Asset" TAB "" TAB "AssetBrowser.editAsset();"; item[ 1 ] = "Rename Asset" TAB "" TAB "AssetBrowser.renameAsset();"; - item[ 2 ] = "Refresh Asset" TAB "" TAB "AssetBrowser.refreshAsset();"; + item[ 2 ] = "Reload Asset" TAB "" TAB "AssetBrowser.refreshAsset();"; item[ 3 ] = "Asset Properties" TAB "" TAB "AssetBrowser.editAssetInfo();"; item[ 4 ] = "-"; Item[ 5 ] = "Duplicate Asset" TAB "" TAB "AssetBrowser.duplicateAsset();"; @@ -50,7 +50,7 @@ function AssetBrowser::buildPopupMenus(%this) item[ 0 ] = "Edit Level" TAB "" TAB "AssetBrowser.editAsset();"; item[ 1 ] = "Append as Sublevel" TAB "" TAB "AssetBrowser.appendSublevel();"; item[ 2 ] = "Rename Asset" TAB "" TAB "AssetBrowser.renameAsset();"; - item[ 3 ] = "Refresh Asset" TAB "" TAB "AssetBrowser.refreshAsset();"; + item[ 3 ] = "Reload Asset" TAB "" TAB "AssetBrowser.refreshAsset();"; item[ 4 ] = "Asset Properties" TAB "" TAB "AssetBrowser.editAssetInfo();"; item[ 5 ] = "-"; Item[ 6 ] = "Duplicate Asset" TAB "" TAB "AssetBrowser.duplicateAsset();"; diff --git a/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.tscript b/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.tscript index fea4a1a6d..848a625aa 100644 --- a/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.tscript +++ b/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.tscript @@ -53,26 +53,27 @@ function ESettingsWindow::onWake( %this ) function ESettingsWindow::hideDialog( %this ) { - %this.setVisible(false); + Canvas.popDialog(EditorSettingsWindow); } function ESettingsWindow::ToggleVisibility() { - if ( ESettingsWindow.visible ) + if(ESettingsWindow.isAwake()) { - ESettingsWindow.setVisible(false); + Canvas.popDialog(EditorSettingsWindow); } else { - ESettingsWindow.setVisible(true); + Canvas.pushDialog(EditorSettingsWindow); + ESettingsWindow.selectWindow(); ESettingsWindow.setCollapseGroup(false); ESettingsWindowList.clear(); - } ESettingsWindowList.setSelectedById( 1 ); } +} function ESettingsWindow::toggleProjectSettings(%this) { @@ -528,7 +529,7 @@ function ESettingsWindow::getAssetEditingSettings(%this) } SettingsInspector.startGroup("Assets Importing"); - SettingsInspector.addField("Edit Asset Configs", "Edit Asset Import Configs", "button", "Open Asset Import Config Editor", "", "Canvas.pushDialog(AssetImportConfigEditor);"); + SettingsInspector.addField("Edit Import Configs", "Edit Asset Import Configs", "button", "Open Asset Import Config Editor", "", "Canvas.pushDialog(AssetImportConfigEditor);"); SettingsInspector.addSettingsField("Assets/AssetImporDefaultConfig", "Default Asset Import Config", "list", "", %formattedConfigList); SettingsInspector.addSettingsField("Assets/AutoImport", "Automatically Import using default config", "bool", "If on, the asset importing process" @ "will attempt to automatically import any inbound assets"@ diff --git a/Templates/BaseGame/game/tools/settings.xml b/Templates/BaseGame/game/tools/settings.xml index 225b2d67e..b7103a680 100644 --- a/Templates/BaseGame/game/tools/settings.xml +++ b/Templates/BaseGame/game/tools/settings.xml @@ -35,7 +35,7 @@ DefaultImportConfig 1 + name="AutoImport">0 Date: Sun, 14 Nov 2021 01:28:16 -0600 Subject: [PATCH 5/8] Shifted check for FBX importer in assimp shape loader code to utilize stringtable --- Engine/source/ts/assimp/assimpShapeLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/ts/assimp/assimpShapeLoader.cpp b/Engine/source/ts/assimp/assimpShapeLoader.cpp index d1b201ecd..f0dbd509e 100644 --- a/Engine/source/ts/assimp/assimpShapeLoader.cpp +++ b/Engine/source/ts/assimp/assimpShapeLoader.cpp @@ -179,7 +179,7 @@ void AssimpShapeLoader::enumerateScene() String importFormat; const aiImporterDesc* importerDescription = aiGetImporterDesc(shapePath.getExtension().c_str()); - if (importerDescription->mName == "Autodesk FBX Importer") + if (StringTable->insert(importerDescription->mName) == StringTable->insert("Autodesk FBX Importer")) { ColladaUtils::getOptions().formatScaleFactor = 0.01f; } From eb24b63be49d8c8ee551a3089ae12978a5267b21 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 14 Nov 2021 21:39:51 -0600 Subject: [PATCH 6/8] Shifts utilization of gui elements in editors that point to 'normal' image assets to utilize generated previews instead. This reduces console spam about mismatched texture profiles and improves stability. --- Engine/source/T3D/assets/ImageAsset.cpp | 15 +- .../assetBrowser/scripts/assetBrowser.tscript | 47 ++++ .../convexEditor/convexEditorGui.tscript | 10 +- .../tools/decalEditor/decalEditorGui.tscript | 33 +-- .../BaseGame/game/tools/gui/uvEditor.ed.gui | 3 +- .../scripts/materialEditor.ed.tscript | 209 ++++++------------ .../particleParticleEditor.ed.tscript | 26 +-- .../scripts/editors/terrainEditor.ed.tscript | 4 +- .../interfaces/terrainMaterialDlg.ed.tscript | 98 ++------ 9 files changed, 168 insertions(+), 277 deletions(-) diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index eb5f5036d..af55747ca 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -549,7 +549,20 @@ bool GuiInspectorTypeImageAssetPtr::renderTooltip(const Point2I& hoverPos, const if (!filename || !filename[0]) return false; - GFXTexHandle texture(filename, &GFXStaticTextureSRGBProfile, avar("%s() - tooltip texture (line %d)", __FUNCTION__, __LINE__)); + StringTableEntry previewFilename = filename; + if (Con::isFunction("getAssetPreviewImage")) + { + ConsoleValue consoleRet = Con::executef("getAssetPreviewImage", filename); + previewFilename = StringTable->insert(consoleRet.getString()); + + if (AssetDatabase.isDeclaredAsset(previewFilename)) + { + ImageAsset* previewAsset = AssetDatabase.acquireAsset(previewFilename); + previewFilename = previewAsset->getImagePath(); + } + } + + GFXTexHandle texture(previewFilename, &GFXStaticTextureSRGBProfile, avar("%s() - tooltip texture (line %d)", __FUNCTION__, __LINE__)); if (texture.isNull()) return false; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript index d3e2996e0..3dd803a62 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript @@ -2488,3 +2488,50 @@ function AssetBrowser::importLooseFiles(%this) echo("Adding loose files at directory " @ %this.dirHandler.currentAddress); LooseFileAuditWindow.showDialog(%this.dirHandler.currentAddress); } + +// +function getAssetPreviewImage(%asset) +{ + if(isFile(%asset)) + { + %aq = new AssetQuery(); + %assetsFound = AssetDatabase.findAssetLooseFile(%aq, %asset); + if(%assetsFound != 0) + { + %asset = %aq.getAsset(0); + } + else + { + %previewPath = %asset; + } + + %aq.delete(); + } + + if(AssetDatabase.isDeclaredAsset(%asset)) + { + %moduleName = AssetDatabase.getAssetModule(%asset).ModuleId; + %assetName = AssetDatabase.getAssetName(%asset); + %previewAssetName = "ToolsModule:" @ %moduleName @ "_" @ %assetName @ "_PreviewImage"; + + if(AssetDatabase.isDeclaredAsset(%previewAssetName)) + { + %previewDef = AssetDatabase.acquireAsset(%previewAssetName); + %previewPath = %previewDef.getImagePath(); + AssetDatabase.releaseAsset(%previewAssetName); + } + else + { + %previewPath = %asset; + } + } + else + { + %previewPath = %asset; + } + + if(%previewPath $= "") + %previewPath = "ToolsModule:unknownImage_image"; + + return %previewPath; +} \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript b/Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript index 65266a382..253508d75 100644 --- a/Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript +++ b/Templates/BaseGame/game/tools/convexEditor/convexEditorGui.tscript @@ -38,7 +38,7 @@ function ConvexEditorGui::onWake( %this ) %mat = %matName; } - ConvexEditorOptionsWindow-->matPreviewBtn.setBitmap(%mat.getDiffuseMap(0)); + ConvexEditorOptionsWindow-->matPreviewBtn.setBitmap( getAssetPreviewImage(%mat.getDiffuseMap(0))); ConvexEditorOptionsWindow.activeMaterial = %mat; } @@ -76,7 +76,7 @@ function ConvexEditorGui::onSelectionChanged( %this, %shape, %face ) ConvexEditorOptionsWindow-->defMatPreviewBtn.setText(""); %shapeMat = %shape.getMaterial(); - ConvexEditorOptionsWindow-->defMatPreviewBtn.setBitmap(%shapeMat.getDiffuseMap(0)); + ConvexEditorOptionsWindow-->defMatPreviewBtn.setBitmap(getAssetPreviewImage(%shapeMat.getDiffuseMap(0))); ConvexEditorOptionsWindow.activeShape = %shape; @@ -175,7 +175,7 @@ function ConvexEditorMaterialBtn::gotMaterialName(%this, %name) } } - ConvexEditorOptionsWindow-->matPreviewBtn.setBitmap(%diffusemap); + ConvexEditorOptionsWindow-->matPreviewBtn.setBitmap(getAssetPreviewImage(%diffusemap)); ConvexEditorOptionsWindow.activeMaterial = %materialAsset.materialDefinitionName; } @@ -191,7 +191,7 @@ function ConvexEditorMaterialLiftBtn::onClick(%this) { %mat = ConvexEditorGui.getSelectedFaceMaterial(); ConvexEditorOptionsWindow.activeMaterial = %mat; - ConvexEditorOptionsWindow-->matPreviewBtn.setBitmap(%mat.getDiffuseMap(0)); + ConvexEditorOptionsWindow-->matPreviewBtn.setBitmap(getAssetPreviewImage(%mat.getDiffuseMap(0))); } function ConvexEditorMaterialResetBtn::onClick(%this) @@ -240,7 +240,7 @@ function ConvexEditorDefaultMaterialBtn::gotMaterialName(%this, %name) } } - ConvexEditorOptionsWindow-->defMatPreviewBtn.setBitmap(%diffusemap); + ConvexEditorOptionsWindow-->defMatPreviewBtn.setBitmap(getAssetPreviewImage(%diffusemap)); ConvexEditorOptionsWindow.activeShape.setMaterial(%name); diff --git a/Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript b/Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript index 0138d5331..3257ab7cd 100644 --- a/Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript +++ b/Templates/BaseGame/game/tools/decalEditor/decalEditorGui.tscript @@ -326,51 +326,40 @@ function DecalInspector::removeDirty() function DecalEditorGui::updateDecalPreview( %this, %material ) { + %previewImage = ""; + if( isObject( %material ) ) { - DecalPreviewWindow-->decalPreview.setBitmap( %material.getDiffuseMap(0) ); + %previewImage = %material.getDiffuseMap(0); } else { if(AssetDatabase.isDeclaredAsset(%material)) { - %assetDef = AssetDatabase.acquireAsset(%material); - %difMap = %assetDef.materialDefinitionName.getDiffuseMap(0); - AssetDatabase.acquireAsset(%material); - - if(%difMap !$= "" && %difMap !$= "Core_Rendering:missingTexture") - { - DecalPreviewWindow-->decalPreview.setBitmap( %difMap ); - return; + %previewImage = %material; } } - DecalPreviewWindow-->decalPreview.setBitmap("ToolsModule:unknownImage_image"); + + DecalPreviewWindow-->decalPreview.setBitmap( getAssetPreviewImage(%previewImage) ); } -} function DecalEditorGui::updateInstancePreview( %this, %material ) { + %previewImage = ""; + if( isObject( %material ) ) { - DecalPreviewWindow-->instancePreview.setBitmap( %material.getDiffuseMap(0) ); + %previewImage = %material.getDiffuseMap(0); } else { if(AssetDatabase.isDeclaredAsset(%material)) { - %assetDef = AssetDatabase.acquireAsset(%material); - %difMap = %assetDef.materialDefinitionName.getDiffuseMap(0); - AssetDatabase.acquireAsset(%material); - - if(%difMap !$= "" && %difMap !$= "Core_Rendering:missingTexture") - { - DecalPreviewWindow-->instancePreview.setBitmap( %difMap ); - return; + %previewImage = %material; } } - DecalPreviewWindow-->instancePreview.setBitmap("ToolsModule:unknownImage_image"); -} + DecalPreviewWindow-->instancePreview.setBitmap( getAssetPreviewImage(%previewImage) ); } function DecalEditorGui::rebuildInstanceTree( %this ) diff --git a/Templates/BaseGame/game/tools/gui/uvEditor.ed.gui b/Templates/BaseGame/game/tools/gui/uvEditor.ed.gui index bddecffc3..c83c11b67 100644 --- a/Templates/BaseGame/game/tools/gui/uvEditor.ed.gui +++ b/Templates/BaseGame/game/tools/gui/uvEditor.ed.gui @@ -512,7 +512,8 @@ function UVEditor::showDialog( %this, %applyCallback, %obj, %uv) else if( %material.cubemap.cubeFace[0] !$= "" ) %previewImage = %material.cubemap.cubeFace[0]; } - UVEditor-->bitmapPreview.setBitmap(%previewImage); + + UVEditor-->bitmapPreview.setBitmap(getAssetPreviewImage(%previewImage)); // Set up the color popup %popup = UVEditor-->colorPopup; diff --git a/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript b/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript index 4cf7ba4a6..124ae856a 100644 --- a/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript @@ -804,174 +804,92 @@ function MaterialEditorGui::guiSync( %this, %material ) %layer = MaterialEditorGui.currentLayer; //Diffuse - if((%material).getDiffuseMap(%layer) !$= "" && (%material).getDiffuseMapAsset(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - %difAsset = (%material).getDiffuseMapAsset(%layer); - MaterialEditorPropertiesWindow-->diffuseMapNameText.setText( (%material).getDiffuseMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->diffuseMapDisplayBitmap.setBitmap( (%material).getDiffuseMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->diffuseMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->diffuseMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %diffuseMap = (%material).getDiffuseMap(%layer); + %diffuseMapText = %diffuseMap !$= "" && %diffuseMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getDiffuseMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->diffuseMapNameText.setText( %diffuseMapText ); + MaterialEditorPropertiesWindow-->diffuseMapDisplayBitmap.setBitmap( getAssetPreviewImage(%diffuseMap) ); //Normal - if((%material).getNormalMap(%layer) !$= "" && (%material).getNormalMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->normalMapNameText.setText( (%material).getNormalMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->normalMapDisplayBitmap.setBitmap( (%material).getNormalMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->normalMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->normalMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %normalMap = (%material).getNormalMap(%layer); + %normalMapText = %normalMap !$= "" && %normalMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getNormalMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->normalMapNameText.setText( %normalMapText ); + MaterialEditorPropertiesWindow-->normalMapDisplayBitmap.setBitmap( getAssetPreviewImage(%normalMap) ); //ORM Config - if((%material).getORMConfigMap(%layer) !$= "" && (%material).getORMConfigMap(%layer) !$= $MaterialEditor::emptyMaterialImage) + %ormMap = (%material).getNormalMap(%layer); + %hasOrmMap = (%ormMap !$= "" && %ormMap !$=$MaterialEditor::emptyMaterialImage); + %ormMapText = %hasOrmMap ? (%material).getNormalMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->ORMConfigMapNameText.setText(%ormMapText ); + MaterialEditorPropertiesWindow-->ORMConfigMapDisplayBitmap.setBitmap( getAssetPreviewImage(%ormMap) ); + + //show or hide depending on if we have a map assigned here + MaterialEditorPropertiesWindow-->RoughnessTextEdit.setVisible(!%hasOrmMap); + MaterialEditorPropertiesWindow-->RoughnessSlider.setVisible(!%hasOrmMap); + MaterialEditorPropertiesWindow-->MetalnessTextEdit.setVisible(!%hasOrmMap); + MaterialEditorPropertiesWindow-->MetalnessSlider.setVisible(!%hasOrmMap); + + if(%hasOrmMap) { - MaterialEditorPropertiesWindow-->ORMConfigMapNameText.setText( (%material).getORMConfigMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->ORMConfigMapDisplayBitmap.setBitmap( (%material).getORMConfigMap(%layer) ); - //hide unused - MaterialEditorPropertiesWindow-->RoughnessTextEdit.setVisible(false); - MaterialEditorPropertiesWindow-->RoughnessSlider.setVisible(false); - MaterialEditorPropertiesWindow-->MetalnessTextEdit.setVisible(false); - MaterialEditorPropertiesWindow-->MetalnessSlider.setVisible(false); - MaterialEditorPropertiesWindow-->isSRGBCheckbox.setValue((%material).isSRGB[%layer]); MaterialEditorPropertiesWindow-->invertRoughnessCheckbox.setValue((%material).invertRoughness[%layer]); - //show used - MaterialEditorPropertiesWindow-->isSRGBCheckbox.setVisible(true); - MaterialEditorPropertiesWindow-->invertRoughnessCheckbox.setVisible(true); - } - else - { - MaterialEditorPropertiesWindow-->ORMConfigMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->ORMConfigMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - MaterialEditorPropertiesWindow-->RoughnessTextEdit.setText((%material).Roughness[%layer]); - MaterialEditorPropertiesWindow-->RoughnessSlider.setValue((%material).Roughness[%layer]); - MaterialEditorPropertiesWindow-->MetalnessTextEdit.setText((%material).Metalness[%layer]); - MaterialEditorPropertiesWindow-->MetalnessSlider.setValue((%material).Metalness[%layer]); - //show used - MaterialEditorPropertiesWindow-->RoughnessTextEdit.setVisible(true); - MaterialEditorPropertiesWindow-->RoughnessSlider.setVisible(true); - MaterialEditorPropertiesWindow-->MetalnessTextEdit.setVisible(true); - MaterialEditorPropertiesWindow-->MetalnessSlider.setVisible(true); - - //hide unused - MaterialEditorPropertiesWindow-->isSRGBCheckbox.setVisible(false); - MaterialEditorPropertiesWindow-->invertRoughnessCheckbox.setVisible(false); - } + MaterialEditorPropertiesWindow-->isSRGBCheckbox.setVisible(%hasOrmMap); + MaterialEditorPropertiesWindow-->invertRoughnessCheckbox.setVisible(%hasOrmMap); //AOMap - if((%material).getAOMap(%layer) !$= "" && (%material).getAOMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->aoMapNameText.setText( (%material).getAOMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->aoMapDisplayBitmap.setBitmap( (%material).getAOMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->aoMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->aoMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %aoMap = (%material).getAOMap(%layer); + %aoMapText = %aoMap !$= "" && %aoMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getAOMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->aoMapNameText.setText( %aoMapText ); + MaterialEditorPropertiesWindow-->aoMapDisplayBitmap.setBitmap( getAssetPreviewImage(%aoMap) ); + //RoughMap - if((%material).getRoughMap(%layer) !$= "" && (%material).getRoughMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->roughMapNameText.setText( (%material).getRoughMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->roughMapDisplayBitmap.setBitmap( (%material).getRoughMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->roughMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->roughMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %roughMap = (%material).getRoughMap(%layer); + %roughMapText = %roughMap !$= "" && %roughMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getRoughMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->roughMapNameText.setText( %roughMapText ); + MaterialEditorPropertiesWindow-->roughMapDisplayBitmap.setBitmap( getAssetPreviewImage(%roughMap) ); //MetalMap - if((%material).getMetalMap(%layer) !$= "" && (%material).getMetalMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->metalMapNameText.setText( (%material).getMetalMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->metalMapDisplayBitmap.setBitmap( (%material).getMetalMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->metalMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->metalMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %metalMap = (%material).getMetalMap(%layer); + %metalMapText = %metalMap !$= "" && %metalMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getMetalMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->metalMapNameText.setText( %metalMapText ); + MaterialEditorPropertiesWindow-->metalMapDisplayBitmap.setBitmap( getAssetPreviewImage(%metalMap) ); //GlowMap - if((%material).getGlowMap(%layer) !$= "" && (%material).getGlowMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->glowMapNameText.setText( (%material).getGlowMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->glowMapDisplayBitmap.setBitmap( (%material).getGlowMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->glowMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->glowMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %glowMap = (%material).getGlowMap(%layer); + %glowMapText = %glowMap !$= "" && %glowMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getGlowMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->glowMapNameText.setText( %glowMapText ); + MaterialEditorPropertiesWindow-->glowMapDisplayBitmap.setBitmap( getAssetPreviewImage(%glowMap) ); //Overlay - if((%material).getOverlayMap(%layer) !$= "" && (%material).getOverlayMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->overlayMapNameText.setText( (%material).getOverlayMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->overlayMapDisplayBitmap.setBitmap( (%material).getOverlayMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->overlayMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->overlayMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %overlayMap = (%material).getOverlayMap(%layer); + %overlayMapText = %overlayMap !$= "" && %overlayMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getOverlayMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->overlayMapNameText.setText( %overlayMapText ); + MaterialEditorPropertiesWindow-->overlayMapDisplayBitmap.setBitmap( getAssetPreviewImage(%overlayMap) ); //Detail - if((%material).getDetailMap(%layer) !$= "" && (%material).getDetailMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->detailMapNameText.setText( (%material).getDetailMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->detailMapDisplayBitmap.setBitmap( (%material).getDetailMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->detailMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->detailMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %detailMap = (%material).getDetailMap(%layer); + %detailMapText = %detailMap !$= "" && %detailMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getDetailMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->detailMapNameText.setText( %detailMapText ); + MaterialEditorPropertiesWindow-->detailMapDisplayBitmap.setBitmap( getAssetPreviewImage(%detailMap) ); //Detail Normal - if((%material).getDetailNormalMap(%layer) !$= "" && (%material).getDetailNormalMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->detailNormalMapNameText.setText( (%material).getDetailNormalMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->detailNormalMapDisplayBitmap.setBitmap( (%material).getDetailNormalMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->detailNormalMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->detailNormalMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %detailNormalMap = (%material).getDetailNormalMap(%layer); + %detailNormalMapText = %detailNormalMap !$= "" && %detailNormalMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getDetailNormalMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->detailNormalMapNameText.setText( %detailNormalMapText ); + MaterialEditorPropertiesWindow-->detailNormalMapDisplayBitmap.setBitmap( getAssetPreviewImage(%detailNormalMap) ); //Light - if((%material).getLightMap(%layer) !$= "" && (%material).getLightMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->lightMapNameText.setText( (%material).getLightMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->lightMapDisplayBitmap.setBitmap( (%material).getLightMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->lightMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->lightMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %lightMap = (%material).getLightMap(%layer); + %lightMapText = %lightMap !$= "" && %lightMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getLightMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->lightMapNameText.setText( %lightMapText ); + MaterialEditorPropertiesWindow-->lightMapDisplayBitmap.setBitmap( getAssetPreviewImage(%lightMap) ); //Tone - if((%material).getToneMap(%layer) !$= "" && (%material).getToneMap(%layer) !$= $MaterialEditor::emptyMaterialImage) - { - MaterialEditorPropertiesWindow-->toneMapNameText.setText( (%material).getToneMapAsset(%layer) ); - MaterialEditorPropertiesWindow-->toneMapDisplayBitmap.setBitmap( (%material).getToneMap(%layer) ); - } - else - { - MaterialEditorPropertiesWindow-->toneMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->toneMapDisplayBitmap.setBitmap( $MaterialEditor::emptyMaterialImage ); - } + %toneMap = (%material).getToneMap(%layer); + %toneMapText = %toneMap !$= "" && %toneMap !$=$MaterialEditor::emptyMaterialImage ? (%material).getToneMapAsset(%layer) : "None"; + MaterialEditorPropertiesWindow-->toneMapNameText.setText( %toneMapText ); + MaterialEditorPropertiesWindow-->toneMapDisplayBitmap.setBitmap( getAssetPreviewImage(%toneMap) ); MaterialEditorPropertiesWindow-->accuScaleTextEdit.setText((%material).accuScale[%layer]); MaterialEditorPropertiesWindow-->accuScaleTextEdit.setText((%material).accuScale[%layer]); @@ -1254,12 +1172,9 @@ function MaterialEditorGui::doUpdateTextureMap( %this, %assetId ) %bitmapCtrl = MaterialEditorPropertiesWindow.findObjectByInternalName( %type @ "MapDisplayBitmap", true ); %textCtrl = MaterialEditorPropertiesWindow.findObjectByInternalName( %type @ "MapNameText", true ); - %assetDef = AssetDatabase.acquireAsset(%assetId); - - %texture = %assetDef.getImagePath(); + %texture = getAssetPreviewImage(%assetId); - //%texture = MaterialEditorGui.openFile("texture"); - if( %texture !$= "" ) + if( %texture !$= "" && %texture !$= $MaterialEditor::emptyMaterialImage) { %bitmapCtrl.setBitmap(%texture); diff --git a/Templates/BaseGame/game/tools/particleEditor/particleParticleEditor.ed.tscript b/Templates/BaseGame/game/tools/particleEditor/particleParticleEditor.ed.tscript index e1a34fe4b..64486e92e 100644 --- a/Templates/BaseGame/game/tools/particleEditor/particleParticleEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/particleEditor/particleParticleEditor.ed.tscript @@ -57,24 +57,11 @@ function PE_ParticleEditor::guiSync( %this ) %popup.sort(); %popup.setSelected( %data ); - %bitmap = %data.getTexture();//MaterialEditorGui.searchForTexture( %data.getName(), %data.getTexture() ); - if( %bitmap !$= "" ) - { - PE_ParticleEditor-->PEP_previewImage.setBitmap( %bitmap ); - - %text = %data.getTextureAsset(); - if(%text $= "") - %text = %bitmap; - - PE_ParticleEditor-->PEP_previewImageName.setText( %text ); - PE_ParticleEditor-->PEP_previewImageName.tooltip = %bitmap; - } - else - { - PE_ParticleEditor-->PEP_previewImage.setBitmap( "" ); - PE_ParticleEditor-->PEP_previewImageName.setText( "None" ); - PE_ParticleEditor-->PEP_previewImageName.tooltip = "None"; - } + %bitmap = %data.getTexture(); + %bitmapText = %bitmap !$= "" && %bitmap !$= $MaterialEditor::emptyMaterialImage ? %data.getTextureAsset() : "None"; + PE_ParticleEditor-->PEP_previewImageName.setText( %bitmapText ); + PE_ParticleEditor-->PEP_previewImageName.tooltip = %bitmapText; + PE_ParticleEditor-->PEP_previewImage.setBitmap( getAssetPreviewImage(%bitmap) ); PE_ParticleEditor-->PEP_inverseAlpha.setValue( %data.useInvAlpha ); @@ -396,6 +383,9 @@ function PE_ParticleEditor::loadNewParticle( %this, %particle ) else %particle = PEP_ParticleSelector.getSelected(); + if( !isObject( %particle ) ) + return; + PE_ParticleEditor.currParticle = %particle; error("PE_ParticleEditor::loadNewParticle() - Loading particle: " @ %particle.getName()); 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 e9f39b003..68d03f4e8 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/editors/terrainEditor.ed.tscript @@ -62,7 +62,7 @@ function TerrainEditor::setPaintMaterial( %this, %matIndex, %terrainMat ) ETerrainMaterialSelected.selectedMatIndex = %matIndex; ETerrainMaterialSelected.selectedMat = %terrainMat; - ETerrainMaterialSelected.setBitmap(%terrainMat.getDiffuseMap()); + ETerrainMaterialSelected.setBitmap(getAssetPreviewImage(%terrainMat.getDiffuseMap())); ETerrainMaterialSelectedEdit.Visible = isObject(%terrainMat); TerrainTextureText.text = %terrainMat.getInternalName(); @@ -141,7 +141,7 @@ function EPainter::updateLayers( %this, %matIndex ) }; %ctrl.setText( %matInternalName ); - %ctrl.setBitmap( %mat.getDiffuseMap() ); + %ctrl.setBitmap( getAssetPreviewImage(%mat.getDiffuseMap()) ); %tooltip = %matInternalName; if(%i < 9) 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 0a47f96ee..5429008ea 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript @@ -296,7 +296,7 @@ function TerrainMaterialDlg::changeTerrainMatMapAsset(%this) %image = $TerrainMaterialEditor::emptyMaterialImage; } - %targetMap.setBitmap( %image ); + %targetMap.setBitmap( getAssetPreviewImage(%image) ); %targetMapName = %targetMap @ "AssetId"; %targetMapName.setText(%imgAsset); @@ -420,99 +420,35 @@ function TerrainMaterialDlg::setActiveMaterial( %this, %mat ) // %imgPath = %mat.getDiffuseMap(); - if(%imgPath $= "") - %imgPath = $TerrainMaterialEditor::emptyMaterialImage; - - %this-->texBaseMap.setBitmap( %imgPath ); - - if(%imgPath !$= $TerrainMaterialEditor::emptyMaterialImage) - { - %imgAsset = %mat.getDiffuseMapAsset(); - if(%imgAsset $= "") - %imgAsset = %imgPath; - %this-->diffuseMapAssetId.setText( %imgAsset ); - } - else - { - %this-->diffuseMapAssetId.setText( "None" ); - } + %imgPathText = %imgPath !$= "" && %imgPath !$= $TerrainMaterialEditor::emptyMaterialImage ? %mat.getDiffuseMapAsset() : "None"; + %this-->diffuseMapAssetId.setText( %imgPathText ); + %this-->texBaseMap.setBitmap( getAssetPreviewImage(%imgPath) ); // %imgPath = %mat.getNormalMap(); - if(%imgPath $= "") - %imgPath = $TerrainMaterialEditor::emptyMaterialImage; - - %this-->texNormalMap.setBitmap( %imgPath ); - - if(%imgPath !$= $TerrainMaterialEditor::emptyMaterialImage) - { - %imgAsset = %mat.getNormalMapAsset(); - if(%imgAsset $= "") - %imgAsset = %imgPath; - %this-->normalMapAssetId.setText( %imgAsset ); - } - else - { - %this-->normalMapAssetId.setText( "None" ); - } + %imgPathText = %imgPath !$= "" && %imgPath !$= $TerrainMaterialEditor::emptyMaterialImage ? %mat.getNormalMapAsset() : "None"; + %this-->normalMapAssetId.setText( %imgPathText ); + %this-->texNormalMap.setBitmap( getAssetPreviewImage(%imgPath) ); // %imgPath = %mat.getORMConfigMap(); - if(%imgPath $= "") - %imgPath = $TerrainMaterialEditor::emptyMaterialImage; - - %this-->texORMConfigMap.setBitmap( %imgPath ); - - if(%imgPath !$= $TerrainMaterialEditor::emptyMaterialImage) - { - %imgAsset = %mat.getORMConfigMapAsset(); - if(%imgAsset $= "") - %imgAsset = %imgPath; - %this-->ORMMapAssetId.setText( %imgAsset ); - } - else - { - %this-->ORMMapAssetId.setText( "None" ); - } + %imgPathText = %imgPath !$= "" && %imgPath !$= $TerrainMaterialEditor::emptyMaterialImage ? %mat.getORMConfigMapAsset() : "None"; + %this-->ORMMapAssetId.setText( %imgPathText ); + %this-->texORMConfigMap.setBitmap( getAssetPreviewImage(%imgPath) ); // %imgPath = %mat.getDetailMap(); - if(%imgPath $= "") - %imgPath = $TerrainMaterialEditor::emptyMaterialImage; - - %this-->texDetailMap.setBitmap( %imgPath ); - - if(%imgPath !$= $TerrainMaterialEditor::emptyMaterialImage) - { - %imgAsset = %mat.getDetailMapAsset(); - if(%imgAsset $= "") - %imgAsset = %imgPath; - %this-->detailMapAssetId.setText( %imgAsset ); - } - else - { - %this-->detailMapAssetId.setText( "None" ); - } + %imgPathText = %imgPath !$= "" && %imgPath !$= $TerrainMaterialEditor::emptyMaterialImage ? %mat.getDetailMapAsset() : "None"; + %this-->detailMapAssetId.setText( %imgPathText ); + %this-->texDetailMap.setBitmap( getAssetPreviewImage(%imgPath) ); // %imgPath = %mat.getMacroMap(); - if(%imgPath $= "") - %imgPath = $TerrainMaterialEditor::emptyMaterialImage; - - %this-->texMacroMap.setBitmap( %imgPath ); - - if(%imgPath !$= $TerrainMaterialEditor::emptyMaterialImage) - { - %imgAsset = %mat.getMacroMapAsset(); - if(%imgAsset $= "") - %imgAsset = %imgPath; - %this-->macroMapAssetId.setText( %imgAsset ); - } - else - { - %this-->macroMapAssetId.setText( "None" ); - } + %imgPathText = %imgPath !$= "" && %imgPath !$= $TerrainMaterialEditor::emptyMaterialImage ? %mat.getMacroMapAsset() : "None"; + %this-->macroMapAssetId.setText( %imgPathText ); + %this-->texMacroMap.setBitmap( getAssetPreviewImage(%imgPath) ); + // %this-->detSizeCtrl.setText( %mat.detailSize ); %this-->baseSizeCtrl.setText( %mat.diffuseSize ); %this-->detStrengthCtrl.setText( %mat.detailStrength ); From 6474413aaf3a718cc9efe3779c6c444d63f102f1 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Tue, 16 Nov 2021 12:40:22 -0600 Subject: [PATCH 7/8] fix reported ASAN crash --- Engine/source/postFx/postEffect.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/postFx/postEffect.cpp b/Engine/source/postFx/postEffect.cpp index ca6baeb89..94b0ce7dc 100644 --- a/Engine/source/postFx/postEffect.cpp +++ b/Engine/source/postFx/postEffect.cpp @@ -1644,7 +1644,7 @@ void PostEffect::setTexture( U32 index, const String &texFilePath ) void PostEffect::setTexture(U32 index, const GFXTexHandle& texHandle) { // Set the new texture name. - mTextureName[index] = ""; + mTextureName[index] = StringTable->EmptyString(); mTexture[index].free(); // Skip empty stages or ones with variable or target names. From 2e0310885675adbbcdf9b8b3315dea27a253ce9b Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Tue, 16 Nov 2021 23:56:52 -0500 Subject: [PATCH 8/8] Optionally allow to treat script assert as warning This commit allows us to treat variable use before assign errors and local variables inside of the global scope as warnings instead of asserts. This will allow for easier porting of legacy scripts. It is highly recommended use this as an aid to port scripts, but can be used in production if needbe. --- Engine/source/console/astNodes.cpp | 10 ++++-- Engine/source/console/codeBlock.cpp | 6 ++-- Engine/source/console/compiledEval.cpp | 3 +- Engine/source/console/compiler.cpp | 47 +++++++++++++++++++++++--- Engine/source/console/compiler.h | 2 ++ Engine/source/console/console.cpp | 4 ++- 6 files changed, 60 insertions(+), 12 deletions(-) diff --git a/Engine/source/console/astNodes.cpp b/Engine/source/console/astNodes.cpp index c34c4b38d..0c69fbc5c 100644 --- a/Engine/source/console/astNodes.cpp +++ b/Engine/source/console/astNodes.cpp @@ -57,11 +57,16 @@ namespace Compiler using namespace Compiler; FuncVars gEvalFuncVars; +FuncVars gGlobalScopeFuncVars; FuncVars* gFuncVars = NULL; inline FuncVars* getFuncVars(S32 lineNumber) { - AssertISV(gFuncVars, avar("Attemping to use local variable in global scope. File: %s Line: %d", CodeBlock::smCurrentParser->getCurrentFile(), lineNumber)); + if (gFuncVars == &gGlobalScopeFuncVars) + { + const char* str = avar("Attemping to use local variable in global scope. File: %s Line: %d", CodeBlock::smCurrentParser->getCurrentFile(), lineNumber); + scriptErrorHandler(str); + } return gFuncVars; } @@ -1552,8 +1557,7 @@ U32 FunctionDeclStmtNode::compileStmt(CodeStream& codeStream, U32 ip) tbl->add(fnName, nameSpace, varName); } - // In eval mode, global func vars are allowed. - gFuncVars = gIsEvalCompile ? &gEvalFuncVars : NULL; + gFuncVars = gIsEvalCompile ? &gEvalFuncVars : &gGlobalScopeFuncVars; return ip; } diff --git a/Engine/source/console/codeBlock.cpp b/Engine/source/console/codeBlock.cpp index f03ec25f6..46b40d441 100644 --- a/Engine/source/console/codeBlock.cpp +++ b/Engine/source/console/codeBlock.cpp @@ -38,6 +38,7 @@ CodeBlock * CodeBlock::smCurrentCodeBlock = NULL; ConsoleParser *CodeBlock::smCurrentParser = NULL; extern FuncVars gEvalFuncVars; +extern FuncVars gGlobalScopeFuncVars; extern FuncVars* gFuncVars; //------------------------------------------------------------------------- @@ -637,8 +638,7 @@ ConsoleValue CodeBlock::compileExec(StringTableEntry fileName, const char *inStr // we are an eval compile if we don't have a file name associated (no exec) gIsEvalCompile = fileName == NULL; - // In eval mode, global func vars are allowed. - gFuncVars = gIsEvalCompile ? &gEvalFuncVars : NULL; + gFuncVars = gIsEvalCompile ? &gEvalFuncVars : &gGlobalScopeFuncVars; // Set up the parser. smCurrentParser = getParserForFile(fileName); @@ -678,7 +678,7 @@ ConsoleValue CodeBlock::compileExec(StringTableEntry fileName, const char *inStr codeStream.emit(OP_RETURN_VOID); codeStream.emitCodeStream(&codeSize, &code, &lineBreakPairs); - S32 localRegisterCount = gIsEvalCompile ? gEvalFuncVars.count() : 0; + S32 localRegisterCount = gIsEvalCompile ? gEvalFuncVars.count() : gGlobalScopeFuncVars.count(); consoleAllocReset(); diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index e9862c7ee..126cf4b01 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -691,7 +691,8 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa setFrame = -1; // Do we want this code to execute using a new stack frame? - if (setFrame < 0) + // compiling a file will force setFrame to 0, forcing us to get a new frame. + if (setFrame <= 0) { // argc is the local count for eval gEvalState.pushFrame(NULL, NULL, argc); diff --git a/Engine/source/console/compiler.cpp b/Engine/source/console/compiler.cpp index 13839feda..f898b8984 100644 --- a/Engine/source/console/compiler.cpp +++ b/Engine/source/console/compiler.cpp @@ -35,6 +35,13 @@ #include "console/simBase.h" extern FuncVars gEvalFuncVars; +extern FuncVars gGlobalScopeFuncVars; +extern FuncVars *gFuncVars; + +namespace Con +{ +extern bool scriptWarningsAsAsserts; +}; namespace Compiler { @@ -124,12 +131,24 @@ namespace Compiler getFunctionStringTable().reset(); getIdentTable().reset(); getFunctionVariableMappingTable().reset(); - gEvalFuncVars.clear(); + gGlobalScopeFuncVars.clear(); + gFuncVars = gIsEvalCompile ? &gEvalFuncVars : &gGlobalScopeFuncVars; } void *consoleAlloc(U32 size) { return gConsoleAllocator.alloc(size); } void consoleAllocReset() { gConsoleAllocator.freeBlocks(); } + void scriptErrorHandler(const char* str) + { + if (Con::scriptWarningsAsAsserts) + { + AssertISV(false, str); + } + else + { + Con::warnf(ConsoleLogEntry::Type::Script, "%s", str); + } + } } //------------------------------------------------------------------------- @@ -141,7 +160,11 @@ S32 FuncVars::assign(StringTableEntry var, TypeReq currentType, S32 lineNumber, std::unordered_map::iterator found = vars.find(var); if (found != vars.end()) { - AssertISV(!found->second.isConstant, avar("Reassigning variable %s when it is a constant. File: %s Line : %d", var, CodeBlock::smCurrentParser->getCurrentFile(), lineNumber)); + if (found->second.isConstant) + { + const char* str = avar("Script Warning: Reassigning variable %s when it is a constant. File: %s Line : %d", var, CodeBlock::smCurrentParser->getCurrentFile(), lineNumber); + scriptErrorHandler(str); + } return found->second.reg; } @@ -155,7 +178,15 @@ S32 FuncVars::assign(StringTableEntry var, TypeReq currentType, S32 lineNumber, S32 FuncVars::lookup(StringTableEntry var, S32 lineNumber) { std::unordered_map::iterator found = vars.find(var); - AssertISV(found != vars.end(), avar("Variable %s referenced before used when compiling script. File: %s Line: %d", var, CodeBlock::smCurrentParser->getCurrentFile(), lineNumber)); + + if (found == vars.end()) + { + const char* str = avar("Script Warning: Variable %s referenced before used when compiling script. File: %s Line: %d", var, CodeBlock::smCurrentParser->getCurrentFile(), lineNumber); + scriptErrorHandler(str); + + return assign(var, TypeReqString, lineNumber, false); + } + return found->second.reg; } @@ -163,7 +194,15 @@ TypeReq FuncVars::lookupType(StringTableEntry var, S32 lineNumber) { std::unordered_map::iterator found = vars.find(var); - AssertISV(found != vars.end(), avar("Variable %s referenced before used when compiling script. File: %s Line: %d", var, CodeBlock::smCurrentParser->getCurrentFile(), lineNumber)); + if (found == vars.end()) + { + const char* str = avar("Script Warning: Variable %s referenced before used when compiling script. File: %s Line: %d", var, CodeBlock::smCurrentParser->getCurrentFile(), lineNumber); + scriptErrorHandler(str); + + assign(var, TypeReqString, lineNumber, false); + return vars.find(var)->second.currentType; + } + return found->second.currentType; } diff --git a/Engine/source/console/compiler.h b/Engine/source/console/compiler.h index 24067257f..612923939 100644 --- a/Engine/source/console/compiler.h +++ b/Engine/source/console/compiler.h @@ -275,6 +275,8 @@ namespace Compiler void *consoleAlloc(U32 size); void consoleAllocReset(); + void scriptErrorHandler(const char* str); + extern bool gSyntaxError; extern bool gIsEvalCompile; }; diff --git a/Engine/source/console/console.cpp b/Engine/source/console/console.cpp index 14e75f0f8..59fca1874 100644 --- a/Engine/source/console/console.cpp +++ b/Engine/source/console/console.cpp @@ -274,6 +274,7 @@ static Vector< String > sInstantGroupStack( __FILE__, __LINE__ ); static DataChunker consoleLogChunker; static Vector consoleLog(__FILE__, __LINE__); static bool consoleLogLocked; +bool scriptWarningsAsAsserts = true; static bool logBufferEnabled=true; static S32 printLevel = 10; static FileStream consoleLogFile; @@ -353,7 +354,7 @@ void init() ConsoleConstructor::setup(); // Set up the parser(s) - CON_ADD_PARSER(CMD, TORQUE_SCRIPT_EXTENSION, true); // TorqueScript + CON_ADD_PARSER(CMD, (char*)TORQUE_SCRIPT_EXTENSION, true); // TorqueScript // Setup the console types. ConsoleBaseType::initialize(); @@ -377,6 +378,7 @@ void init() addVariable("Con::objectCopyFailures", TypeS32, &gObjectCopyFailures, "If greater than zero then it counts the number of object creation " "failures based on a missing copy object and does not report an error..\n" "@ingroup Console\n"); + addVariable("Con::scriptWarningsAsAsserts", TypeBool, &scriptWarningsAsAsserts, "If true, script warnings (outside of syntax errors) will be treated as fatal asserts."); // Current script file name and root addVariable( "Con::File", TypeString, &gCurrentFile, "The currently executing script file.\n"