From c74b669f5e7d220115cab694f397e1647bb13df2 Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 20 Nov 2019 01:39:12 -0600 Subject: [PATCH] Removed redundant 'load last edited level' startup mode to editor. Fixed recent levels open command behavior Includes rextimmy's vertex WS normal logic in HLS shadergen --- .../shaderGen/HLSL/shaderFeatureHLSL.cpp | 31 +++++++++++++++---- .../source/shaderGen/HLSL/shaderFeatureHLSL.h | 2 ++ .../scripts/client/levelDownload.cs | 2 +- .../game/tools/gui/editorSettingsWindow.ed.cs | 4 --- Templates/BaseGame/game/tools/main.cs | 19 +----------- .../worldEditor/scripts/menuHandlers.ed.cs | 10 ++++-- 6 files changed, 36 insertions(+), 32 deletions(-) diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index 6de962577..d1d86a9a1 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -767,6 +767,21 @@ Var* ShaderFeatureHLSL::getWsView( Var *wsPosition, MultiLine *meta ) return wsView; } +Var* ShaderFeatureHLSL::getInWorldNormal(Vector& componentList) +{ + Var* wsNormal = (Var*)LangElement::find("wsNormal"); + if (!wsNormal) + { + ShaderConnector* connectComp = dynamic_cast(componentList[C_CONNECTOR]); + wsNormal = connectComp->getElement(RT_TEXCOORD); + wsNormal->setName("wsNormal"); + wsNormal->setStructName("IN"); + wsNormal->setType("float3"); + } + + return wsNormal; +} + Var* ShaderFeatureHLSL::addOutDetailTexCoord( Vector &componentList, MultiLine *meta, bool useTexAnim, @@ -853,20 +868,24 @@ Var* ShaderFeatureHLSL::getSurface(Vector& componentList, Mult meta->addStatement(new GenOp(" @ = float4(0.0,1.0,@,@);\r\n", colorDecl, smoothness, metalness)); //reconstruct matinfo, no ao darkening } - Var* wsNormal = (Var*)LangElement::find("wsNormal"); Var* normal = (Var*)LangElement::find("normal"); if (!normal) { normal = new Var("normal", "float3"); meta->addStatement(new GenOp(" @;\r\n\n", new DecOp(normal))); + + Var* wsNormal = (Var*)LangElement::find("wsNormal"); + if (!fd.features[MFT_NormalMap]) { - Var* worldToTangent = getInWorldToTangent(componentList); - meta->addStatement(new GenOp(" @ = normalize(mul(@,float3(0,0,1.0f)));\r\n\n", normal, worldToTangent)); + if (!wsNormal) + wsNormal = getInWorldNormal(componentList); + + meta->addStatement(new GenOp(" @ = normalize( @ );\r\n\n", normal, wsNormal)); } else { - meta->addStatement(new GenOp(" @ = normalize( half3( @ ) );\r\n", normal, wsNormal)); + meta->addStatement(new GenOp(" @ = normalize( @ );\r\n", normal, wsNormal)); } } @@ -2168,7 +2187,7 @@ void RTLightingFeatHLSL::processVert( Vector &componentList, // If there isn't a normal map then we need to pass // the world space normal to the pixel shader ourselves. //Temporarily disabled while we figure out how to better handle normals without a normal map - /* if ( !fd.features[MFT_NormalMap] ) + if ( !fd.features[MFT_NormalMap] ) { Var *outNormal = connectComp->getElement( RT_TEXCOORD ); outNormal->setName( "wsNormal" ); @@ -2180,7 +2199,7 @@ void RTLightingFeatHLSL::processVert( Vector &componentList, // Transform the normal to world space. meta->addStatement( new GenOp( " @ = mul( @, float4( normalize( @ ), 0.0 ) ).xyz;\r\n", outNormal, objTrans, inNormal ) ); - }*/ + } addOutWsPosition( componentList, fd.features[MFT_UseInstancing], meta ); diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h index a2c765ffb..e01b97853 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h @@ -138,6 +138,8 @@ public: Var* getSurface(Vector& componentList, MultiLine* meta, const MaterialFeatureData& fd); + Var* getInWorldNormal(Vector& componentList); + // ShaderFeature Var* getVertTexCoord( const String &name ); LangElement* setupTexSpaceMat( Vector &componentList, Var **texSpaceMat ); diff --git a/Templates/BaseGame/game/core/clientServer/scripts/client/levelDownload.cs b/Templates/BaseGame/game/core/clientServer/scripts/client/levelDownload.cs index fbd5bfccd..9c7dbd434 100644 --- a/Templates/BaseGame/game/core/clientServer/scripts/client/levelDownload.cs +++ b/Templates/BaseGame/game/core/clientServer/scripts/client/levelDownload.cs @@ -265,7 +265,7 @@ function sceneLightingComplete() %probeCount = getWordCount(%probeIds); $pref::ReflectionProbes::CurrentLevelPath = filePath($Client::MissionFile) @ "/" @ fileBase($Client::MissionFile) @ "/probes/"; - ProbeBin.processProbes(); + //ProbeBin.processProbes(); onPhaseComplete("STARTING MISSION"); diff --git a/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs b/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs index adacdc178..b3fa1f58e 100644 --- a/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs +++ b/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs @@ -330,10 +330,6 @@ function ESettingsWindow::getNavEditorSettings(%this) function ESettingsWindow::getSceneEditorSettings(%this) { - SettingsInspector.startGroup("Startup"); - SettingsInspector.addSettingsField("WorldEditor/startupMode", "Startup Mode", "list", "", "Blank Level,Last Open Level"); - SettingsInspector.endGroup(); - SettingsInspector.startGroup("Render"); SettingsInspector.addSettingsField("WorldEditor/Render/renderObjHandle", "Object Icons", "bool", ""); SettingsInspector.addSettingsField("WorldEditor/Render/renderObjText", "Object Text", "bool", ""); diff --git a/Templates/BaseGame/game/tools/main.cs b/Templates/BaseGame/game/tools/main.cs index 8556c493d..9c5cda7ba 100644 --- a/Templates/BaseGame/game/tools/main.cs +++ b/Templates/BaseGame/game/tools/main.cs @@ -275,24 +275,7 @@ function fastLoadWorldEdit(%val) // Flag saying, when level is chosen, launch it with the editor open. %defaultLevelFile = EditorSettings.value( "WorldEditor/newLevelFile" ); - %startupMode = EditorSettings.value("WorldEditor/startupMode", "Blank Level"); - if(%startupMode $= "Blank Level") - { - EditorNewLevel(%defaultLevelFile); - } - else if(%startupMode $= "Last Open Level") - { - %lastLevel = EditorSettings.value("WorldEditor/lastEditedLevel", ""); - - if(%lastLevel $= "") - { - EditorNewLevel(%defaultLevelFile); - } - else - { - EditorOpenMission(%lastLevel); - } - } + EditorNewLevel(%defaultLevelFile); } else { diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs b/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs index 6af3718d4..c94b63dfe 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/menuHandlers.ed.cs @@ -435,6 +435,9 @@ function EditorOpenMission(%levelAsset) popInstantGroup(); } + + //If we've opened a valid level, clear the saveAs tag as it's not really applicable now + EditorGui.saveAs = false; } function EditorOpenSceneAppend(%levelAsset) @@ -605,8 +608,6 @@ function EditorUnmount() //------------------------------------------------------------------------ function updateRecentLevelsListing() { - RecentLevelsPopupMenu.clearItems(); - %recentLevels = EditorSettings.value("WorldEditor/recentLevelsList"); %recentCount = getTokenCount(%recentLevels, ","); @@ -614,8 +615,11 @@ function updateRecentLevelsListing() { %recentEntry = getToken(%recentLevels, ",", %i); - RecentLevelsPopupMenu.insertItem(%i, %recentEntry, "", "schedule(1,0, \"EditorOpenMission\", " @ %recentEntry @ ");"); + %command = "schedule(32,0, \"EditorOpenMission\", \"" @ %recentEntry @ "\");"; + RecentLevelsPopupMenu.item[%i] = %recentEntry TAB "" TAB %command; } + + RecentLevelsPopupMenu.reloadItems(); } //////////////////////////////////////////////////////////////////////////