瀏覽代碼

Merge branch 'Preview4_0' of https://github.com/Areloch/Torque3D into Preview4_0

AzaezelX 6 年之前
父節點
當前提交
c1402daa54
共有 58 個文件被更改,包括 983 次插入573 次删除
  1. 16 8
      Engine/source/T3D/lighting/reflectionProbe.cpp
  2. 0 3
      Engine/source/T3D/lighting/reflectionProbe.h
  3. 2 2
      Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp
  4. 5 0
      Engine/source/gfx/gfxCardProfile.cpp
  5. 34 10
      Engine/source/gui/controls/guiSliderCtrl.cpp
  6. 3 0
      Engine/source/gui/controls/guiSliderCtrl.h
  7. 1 1
      Engine/source/gui/controls/guiTextEditCtrl.cpp
  8. 1 1
      Engine/source/gui/editor/popupMenu.cpp
  9. 1 1
      Engine/source/materials/processedCustomMaterial.cpp
  10. 1 1
      Engine/source/materials/processedShaderMaterial.cpp
  11. 39 0
      Engine/source/postFx/postEffect.cpp
  12. 12 0
      Engine/source/postFx/postEffect.h
  13. 76 93
      Engine/source/renderInstance/renderProbeMgr.cpp
  14. 4 8
      Engine/source/renderInstance/renderProbeMgr.h
  15. 1 1
      Engine/source/util/settings.cpp
  16. 3 0
      Templates/BaseGame/game/core/Core.cs
  17. 0 6
      Templates/BaseGame/game/core/lighting/scripts/advancedLighting_Init.cs
  18. 0 5
      Templates/BaseGame/game/core/lighting/scripts/advancedLighting_Shaders.cs
  19. 26 20
      Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl
  20. 42 38
      Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl
  21. 13 0
      Templates/BaseGame/game/core/settings.xml
  22. 二進制
      Templates/BaseGame/game/data/ui/art/optionsMenuSliderBitmapArray.png
  23. 二進制
      Templates/BaseGame/game/data/ui/art/slider - Copy.png
  24. 3 1
      Templates/BaseGame/game/data/ui/scripts/guis/graphicsMenuSettingsSlider.taml
  25. 68 4
      Templates/BaseGame/game/data/ui/scripts/optionsMenu.cs
  26. 7 0
      Templates/BaseGame/game/data/ui/scripts/profiles.cs
  27. 34 0
      Templates/BaseGame/game/tools/assetBrowser/_assetImportConfigs.xml
  28. 6 6
      Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui
  29. 3 3
      Templates/BaseGame/game/tools/assetBrowser/guis/assetImport.gui
  30. 1 1
      Templates/BaseGame/game/tools/assetBrowser/guis/editAsset.gui
  31. 1 1
      Templates/BaseGame/game/tools/assetBrowser/guis/editModule.gui
  32. 1 1
      Templates/BaseGame/game/tools/assetBrowser/guis/newAsset.gui
  33. 1 0
      Templates/BaseGame/game/tools/assetBrowser/main.cs
  34. 1 1
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.cs
  35. 12 11
      Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs
  36. 1 1
      Templates/BaseGame/game/tools/convexEditor/convexEditorToolbar.ed.gui
  37. 二進制
      Templates/BaseGame/game/tools/editorClasses/gui/images/rollout.png
  38. 0 51
      Templates/BaseGame/game/tools/editorClasses/gui/panels/navPanelProfiles.ed.cs
  39. 180 31
      Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs
  40. 二進制
      Templates/BaseGame/game/tools/gui/images/button.png
  41. 二進制
      Templates/BaseGame/game/tools/gui/images/tab.png
  42. 二進制
      Templates/BaseGame/game/tools/gui/images/window.png
  43. 1 1
      Templates/BaseGame/game/tools/gui/messageBoxes/messageBoxOKCancelDetailsDlg.ed.gui
  44. 239 140
      Templates/BaseGame/game/tools/gui/profiles.ed.cs
  45. 3 3
      Templates/BaseGame/game/tools/guiEditor/gui/guiEditor.ed.gui
  46. 1 1
      Templates/BaseGame/game/tools/guiEditor/scripts/guiEditorCanvas.ed.cs
  47. 1 1
      Templates/BaseGame/game/tools/navEditor/NavEditorSettingsTab.gui
  48. 112 89
      Templates/BaseGame/game/tools/settings.xml
  49. 1 1
      Templates/BaseGame/game/tools/shapeEditor/gui/ShapeEditorToolbar.ed.gui
  50. 2 2
      Templates/BaseGame/game/tools/worldEditor/gui/EditorGui.ed.gui
  51. 2 2
      Templates/BaseGame/game/tools/worldEditor/gui/ToolsToolbar.ed.gui
  52. 6 6
      Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorToolbar.ed.gui
  53. 1 0
      Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorTreeWindow.ed.gui
  54. 1 0
      Templates/BaseGame/game/tools/worldEditor/gui/guiWorldEditorCreatorWindow.ed.gui
  55. 6 1
      Templates/BaseGame/game/tools/worldEditor/main.cs
  56. 0 7
      Templates/BaseGame/game/tools/worldEditor/scripts/lightViz.cs
  57. 7 6
      Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs
  58. 1 3
      Templates/Full/game/Full.torsion.opt

+ 16 - 8
Engine/source/T3D/lighting/reflectionProbe.cpp

@@ -89,7 +89,11 @@ ImplementEnumType(ReflectionModeEnum,
 //-----------------------------------------------------------------------------
 // Object setup and teardown
 //-----------------------------------------------------------------------------
-ReflectionProbe::ReflectionProbe()
+ReflectionProbe::ReflectionProbe() :
+   cubeDescId(0),
+   reflectorDesc(nullptr),
+   mSphereVertCount(0),
+   mSpherePrimitiveCount(0)
 {
    // Flag this object so that it will always
    // be sent across the network to clients
@@ -247,11 +251,11 @@ bool ReflectionProbe::_setReflectionMode(void *object, const char *index, const
 {
    ReflectionProbe* probe = reinterpret_cast<ReflectionProbe*>(object);
 
-   if (data == "Static Cubemap")
+   if (!dStrcmp(data,"Static Cubemap"))
    {
       probe->mReflectionModeType = StaticCubemap;
    }
-   else if (data == "Baked Cubemap")
+   else if (!dStrcmp(data, "Baked Cubemap"))
    {
       //Clear our cubemap if we changed it to be baked, just for cleanliness
       probe->mReflectionModeType = BakedCubemap;
@@ -589,6 +593,8 @@ void ReflectionProbe::processDynamicCubemap()
    else
       mProbeInfo->mIsEnabled = false;
 
+   mCubemapDirty = false;
+
    //Update the probe manager with our new texture!
    //if (!mProbeInfo->mIsSkylight && mProbeInfo->mPrefilterCubemap->isInitialized() && mProbeInfo->mIrradianceCubemap->isInitialized())
    //   PROBEMGR->updateProbeTexture(mProbeInfo->mProbeIdx);
@@ -637,9 +643,10 @@ void ReflectionProbe::processBakedCubemap()
    {
       mProbeInfo->mIsEnabled = true;
 
+      mCubemapDirty = false;
+
       //Update the probe manager with our new texture!
-      if (!mProbeInfo->mIsSkylight)
-         PROBEMGR->updateProbeTexture(mProbeInfo->mProbeIdx);
+      PROBEMGR->updateProbeTexture(mProbeInfo);
    }
 }
 
@@ -729,9 +736,10 @@ void ReflectionProbe::processStaticCubemap()
    {
       mProbeInfo->mIsEnabled = true;
 
+      mCubemapDirty = false;
+
       //Update the probe manager with our new texture!
-      if (!mProbeInfo->mIsSkylight)
-         PROBEMGR->updateProbeTexture(mProbeInfo->mProbeIdx);
+      PROBEMGR->updateProbeTexture(mProbeInfo);
    }
 }
 
@@ -739,7 +747,7 @@ bool ReflectionProbe::createClientResources()
 {
    if (mProbeInfo == nullptr)
    {
-      mProbeInfo = PROBEMGR->registerProbe(mProbeShapeType == ProbeRenderInst::Skylight);
+      mProbeInfo = PROBEMGR->registerProbe();
       if (!mProbeInfo)
          return false;
 

+ 0 - 3
Engine/source/T3D/lighting/reflectionProbe.h

@@ -151,9 +151,6 @@ protected:
    U32 mDynamicLastBakeMS;
    U32 mRefreshRateMS;
 
-   GBitmap* mCubeFaceBitmaps[6];
-   U32 mCubemapResolution;
-
    F32 mMaxDrawDistance;
 
    bool mResourcesCreated;

+ 2 - 2
Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp

@@ -26,7 +26,7 @@
 #include "gfx/D3D11/gfxD3D11EnumTranslate.h"
 #include "gfx/bitmap/imageUtils.h"
 
-GFXD3D11Cubemap::GFXD3D11Cubemap() : mTexture(NULL), mSRView(NULL), mDSView(NULL)
+GFXD3D11Cubemap::GFXD3D11Cubemap() : mTexture(NULL), mSRView(NULL), mDSView(NULL), mTexSize(0)
 {
 	mDynamic = false;
    mAutoGenMips = false;
@@ -568,4 +568,4 @@ void GFXD3D11CubemapArray::zombify()
 void GFXD3D11CubemapArray::resurrect()
 {
    // Static cubemaps are handled by D3D
-}
+}

+ 5 - 0
Engine/source/gfx/gfxCardProfile.cpp

@@ -41,17 +41,22 @@ void GFXCardProfiler::loadProfileScript(const char* aScriptName)
    void  *data = NULL;
    U32   dataSize = 0;
 
+   
    Torque::FS::ReadFile( scriptName.c_str(), data, dataSize, true );
 
    if(data == NULL)
    {
+#if TORQUE_DEBUG
       Con::warnf("      - No card profile %s exists", scriptName.c_str());
+#endif
       return;
    }
 
    const char  *script = static_cast<const char *>(data);
 
+#if TORQUE_DEBUG
    Con::printf("      - Loaded card profile %s", scriptName.c_str());
+#endif
 
    Con::evaluate(script, false, NULL);
    delete[] script;

+ 34 - 10
Engine/source/gui/controls/guiSliderCtrl.cpp

@@ -89,6 +89,7 @@ IMPLEMENT_CALLBACK( GuiSliderCtrl, onMouseDragged, void, (), (),
 GuiSliderCtrl::GuiSliderCtrl()
    : mRange( 0., 1.f ),
      mTicks( 10 ),
+     mRenderTicks(true),
      mSnap( false ),
      mValue( 0.5f ),
      mThumbSize( 8, 20 ),
@@ -98,7 +99,9 @@ GuiSliderCtrl::GuiSliderCtrl()
      mDisplayValue( false ),
      mMouseOver( false ),
      mDepressed( false ),
-     mMouseDragged( false )
+     mMouseDragged( false ),
+     mUseFillBar(false),
+     mFillBarColor(ColorI(255,255,255))
 {
 }
 
@@ -117,6 +120,12 @@ void GuiSliderCtrl::initPersistFields()
       addProtectedField( "value", TypeF32, Offset( mValue, GuiSliderCtrl ),
          _setValue, defaultProtectedGetFn,
          "The value corresponding to the current slider position." );
+      addField("useFillBar", TypeBool, Offset(mUseFillBar, GuiSliderCtrl),
+         "Whether to render the tick marks.");
+      addField("fillBarColor", TypeColorI, Offset(mFillBarColor, GuiSliderCtrl),
+         "Whether to render the tick marks.");
+      addField("renderTicks", TypeBool, Offset(mRenderTicks, GuiSliderCtrl),
+         "Whether to render the tick marks.");
       
    endGroup( "Slider" );
 
@@ -365,9 +374,18 @@ void GuiSliderCtrl::onRender(Point2I offset, const RectI &updateRect)
 
    GFXDrawUtil* drawUtil = GFX->getDrawUtil();
 
+   if (mUseFillBar)
+   {
+
+      drawUtil->drawRectFill(RectI(offset.x, offset.y, getWidth() * mValue, getHeight()), mFillBarColor);
+
+      renderChildControls(offset, updateRect);
+      return;
+   }
+
    if( mHasTexture )
    {
-      if(mTicks > 0)
+      if(mTicks > 0 && mRenderTicks)
       {
          // TODO: tick marks should be positioned based on the bitmap dimensions.
          Point2I mid(ext.x, ext.y/2);
@@ -443,11 +461,14 @@ void GuiSliderCtrl::onRender(Point2I offset, const RectI &updateRect)
          PrimBuild::vertex2i( pos.x + mid.x, pos.y + mid.y );
 
          // tick marks
-         for( U32 t = 0; t <= ( mTicks + 1 ); t++ )
+         if (mRenderTicks)
          {
-            S32 x = (S32)( F32( mid.x - 1 ) / F32( mTicks + 1 ) * F32( t ) );
-            PrimBuild::vertex2i( pos.x + x, pos.y + mid.y - mShiftPoint );
-            PrimBuild::vertex2i( pos.x + x, pos.y + mid.y + mShiftPoint );
+            for (U32 t = 0; t <= (mTicks + 1); t++)
+            {
+               S32 x = (S32)(F32(mid.x - 1) / F32(mTicks + 1) * F32(t));
+               PrimBuild::vertex2i(pos.x + x, pos.y + mid.y - mShiftPoint);
+               PrimBuild::vertex2i(pos.x + x, pos.y + mid.y + mShiftPoint);
+            }
          }
          PrimBuild::end();
    }
@@ -462,11 +483,14 @@ void GuiSliderCtrl::onRender(Point2I offset, const RectI &updateRect)
          PrimBuild::vertex2i( pos.x + mid.x, pos.y + mid.y );
 
          // tick marks
-         for( U32 t = 0; t <= ( mTicks + 1 ); t++ )
+         if (mRenderTicks)
          {
-            S32 y = (S32)( F32( mid.y - 1 ) / F32( mTicks + 1 ) * F32( t ) );
-            PrimBuild::vertex2i( pos.x + mid.x - mShiftPoint, pos.y + y );
-            PrimBuild::vertex2i( pos.x + mid.x + mShiftPoint, pos.y + y );
+            for (U32 t = 0; t <= (mTicks + 1); t++)
+            {
+               S32 y = (S32)(F32(mid.y - 1) / F32(mTicks + 1) * F32(t));
+               PrimBuild::vertex2i(pos.x + mid.x - mShiftPoint, pos.y + y);
+               PrimBuild::vertex2i(pos.x + mid.x + mShiftPoint, pos.y + y);
+            }
          }
          PrimBuild::end();
       mDisplayValue = false;

+ 3 - 0
Engine/source/gui/controls/guiSliderCtrl.h

@@ -39,6 +39,7 @@ class GuiSliderCtrl : public GuiControl
 
       Point2F mRange;
       U32  mTicks;
+      bool mRenderTicks;
       bool mSnap;
       F32  mValue;
       RectI   mThumb;
@@ -51,6 +52,8 @@ class GuiSliderCtrl : public GuiControl
       bool mMouseOver;
       bool mMouseDragged;
       bool mHasTexture;
+      bool mUseFillBar;
+      ColorI mFillBarColor;
 
       enum
       {

+ 1 - 1
Engine/source/gui/controls/guiTextEditCtrl.cpp

@@ -1246,7 +1246,7 @@ void GuiTextEditCtrl::onLoseFirstResponder()
 
    //execute the validate command
    if( mValidateCommand.isNotEmpty() )
-      evaluate( mValidateCommand );
+      evaluate( mValidateCommand.c_str() );
 
    onValidate_callback();
 

+ 1 - 1
Engine/source/gui/editor/popupMenu.cpp

@@ -286,7 +286,7 @@ void PopupMenu::showPopup(GuiCanvas *owner, S32 x /* = -1 */, S32 y /* = -1 */)
    Sim::findObject("PopUpMenuControl", backgroundCtrl);
 
    GuiControlProfile* profile;
-   Sim::findObject("GuiMenubarProfile", profile);
+   Sim::findObject("ToolsGuiMenuBarProfile", profile);
 
    if (!profile)
       return;

+ 1 - 1
Engine/source/materials/processedCustomMaterial.cpp

@@ -541,4 +541,4 @@ MaterialParameters* ProcessedCustomMaterial::allocMaterialParameters()
       }
    }
    return ret;
-}
+}

+ 1 - 1
Engine/source/materials/processedShaderMaterial.cpp

@@ -1360,7 +1360,7 @@ void ProcessedShaderMaterial::setSceneInfo(SceneRenderState * state, const Scene
 
    LIGHTMGR->setLightInfo(this, mMaterial, sgData, state, pass, shaderConsts);
 
-   PROBEMGR->setProbeInfo(this, mMaterial, sgData, state, pass, shaderConsts);
+   //PROBEMGR->setProbeInfo(this, mMaterial, sgData, state, pass, shaderConsts);
 }
 
 void ProcessedShaderMaterial::setBuffers( GFXVertexBufferHandleBase *vertBuffer, GFXPrimitiveBufferHandle *primBuffer )

+ 39 - 0
Engine/source/postFx/postEffect.cpp

@@ -183,6 +183,16 @@ void PostEffect::EffectConst::set(const F32 &newVal)
    mValueType = FloatType;
 }
 
+void PostEffect::EffectConst::set(const int& newVal)
+{
+   if (mIntVal == newVal)
+      return;
+
+   mIntVal = newVal;
+   mDirty = true;
+   mValueType = IntType;
+}
+
 void PostEffect::EffectConst::set(const Point4F &newVal)
 {
    if (mPointVal == newVal)
@@ -326,6 +336,21 @@ void PostEffect::EffectConst::setToBuffer( GFXShaderConstBufferRef buff )
          const char* err = avar("PostEffect::EffectConst::setToBuffer $s type is not implemented", mName.c_str());
          Con::errorf(err);
          GFXAssertFatal(0, err);
+#endif
+      }
+   }
+   else if (mValueType == IntType)
+   {
+      if (type == GFXSCT_Int)
+      {
+         buff->set(mHandle, mIntVal);
+      }
+      else
+      {
+#if TORQUE_DEBUG
+         const char* err = avar("PostEffect::EffectConst::setToBuffer $s type is not implemented", mName.c_str());
+         Con::errorf(err);
+         GFXAssertFatal(0, err);
 #endif
       }
    }
@@ -1676,6 +1701,20 @@ void PostEffect::setShaderConst(const String &name, const F32 &val)
    iter->value->set(val);
 }
 
+void PostEffect::setShaderConst(const String& name, const int& val)
+{
+   PROFILE_SCOPE(PostEffect_SetShaderConst_Int);
+
+   EffectConstTable::Iterator iter = mEffectConsts.find(name);
+   if (iter == mEffectConsts.end())
+   {
+      EffectConst* newConst = new EffectConst(name, val);
+      iter = mEffectConsts.insertUnique(name, newConst);
+   }
+
+   iter->value->set(val);
+}
+
 void PostEffect::setShaderConst(const String &name, const Point4F &val)
 {
    PROFILE_SCOPE(PostEffect_SetShaderConst_Point);

+ 12 - 0
Engine/source/postFx/postEffect.h

@@ -230,6 +230,14 @@ protected:
          set(val);
       }
 
+      EffectConst(const String& name, const int& val)
+         : mName(name),
+         mHandle(NULL),
+         mDirty(true)
+      {
+         set(val);
+      }
+
       EffectConst(const String &name, const Point4F &val)
          : mName(name),
          mHandle(NULL),
@@ -264,6 +272,7 @@ protected:
 
       void set( const String &newVal );
       void set(const F32 &newVal);
+      void set(const int& newVal);
       void set(const Point4F &newVal);
       void set(const MatrixF &newVal);
       void set(const Vector<Point4F> &newVal);
@@ -277,6 +286,7 @@ protected:
 
       String mStringVal;
 
+      S32     mIntVal;
       F32     mFloatVal;
       Point4F mPointVal;
       MatrixF mMatrixVal;
@@ -287,6 +297,7 @@ protected:
       enum
       {
          StringType,
+         IntType,
          FloatType,
          PointType,
          MatrixType,
@@ -427,6 +438,7 @@ public:
    ///
    void setShaderConst( const String &name, const String &val );   
    void setShaderConst(const String &name, const F32 &val);
+   void setShaderConst(const String& name, const int& val);
    void setShaderConst(const String &name, const Point4F &val);
    void setShaderConst(const String &name, const MatrixF &val);
    void setShaderConst(const String &name, const Vector<Point4F> &val);

+ 76 - 93
Engine/source/renderInstance/renderProbeMgr.cpp

@@ -87,7 +87,8 @@ ProbeRenderInst::ProbeRenderInst() :
    mAtten(0.0),
    mCubemapIndex(0),
    mIsSkylight(false),
-   mProbeIdx(0)
+   mProbeIdx(0),
+   mProbeShapeType(Box)
 {
 }
 
@@ -132,7 +133,8 @@ ProbeShaderConstants::ProbeShaderConstants()
    mBRDFTextureMap(NULL),
    mSkylightSpecularMap(NULL),
    mSkylightIrradMap(NULL),
-   mHasSkylight(NULL)
+   mHasSkylight(NULL),
+   mWorldToObjArraySC(NULL)
 {
 }
 
@@ -202,7 +204,10 @@ RenderProbeMgr::RenderProbeMgr()
    mLastShader(nullptr),
    mLastConstants(nullptr),
 	mProbesDirty(false),
-   mHasSkylight(false)
+   mHasSkylight(false),
+   mSkylightCubemapIdx(-1),
+   mCubeMapCount(0),
+   mDefaultSkyLight(nullptr)
 {
    mEffectiveProbeCount = 0;
    mMipCount = 0;
@@ -314,50 +319,46 @@ void RenderProbeMgr::addElement(RenderInst *inst)
    }*/
 }
 
-ProbeRenderInst* RenderProbeMgr::registerProbe(const bool &isSkylight)
+ProbeRenderInst* RenderProbeMgr::registerProbe()
 {
    ProbeRenderInst newProbe;
-   newProbe.mIsSkylight = isSkylight;
 
    mRegisteredProbes.push_back(newProbe);
    newProbe.mProbeIdx = mRegisteredProbes.size();
 
-   if (!newProbe.mIsSkylight)
+   const U32 cubeIndex = _findNextEmptyCubeSlot();
+   if (cubeIndex == INVALID_CUBE_SLOT)
    {
-      const U32 cubeIndex = _findNextEmptyCubeSlot();
-      if (cubeIndex == INVALID_CUBE_SLOT)
-      {
-         Con::warnf("RenderProbeMgr::addProbe: Invalid cubemap slot.");
-         return nullptr;
-      }
+      Con::warnf("RenderProbeMgr::addProbe: Invalid cubemap slot.");
+      return nullptr;
+   }
 
-      //check if we need to resize the cubemap array
-      if (cubeIndex >= mCubeSlotCount)
-      {
-         //alloc temp array handles
-         GFXCubemapArrayHandle irr = GFXCubemapArrayHandle(GFX->createCubemapArray());
-         GFXCubemapArrayHandle prefilter = GFXCubemapArrayHandle(GFX->createCubemapArray());
+   //check if we need to resize the cubemap array
+   if (cubeIndex >= mCubeSlotCount)
+   {
+      //alloc temp array handles
+      GFXCubemapArrayHandle irr = GFXCubemapArrayHandle(GFX->createCubemapArray());
+      GFXCubemapArrayHandle prefilter = GFXCubemapArrayHandle(GFX->createCubemapArray());
 
-         irr->init(mCubeSlotCount + PROBE_ARRAY_SLOT_BUFFER_SIZE, PROBE_IRRAD_SIZE, PROBE_FORMAT);
-         prefilter->init(mCubeSlotCount + PROBE_ARRAY_SLOT_BUFFER_SIZE, PROBE_PREFILTER_SIZE, PROBE_FORMAT);
+      irr->init(mCubeSlotCount + PROBE_ARRAY_SLOT_BUFFER_SIZE, PROBE_IRRAD_SIZE, PROBE_FORMAT);
+      prefilter->init(mCubeSlotCount + PROBE_ARRAY_SLOT_BUFFER_SIZE, PROBE_PREFILTER_SIZE, PROBE_FORMAT);
 
-         mIrradianceArray->copyTo(irr);
-         mPrefilterArray->copyTo(prefilter);
+      mIrradianceArray->copyTo(irr);
+      mPrefilterArray->copyTo(prefilter);
 
-         //assign the temp handles to the new ones, this will destroy the old ones as well
-         mIrradianceArray = irr;
-         mPrefilterArray = prefilter;
+      //assign the temp handles to the new ones, this will destroy the old ones as well
+      mIrradianceArray = irr;
+      mPrefilterArray = prefilter;
 
-         mCubeSlotCount += PROBE_ARRAY_SLOT_BUFFER_SIZE;
-      }
+      mCubeSlotCount += PROBE_ARRAY_SLOT_BUFFER_SIZE;
+   }
 
-      newProbe.mCubemapIndex = cubeIndex;
-      //mark cubemap slot as taken
-      mCubeMapSlots[cubeIndex] = true;
-      mCubeMapCount++;
+   newProbe.mCubemapIndex = cubeIndex;
+   //mark cubemap slot as taken
+   mCubeMapSlots[cubeIndex] = true;
+   mCubeMapCount++;
 
-      Con::warnf("RenderProbeMgr::registerProbe: Registered probe %u to cubeIndex %u", newProbe.mProbeIdx, cubeIndex);
-   }
+   Con::warnf("RenderProbeMgr::registerProbe: Registered probe %u to cubeIndex %u", newProbe.mProbeIdx, cubeIndex);
 
    mProbesDirty = true;
 
@@ -380,7 +381,7 @@ void RenderProbeMgr::unregisterProbe(U32 probeIdx)
    mRegisteredProbes.erase(probeIdx);
 
    //rebuild our probe data
-   _setupStaticParameters();
+   mProbesDirty = true;
 }
 
 //
@@ -413,9 +414,10 @@ void RenderProbeMgr::_setupStaticParameters()
    U32 probeCount = mRegisteredProbes.size();
 
    mEffectiveProbeCount = 0;
-   mMipCount = 0;
+   mMipCount = 1;
 
    mHasSkylight = false;
+   mSkylightCubemapIdx = -1;
 
    if (probePositionsData.size() != MAXPROBECOUNT)
    {
@@ -432,21 +434,7 @@ void RenderProbeMgr::_setupStaticParameters()
    probeWorldToObjData.fill(MatrixF::Identity);
    probeBBMinData.fill(Point4F::Zero);
    probeBBMaxData.fill(Point4F::Zero);
-   probeConfigData.fill(Point4F::Zero);
-
-   cubeMaps.clear();
-   irradMaps.clear();
-   Vector<U32> cubemapIdxes;
-
-   if (probeCount != 0 && mRegisteredProbes[0].mPrefilterCubemap != nullptr)
-   {
-      //Get our mipCount
-      mMipCount = mRegisteredProbes[0].mPrefilterCubemap.getPointer()->getMipMapLevels();
-   }
-   else
-   {
-      mMipCount = 1;
-   }
+   probeConfigData.fill(Point4F(-1,0,0,0));
 
    for (U32 i = 0; i < probeCount; i++)
    {
@@ -457,12 +445,12 @@ void RenderProbeMgr::_setupStaticParameters()
       if (!curEntry.mIsEnabled)
          continue;
 
-      if (curEntry.mProbeShapeType == ProbeRenderInst::ProbeShapeType::Skylight || curEntry.mIsSkylight)
+      U32 mips = mRegisteredProbes[i].mPrefilterCubemap.getPointer()->getMipMapLevels();
+      mMipCount = mips != 0 && mips >= mMipCount ? mips : 0;
+
+      if (curEntry.mIsSkylight)
       {
-         skylightPos = curEntry.getPosition();
-         skylightPrefilterMap = curEntry.mPrefilterCubemap;
-         skylightIrradMap = curEntry.mIrradianceCubemap;
-         mHasSkylight = true;
+         mSkylightCubemapIdx = curEntry.mCubemapIndex;
          continue;
       }
 
@@ -483,32 +471,32 @@ void RenderProbeMgr::_setupStaticParameters()
          curEntry.mAtten,
          curEntry.mCubemapIndex);
 
-      cubeMaps.push_back(curEntry.mPrefilterCubemap);
-      irradMaps.push_back(curEntry.mIrradianceCubemap);
-
-      cubemapIdxes.push_back(i);
-
       mEffectiveProbeCount++;
    }
 
    mProbesDirty = false;
 }
 
-void RenderProbeMgr::updateProbeTexture(U32 probeIdx)
+void RenderProbeMgr::updateProbeTexture(ProbeRenderInst* probeInfo)
 {
-   if (probeIdx >= mRegisteredProbes.size())
+   if (probeInfo->mIrradianceCubemap.isNull() || !probeInfo->mIrradianceCubemap->isInitialized())
+   {
+      Con::errorf("RenderProbeMgr::updateProbeTexture() - tried to update a probe's texture with an invalid or uninitialized irradiance map!");
       return;
+   }
 
-   //We don't stuff skylights into the array, so we can just skip out on this if it's a skylight
-   if (mRegisteredProbes[probeIdx].mIsSkylight)
+   if (probeInfo->mPrefilterCubemap.isNull() || !probeInfo->mPrefilterCubemap->isInitialized())
+   {
+      Con::errorf("RenderProbeMgr::updateProbeTexture() - tried to update a probe's texture with an invalid or uninitialized specular map!");
       return;
+   }
 
-   const U32 cubeIndex = mRegisteredProbes[probeIdx].mCubemapIndex;
-   mIrradianceArray->updateTexture(mRegisteredProbes[probeIdx].mIrradianceCubemap, cubeIndex);
-   mPrefilterArray->updateTexture(mRegisteredProbes[probeIdx].mPrefilterCubemap, cubeIndex);
+   const U32 cubeIndex = probeInfo->mCubemapIndex;
+   mIrradianceArray->updateTexture(probeInfo->mIrradianceCubemap, cubeIndex);
+   mPrefilterArray->updateTexture(probeInfo->mPrefilterCubemap, cubeIndex);
 
-   Con::warnf("UpdatedProbeTexture - probeIdx: %u on cubeIndex %u, Irrad validity: %d, Prefilter validity: %d", probeIdx, cubeIndex, 
-      mRegisteredProbes[probeIdx].mIrradianceCubemap->isInitialized(), mRegisteredProbes[probeIdx].mPrefilterCubemap->isInitialized());
+   Con::warnf("UpdatedProbeTexture - probeIdx: %u on cubeIndex %u, Irrad validity: %d, Prefilter validity: %d", probeInfo->mProbeIdx, cubeIndex,
+      probeInfo->mIrradianceCubemap->isInitialized(), probeInfo->mPrefilterCubemap->isInitialized());
 }
 
 void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
@@ -688,7 +676,7 @@ void RenderProbeMgr::_update4ProbeConsts(const SceneData &sgData,
 
          if (curEntry.mIsSkylight)
          {
-            if (curEntry.mPrefilterCubemap.isValid() && curEntry.mPrefilterCubemap.isValid())
+            if (curEntry.mPrefilterCubemap->isInitialized() && curEntry.mIrradianceCubemap->isInitialized())
             {
                GFX->setCubeTexture(probeShaderConsts->mSkylightSpecularMap->getSamplerRegister(), curEntry.mPrefilterCubemap);
                GFX->setCubeTexture(probeShaderConsts->mSkylightIrradMap->getSamplerRegister(), curEntry.mIrradianceCubemap);
@@ -758,7 +746,7 @@ void RenderProbeMgr::render( SceneRenderState *state )
 	   _setupStaticParameters();
 
    // Early out if nothing to draw.
-   if (!RenderProbeMgr::smRenderReflectionProbes || !state->isDiffusePass() || (!mRegisteredProbes.size() || mEffectiveProbeCount == 0 || mCubeMapCount != 0 ) && !mHasSkylight)
+   if (!RenderProbeMgr::smRenderReflectionProbes || !state->isDiffusePass() || (mEffectiveProbeCount == 0 && mSkylightCubemapIdx == -1))
    {
       getProbeArrayEffect()->setSkip(true);
       return;
@@ -772,7 +760,7 @@ void RenderProbeMgr::render( SceneRenderState *state )
    // the vector light material as we use lazy creation.
    //_setupPerFrameParameters(state);
 
-      //Visualization
+   //Visualization
    String useDebugAtten = Con::getVariable("$Probes::showAttenuation", "0");
    mProbeArrayEffect->setShaderMacro("DEBUGVIZ_ATTENUATION", useDebugAtten);
 
@@ -784,36 +772,31 @@ void RenderProbeMgr::render( SceneRenderState *state )
 
    String useDebugContrib = Con::getVariable("$Probes::showProbeContrib", "0");
    mProbeArrayEffect->setShaderMacro("DEBUGVIZ_CONTRIB", useDebugContrib);
-   
-   //Array rendering
-   //U32 probeCount = mRegisteredProbes.size();
 
-   mProbeArrayEffect->setShaderConst("$hasSkylight", (float)mHasSkylight);
-   if (mHasSkylight)
-   {
-      mProbeArrayEffect->setCubemapTexture(6, skylightPrefilterMap);
-      mProbeArrayEffect->setCubemapTexture(7, skylightIrradMap);
-   }
+   if(mHasSkylight && mEffectiveProbeCount == 0)
+      mProbeArrayEffect->setShaderMacro("SKYLIGHT_ONLY", "1");
+   
+   mProbeArrayEffect->setTexture(3, mBRDFTexture);
+   mProbeArrayEffect->setCubemapArrayTexture(4, mPrefilterArray);
+   mProbeArrayEffect->setCubemapArrayTexture(5, mIrradianceArray);
 
-   mProbeArrayEffect->setShaderConst("$numProbes", (float)mEffectiveProbeCount);
+   mProbeArrayEffect->setShaderConst("$numProbes", (S32)mEffectiveProbeCount);
+   mProbeArrayEffect->setShaderConst("$skylightCubemapIdx", mSkylightCubemapIdx);
 
    mProbeArrayEffect->setShaderConst("$cubeMips", (float)mMipCount);
+
+   //also set up some colors
+   Vector<Point4F> contribColors;
+
+   contribColors.setSize(MAXPROBECOUNT);
+
    if (mEffectiveProbeCount != 0)
    {
-      mProbeArrayEffect->setTexture(3, mBRDFTexture);
-      mProbeArrayEffect->setCubemapArrayTexture(4, mPrefilterArray);
-      mProbeArrayEffect->setCubemapArrayTexture(5, mIrradianceArray);
-
       if (useDebugContrib == String("1"))
       {
          MRandomLCG RandomGen;
          RandomGen.setSeed(mEffectiveProbeCount);
 
-         //also set up some colors
-         Vector<Point4F> contribColors;
-
-         contribColors.setSize(MAXPROBECOUNT);
-
          for (U32 i = 0; i < mEffectiveProbeCount; i++)
          {
             //we're going to cheat here a little for consistent debugging behavior. The first 3 probes will always have R G and then B for their colors, every other will be random
@@ -826,11 +809,11 @@ void RenderProbeMgr::render( SceneRenderState *state )
             else
                contribColors[i] = Point4F(RandomGen.randF(0, 1), RandomGen.randF(0, 1), RandomGen.randF(0, 1), 1);
          }
-
-         mProbeArrayEffect->setShaderConst("$probeContribColors", contribColors);
       }
    }
 
+   mProbeArrayEffect->setShaderConst("$probeContribColors", contribColors);
+
    mProbeArrayEffect->setShaderConst("$inProbePosArray", probePositionsData);
    mProbeArrayEffect->setShaderConst("$inRefPosArray", probeRefPositionsData);
    mProbeArrayEffect->setShaderConst("$worldToObjArray", probeWorldToObjData);

+ 4 - 8
Engine/source/renderInstance/renderProbeMgr.h

@@ -199,13 +199,9 @@ class RenderProbeMgr : public RenderBinManager
    Vector<Point4F> probeBBMinData;
    Vector<Point4F> probeBBMaxData;
    Vector<Point4F> probeConfigData;
-   Vector<GFXCubemapHandle> cubeMaps;
-   Vector<GFXCubemapHandle> irradMaps;
 
-   bool mHasSkylight;
-   GFXCubemapHandle skylightIrradMap;
-   GFXCubemapHandle skylightPrefilterMap;
-   Point4F          skylightPos;
+   bool            mHasSkylight;
+   S32             mSkylightCubemapIdx;
 
    AlignedArray<Point4F> mProbePositions;
    AlignedArray<Point4F> mProbeBBMin;
@@ -286,7 +282,7 @@ public:
    /// Returns the active LM.
    static inline RenderProbeMgr* getProbeManager();
 
-   ProbeRenderInst* registerProbe(const bool& isSkylight);
+   ProbeRenderInst* registerProbe();
    void unregisterProbe(U32 probeIdx);
 
    virtual void setProbeInfo(ProcessedMaterial *pmat,
@@ -296,7 +292,7 @@ public:
 	   U32 pass,
 	   GFXShaderConstBuffer *shaderConsts);
 
-   void updateProbeTexture(U32 probeIdx);
+   void updateProbeTexture(ProbeRenderInst* probeInfo);
 
    /// Debug rendering
    static bool smRenderReflectionProbes;

+ 1 - 1
Engine/source/util/settings.cpp

@@ -709,4 +709,4 @@ DefineEngineMethod(Settings, clearGroups, void, (), , "settingObj.clearGroups();
 DefineEngineMethod(Settings, getCurrentGroups, const char*, (), , "settingObj.getCurrentGroups();")
 {
    return object->getCurrentGroups();
-}
+}

+ 3 - 0
Templates/BaseGame/game/core/Core.cs

@@ -27,6 +27,9 @@ function CoreModule::onCreate(%this)
    ModuleDatabase.LoadExplicit( "Core_GameObjects" );
    ModuleDatabase.LoadExplicit( "Core_ClientServer" );
    
+   new Settings(ProjectSettings) { file = "core/settings.xml"; };
+   ProjectSettings.read();
+   
    %prefPath = getPrefpath();
    if ( isFile( %prefPath @ "/clientPrefs.cs" ) )
       exec( %prefPath @ "/clientPrefs.cs" );

+ 0 - 6
Templates/BaseGame/game/core/lighting/scripts/advancedLighting_Init.cs

@@ -47,18 +47,12 @@ function onActivateAdvancedLM()
    // Enable the offscreen target so that AL will work
    // with MSAA back buffers and for HDR rendering.   
    AL_FormatToken.enable();
-     
-   // Activate Deferred Shading
-   AL_DeferredShading.enable();
 }
 
 function onDeactivateAdvancedLM()
 {
    // Disable the offscreen render target.
    AL_FormatToken.disable();
-      
-   // Deactivate Deferred Shading
-   AL_DeferredShading.disable();
 }
 
 function setAdvancedLighting()

+ 0 - 5
Templates/BaseGame/game/core/lighting/scripts/advancedLighting_Shaders.cs

@@ -322,8 +322,6 @@ singleton ShaderData( PFX_ReflectionProbeArray )
    samplerNames[3] = "$BRDFTexture";
    samplerNames[4] = "$specularCubemapAR";
    samplerNames[5] = "$irradianceCubemapAR";
-   samplerNames[6] = "$skylightSpecularMap";
-   samplerNames[7] = "$skylightIrradMap";
 
    pixVersion = 2.0;
 };  
@@ -345,7 +343,6 @@ singleton GFXStateBlockData( PFX_ReflectionProbeArrayStateBlock )
    zEnable = false;
    zWriteEnable = false;
    
-   
    samplersDefined = true;
    samplerStates[0] = SamplerClampPoint;
    samplerStates[1] = SamplerClampPoint;
@@ -353,6 +350,4 @@ singleton GFXStateBlockData( PFX_ReflectionProbeArrayStateBlock )
    samplerStates[3] = SamplerClampPoint;
    samplerStates[4] = SamplerClampLinear;
    samplerStates[5] = SamplerClampLinear;
-   samplerStates[6] = SamplerClampLinear;
-   samplerStates[7] = SamplerClampLinear;
 };

+ 26 - 20
Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl

@@ -19,7 +19,8 @@ uniform vec3 eyePosWorld;
 //cubemap arrays require all the same size. so shared mips# value
 uniform float cubeMips;
 
-uniform float numProbes;
+uniform int numProbes;
+
 uniform samplerCubeArray specularCubemapAR;
 uniform samplerCubeArray irradianceCubemapAR;
 
@@ -34,9 +35,7 @@ uniform vec4    probeConfigData[MAX_PROBES];   //r,g,b/mode,radius,atten
 uniform vec4    probeContribColors[MAX_PROBES];
 #endif
 
-uniform samplerCube skylightSpecularMap;
-uniform samplerCube skylightIrradMap;
-uniform float hasSkylight;
+uniform float skylightCubemapIdx;
 
 out vec4 OUT_col;
 
@@ -56,6 +55,7 @@ void main()
 
    float alpha = 1;
 
+#if SKYLIGHT_ONLY == 0
    int i = 0;
    float blendFactor[MAX_PROBES];
    float blendSum = 0;
@@ -64,8 +64,9 @@ void main()
    float probehits = 0;
    //Set up our struct data
    float contribution[MAX_PROBES];
-   if (alpha > 0)
-   {
+
+   //if (alpha > 0)
+   //{
       //Process prooooobes
       for (i = 0; i < numProbes; ++i)
       {
@@ -83,6 +84,8 @@ void main()
             if (contribution[i]>0.0)
                probehits++;
          }
+         else
+            continue;
 
          contribution[i] = max(contribution[i],0);
 
@@ -106,20 +109,21 @@ void main()
             }
 
       // Normalize blendVal
-#if DEBUGVIZ_ATTENUATION == 0 //this can likely be removed when we fix the above normalization behavior
-            if (blendFacSum == 0.0f) // Possible with custom weight
-            {
-                  blendFacSum = 1.0f;
-            }
-#endif
+	    if (blendFacSum == 0.0f) // Possible with custom weight
+	    {
+	          blendFacSum = 1.0f;
+	    }
 
             float invBlendSumWeighted = 1.0f / blendFacSum;
             for (i = 0; i < numProbes; ++i)
             {
                   blendFactor[i] *= invBlendSumWeighted;
                   contribution[i] *= blendFactor[i];
+                  alpha -= contribution[i];
             }
       }
+      else
+         alpha -= blendSum;
       
 #if DEBUGVIZ_ATTENUATION == 1
       float contribAlpha = 1;
@@ -142,12 +146,14 @@ void main()
       }
 
       //Skylight coloration for anything not covered by probes above
-      finalContribColor += vec3(0.3, 0.3, 0.3) * contribAlpha;
+      if(skylightCubemapIdx != -1)
+      	finalContribColor += vec3(0.3, 0.3, 0.3) * contribAlpha;
 
       OUT_col = vec4(finalContribColor, 1);
       return;
 #endif
-   }
+   //}
+#endif
 
    vec3 irradiance = vec3(0, 0, 0);
    vec3 specular = vec3(0, 0, 0);
@@ -159,27 +165,27 @@ void main()
    float lod = 0;
 #endif
 
+#if SKYLIGHT_ONLY == 0
    alpha = 1;
    for (i = 0; i < numProbes; ++i)
    {
       float contrib = contribution[i];
       if (contrib != 0)
       {
-         float cubemapIdx = probeConfigData[i].a;
+         int cubemapIdx = probeConfigData[i].a;
          vec3 dir = boxProject(surface.P, surface.R, worldToObjArray[i], bbMinArray[i].xyz, bbMaxArray[i].xyz, inRefPosArray[i].xyz);
 
          irradiance += textureLod(irradianceCubemapAR, vec4(dir, cubemapIdx), 0).xyz * contrib;
          specular += textureLod(specularCubemapAR, vec4(dir, cubemapIdx), lod).xyz * contrib;
-         //irradiance += vec3(1,1,1) * contrib;
-         //specular += vec3(1,1,1) * contrib;
          alpha -= contrib;
       }
    }
+#endif
 
-   if (hasSkylight == 1 && alpha > 0.001)
+   if (skylightCubemapIdx != -1 && alpha > 0.001)
    {
-      irradiance += textureLod(skylightIrradMap, surface.R, 0).xyz * alpha;
-      specular += textureLod(skylightSpecularMap, surface.R, lod).xyz * alpha;
+      irradiance += textureLod(irradianceCubemapAR, vec4(surface.R, skylightCubemapIdx), 0).xyz * alpha;
+      specular += textureLod(specularCubemapAR, vec4(surface.R, skylightCubemapIdx), lod).xyz * alpha;
    }
 
 #if DEBUGVIZ_SPECCUBEMAP == 1 && DEBUGVIZ_DIFFCUBEMAP == 0

+ 42 - 38
Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl

@@ -16,7 +16,8 @@ uniform float3 eyePosWorld;
 //cubemap arrays require all the same size. so shared mips# value
 uniform float cubeMips;
 
-uniform float numProbes;
+uniform int numProbes;
+
 TORQUE_UNIFORM_SAMPLERCUBEARRAY(specularCubemapAR, 4);
 TORQUE_UNIFORM_SAMPLERCUBEARRAY(irradianceCubemapAR, 5);
 
@@ -31,9 +32,7 @@ uniform float4    probeConfigData[MAX_PROBES];   //r,g,b/mode,radius,atten
 uniform float4    probeContribColors[MAX_PROBES];
 #endif
 
-TORQUE_UNIFORM_SAMPLERCUBE(skylightSpecularMap, 6);
-TORQUE_UNIFORM_SAMPLERCUBE(skylightIrradMap, 7);
-uniform float hasSkylight;
+uniform float skylightCubemapIdx;
 
 float4 main(PFXVertToPix IN) : SV_TARGET
 {
@@ -47,11 +46,12 @@ float4 main(PFXVertToPix IN) : SV_TARGET
    //early out if emissive
    if (getFlag(surface.matFlag, 0))
    {
-      discard;
+      return TORQUE_TEX2D(colorBuffer, IN.uv0.xy);
    }
 
    float alpha = 1;
 
+#if SKYLIGHT_ONLY == 0
    int i = 0;
    float blendFactor[MAX_PROBES];
    float blendSum = 0;
@@ -60,8 +60,9 @@ float4 main(PFXVertToPix IN) : SV_TARGET
    float probehits = 0;
    //Set up our struct data
    float contribution[MAX_PROBES];
-   if (alpha > 0)
-   {
+
+   //if (alpha > 0)
+   //{
       //Process prooooobes
       for (i = 0; i < numProbes; ++i)
       {
@@ -79,6 +80,8 @@ float4 main(PFXVertToPix IN) : SV_TARGET
             if (contribution[i]>0.0)
                probehits++;
          }
+         else
+            continue;
 
          contribution[i] = max(contribution[i],0);
 
@@ -91,34 +94,32 @@ float4 main(PFXVertToPix IN) : SV_TARGET
 	   // Weight1 = normalized inverted NDF, so we have 1 at center, 0 at boundary
 	   // and respect constraint A.
       
-      if (probehits>1.0)
-	{
-            for (i = 0; i < numProbes; i++)
-            {
-                  blendFactor[i] = ((contribution[i] / blendSum)) / probehits;
-                  blendFactor[i] *= ((contribution[i]) / invBlendSum);
-                  blendFactor[i] = saturate(blendFactor[i]);
-                  blendFacSum += blendFactor[i];
-            }
-
-      // Normalize blendVal
-#if DEBUGVIZ_ATTENUATION == 0 //this can likely be removed when we fix the above normalization behavior
-            if (blendFacSum == 0.0f) // Possible with custom weight
-            {
-                  blendFacSum = 1.0f;
-            }
-#endif
+      if (probehits > 1.0)
+	  {
+         for (i = 0; i < numProbes; i++)
+         {
+               blendFactor[i] = ((contribution[i] / blendSum)) / probehits;
+               blendFactor[i] *= ((contribution[i]) / invBlendSum);
+               blendFactor[i] = saturate(blendFactor[i]);
+               blendFacSum += blendFactor[i];
+         }
+
+         // Normalize blendVal
+         if (blendFacSum == 0.0f) // Possible with custom weight
+         {
+               blendFacSum = 1.0f;
+         }
 
-            float invBlendSumWeighted = 1.0f / blendFacSum;
-            for (i = 0; i < numProbes; ++i)
-            {
-                  blendFactor[i] *= invBlendSumWeighted;
-                  contribution[i] *= blendFactor[i];
-                  alpha -= contribution[i];
-            }
+         float invBlendSumWeighted = 1.0f / blendFacSum;
+         for (i = 0; i < numProbes; ++i)
+         {
+               blendFactor[i] *= invBlendSumWeighted;
+               contribution[i] *= blendFactor[i];
+               alpha -= contribution[i];
+         }
       }
       else
-            alpha -= blendSum;
+         alpha -= blendSum;
       
 #if DEBUGVIZ_ATTENUATION == 1
       float contribAlpha = 1;
@@ -140,11 +141,13 @@ float4 main(PFXVertToPix IN) : SV_TARGET
       }
 
       //Skylight coloration for anything not covered by probes above
-      finalContribColor += float3(0.3, 0.3, 0.3) * contribAlpha;
+      if(skylightCubemapIdx != -1)
+         finalContribColor += float3(0.3, 0.3, 0.3) * contribAlpha;
 
       return float4(finalContribColor, 1);
 #endif
-   }
+   //}
+#endif
 
    float3 irradiance = float3(0, 0, 0);
    float3 specular = float3(0, 0, 0);
@@ -156,6 +159,7 @@ float4 main(PFXVertToPix IN) : SV_TARGET
    float lod = 0;
 #endif
 
+#if SKYLIGHT_ONLY == 0
    alpha = 1;
    for (i = 0; i < numProbes; ++i)
    {
@@ -170,11 +174,12 @@ float4 main(PFXVertToPix IN) : SV_TARGET
          alpha -= contrib;
       }
    }
+#endif
 
-   if (hasSkylight && alpha > 0.001)
+   if(skylightCubemapIdx != -1 && alpha >= 0.001)
    {
-      irradiance += TORQUE_TEXCUBELOD(skylightIrradMap, float4(surface.R, 0)).xyz * alpha;
-      specular += TORQUE_TEXCUBELOD(skylightSpecularMap, float4(surface.R, lod)).xyz * alpha;
+      irradiance += TORQUE_TEXCUBEARRAYLOD(irradianceCubemapAR, surface.R, skylightCubemapIdx, 0).xyz * alpha;
+      specular += TORQUE_TEXCUBEARRAYLOD(specularCubemapAR, surface.R, skylightCubemapIdx, lod).xyz * alpha;
    }
 
 #if DEBUGVIZ_SPECCUBEMAP == 1 && DEBUGVIZ_DIFFCUBEMAP == 0
@@ -198,6 +203,5 @@ float4 main(PFXVertToPix IN) : SV_TARGET
    float3 diffuse = kD * irradiance * surface.baseColor.rgb;
    float4 finalColor = float4(diffuse + specular * surface.ao, 1.0);
 
-//finalColor.rgb += abs(surface.N);
    return finalColor;
 }

+ 13 - 0
Templates/BaseGame/game/core/settings.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<ProjectSettings>
+    <Group name="AssetManagement">
+        <Group name="Modules">
+            <Setting name="coreModulePath">core/</Setting>
+        </Group>
+    </Group>
+    <Group name="Gameplay">
+        <Group name="GameModes">
+            <Setting name="defaultModeName">a</Setting>
+        </Group>
+    </Group>
+</ProjectSettings>

二進制
Templates/BaseGame/game/data/ui/art/optionsMenuSliderBitmapArray.png


二進制
Templates/BaseGame/game/data/ui/art/slider - Copy.png


+ 3 - 1
Templates/BaseGame/game/data/ui/scripts/guis/graphicsMenuSettingsSlider.taml

@@ -89,7 +89,9 @@
             isContainer="false"
             internalName="slider"
             canSave="true"
-            canSaveDynamicFields="false" />
+            canSaveDynamicFields="false" 
+            renderTicks="false"
+            useFillBar="true" />
         <GuiTextCtrl
             text="5"
             maxLength="1024"

+ 68 - 4
Templates/BaseGame/game/data/ui/scripts/optionsMenu.cs

@@ -66,34 +66,38 @@ function OptionsMenu::onWake(%this)
    %array = OptionsSettingStack;
    %array.clear();
    
-   %controllerMenuBtn = new GuiButtonCtrl(){
+   %keyboardMenuBtn = new GuiButtonCtrl(){
       text = "Keyboard and Mouse";
       profile = GuiMenuButtonProfile;
       extent = %array.extent.x SPC "35";
    };
    
-   %displayMenuBtn = new GuiButtonCtrl(){
+   %controllerMenuBtn = new GuiButtonCtrl(){
       text = "Controller";
       profile = GuiMenuButtonProfile;
       extent = %array.extent.x SPC "35";
+      command="DisplayMenu::loadSettings();";
    };
    
-   %keyboardMenuBtn = new GuiButtonCtrl(){
+   %displayMenuBtn = new GuiButtonCtrl(){
       text = "Display";
       profile = GuiMenuButtonProfile;
       extent = %array.extent.x SPC "35";
+      command="DisplayMenu::loadSettings();";
    };
    
    %graphicsMenuBtn = new GuiButtonCtrl(){
       text = "Graphics";
       profile = GuiMenuButtonProfile;
       extent = %array.extent.x SPC "35";
+      command="GraphicsMenu::loadSettings();";
    };
    
    %audioMenuBtn = new GuiButtonCtrl(){
       text = "Audio";
       profile = GuiMenuButtonProfile;
       extent = %array.extent.x SPC "35";
+      command="AudioMenu::loadSettings();";
    };
    
    %gameplayMenuBtn = new GuiButtonCtrl(){
@@ -236,7 +240,7 @@ function OptionsMenu::addSettingOption(%this, %arrayTarget, %optionName, %defaul
     return %option;
 }
 
-function OptionsMenu::addSliderOption(%this, %arrayTarget, %optionName, %variable, %range, %ticks,  %value, %class)
+function OptionsMenu::addSliderOption(%this, %arrayTarget, %optionName, %variable, %range, %ticks, %value, %class)
 {
     %option = TAMLRead("data/ui/scripts/guis/graphicsMenuSettingsSlider.taml");
     
@@ -620,3 +624,63 @@ function AudioMenuSoundDevice::onSelect( %this, %id, %text )
                                              SPC $pref::SFX::device 
                                              SPC $pref::SFX::useHardware );                                             
 }
+
+//==============================================================================
+// DISPLAY MENU
+//==============================================================================
+function DisplayMenu::loadSettings()
+{
+   OptionsSettingStack.clear();
+   
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Resolution", "1024 x 768", "", $pref::Video::Resolution);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Full Screen", "Off", "", $pref::Video::FullScreen);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Refresh Rate", "60", "", $pref::Video::RefreshRate);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "VSync", "Off", "", $pref::Video::Vsync);
+   
+   OptionsMenu.addSliderOption(OptionsSettingStack, "Field of View", $pref::Video::FOV, "65 120", 55, 75);
+   
+   OptionsMenu.addSliderOption(OptionsSettingStack, "Brightness", $pref::Video::Brightness, "0 1", 10, 5);
+   OptionsMenu.addSliderOption(OptionsSettingStack, "Contrast", $pref::Video::Contrast, "0 1", 10, 5);
+}
+
+//==============================================================================
+// GRAPHICS MENU
+//==============================================================================
+function GraphicsMenu::loadSettings()
+{
+   OptionsSettingStack.clear();
+   
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Shadow Quality", "High", "", $pref::Video::Resolution);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Shadow Caching", "Off", "", $pref::Video::FullScreen);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Soft Shadows", "60", "", $pref::Video::RefreshRate);
+   
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Model Detail", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSliderOption(OptionsSettingStack, "Texture Detail", $pref::Video::FOV, "65 120", 55, 75);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Terrain Detail", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Decal Lifetime", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Ground Clutter Density", "Off", "", $pref::Video::Vsync);
+   
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Material Quality", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "HDR", "Off", "", $pref::Video::Vsync);   
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Parallax", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Ambient Occlusion", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Light Rays", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Depth of Field", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Vignetting", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Water Reflections", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Anti Aliasing", "Off", "", $pref::Video::Vsync);
+   OptionsMenu.addSettingOption(OptionsSettingStack, "Anisotropic Filtering", "Off", "", $pref::Video::Vsync);
+}
+
+//==============================================================================
+// AUDIO MENU
+//==============================================================================
+function AudioMenu::loadSettings()
+{
+   OptionsSettingStack.clear();
+   
+   OptionsMenu.addSliderOption(OptionsSettingStack, "Master Volume", $pref::Video::Brightness, "0 1", 10, 5);
+   OptionsMenu.addSliderOption(OptionsSettingStack, "Menu Volume", $pref::Video::Brightness, "0 1", 10, 5);
+   OptionsMenu.addSliderOption(OptionsSettingStack, "Effects Volume", $pref::Video::Brightness, "0 1", 10, 5);
+   OptionsMenu.addSliderOption(OptionsSettingStack, "Music Volume", $pref::Video::Brightness, "0 1", 10, 5);
+}

+ 7 - 0
Templates/BaseGame/game/data/ui/scripts/profiles.cs

@@ -426,4 +426,11 @@ new GuiControlProfile(GuiMenuScrollProfile)
    bitmap = "./images/scrollBar";
    hasBitmapArray = true;
    category = "Core";
+};
+
+singleton GuiControlProfile(SliderBitmapGUIProfile)
+{
+   bitmap = "data/ui/art/optionsMenuSliderBitmapArray.png";
+   hasBitmapArray = true;
+   opaque = false;
 };

+ 34 - 0
Templates/BaseGame/game/tools/assetBrowser/_assetImportConfigs.xml

@@ -0,0 +1,34 @@
+<AssetImportConfigs>
+    <Config Name="TestConfig">
+        <Mesh ImportMesh="1" DoUpAxisOverride="0" UpAxisOverride="Z_AXIS" DoScaleOverride="0" ScaleOverride="1" IgnoreNodeScale="0" AdjustCenter="0" AdjustFloor="1" CollapseSubmeshes="0" LODType="TrailingNumber" ImportedNodes="" IgnoreNodes="" ImportMeshes="" IgnoreMeshes="" />
+        <Materials ImportMaterials="1" IgnoreMaterials="" CreateComposites="1" UseDiffuseSuffixOnOriginImg="1" UseExistingMaterials="1" />
+        <Animations ImportAnimations="1" SeparateAnimations="1" SeparateAnimationPrefix="" />
+        <Collisions GenerateCollisions="1" GenCollisionType="CollisionMesh" CollisionMeshPrefix="Col" GenerateLOSCollisions="1" GenLOSCollisionType="CollisionMesh" LOSCollisionMeshPrefix="LOS" />
+        <Images ImageType="GUI" DiffuseTypeSuffixes="_ALBEDO,_DIFFUSE,_ALB,_DIF,_Base_Color,_COLOR,_COL" NormalTypeSuffixes="_NORMAL,_NORM" SpecularTypeSuffixes="_SPECULAR,_SPEC" MetalnessTypeSuffixes="_METAL,_MET,_METALNESS,_METALLIC" RoughnessTypeSuffixes="_ROUGH,_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH,_SMOOTHNESS" AOTypeSuffixes="_AO,_AMBIENT,_AMBIENTOCCLUSION,_Ambient_Occlusion" CompositeTypeSuffixes="_COMP,_COMPOSITE" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="1" PopulateMaterialMaps="1" />
+        <Sounds VolumeAdjust="1" PitchAdjust="1" Compressed="0" />
+    </Config>
+    <Config Name="SecondTest">
+        <Mesh ImportMesh="1" DoUpAxisOverride="0" UpAxisOverride="Z_AXIS" DoScaleOverride="0" ScaleOverride="1" IgnoreNodeScale="0" AdjustCenter="0" AdjustFloor="0" CollapseSubmeshes="0" LODType="TrailingNumber" ImportedNodes="" IgnoreNodes="" ImportMeshes="" IgnoreMeshes="" />
+        <Materials ImportMaterials="1" IgnoreMaterials="" CreateComposites="1" UseDiffuseSuffixOnOriginImg="" UseExistingMaterials="" />
+        <Animations ImportAnimations="1" SeparateAnimations="1" SeparateAnimationPrefix="" />
+        <Collisions GenerateCollisions="1" GenCollisionType="CollisionMesh" CollisionMeshPrefix="Col" GenerateLOSCollisions="1" GenLOSCollisionType="CollisionMesh" LOSCollisionMeshPrefix="LOS" />
+        <Images ImageType="N/A" DiffuseTypeSuffixes="_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL" NormalTypeSuffixes="_NORMAL,_NORM" SpecularTypeSuffixes="_SPECULAR,_SPEC" MetalnessTypeSuffixes="_METAL,_MET,_METALNESS,_METALLIC" RoughnessTypeSuffixes="_ROUGH,_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH,_SMOOTHNESS" AOTypeSuffixes="_AO,_AMBIENT,_AMBIENTOCCLUSION" CompositeTypeSuffixes="_COMP,_COMPOSITE" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="" PopulateMaterialMaps="" />
+        <Sounds VolumeAdjust="1" PitchAdjust="1" Compressed="0" />
+    </Config>
+    <Config Name="GUI_Image_Import">
+        <Mesh ImportMesh="0" DoUpAxisOverride="0" UpAxisOverride="Z_AXIS" DoScaleOverride="0" ScaleOverride="1" IgnoreNodeScale="0" AdjustCenter="0" AdjustFloor="0" CollapseSubmeshes="0" LODType="TrailingNumber" ImportedNodes="" IgnoreNodes="" ImportMeshes="" IgnoreMeshes="" />
+        <Materials ImportMaterials="0" IgnoreMaterials="" CreateComposites="1" UseDiffuseSuffixOnOriginImg="1" UseExistingMaterials="1" />
+        <Animations ImportAnimations="0" SeparateAnimations="1" SeparateAnimationPrefix="" />
+        <Collisions GenerateCollisions="0" GenCollisionType="CollisionMesh" CollisionMeshPrefix="Col" GenerateLOSCollisions="1" GenLOSCollisionType="CollisionMesh" LOSCollisionMeshPrefix="LOS" />
+        <Images ImageType="GUI" DiffuseTypeSuffixes="_ALBEDO;_DIFFUSE;_ALB;_DIF;_COLOR;_COL;_BASECOLOR;_BASE_COLOR" NormalTypeSuffixes="_NORMAL;_NORM" SpecularTypeSuffixes="_SPECULAR;_SPEC" MetalnessTypeSuffixes="_METAL;_MET;_METALNESS;_METALLIC" RoughnessTypeSuffixes="_ROUGH;_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH;_SMOOTHNESS" AOTypeSuffixes="_AO;_AMBIENT;_AMBIENTOCCLUSION" CompositeTypeSuffixes="_COMP;_COMPOSITE" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="0" PopulateMaterialMaps="0" />
+        <Sounds VolumeAdjust="1" PitchAdjust="1" Compressed="0" />
+    </Config>
+    <Config Name="CogflictsMesh">
+        <Mesh ImportMesh="1" DoUpAxisOverride="0" UpAxisOverride="Z_AXIS" DoScaleOverride="0" ScaleOverride="1" IgnoreNodeScale="0" AdjustCenter="0" AdjustFloor="0" CollapseSubmeshes="0" LODType="TrailingNumber" ImportedNodes="" IgnoreNodes="" ImportMeshes="" IgnoreMeshes="" />
+        <Materials ImportMaterials="1" IgnoreMaterials="ColorEffect*;" CreateComposites="1" UseDiffuseSuffixOnOriginImg="1" UseExistingMaterials="1" />
+        <Animations ImportAnimations="1" SeparateAnimations="1" SeparateAnimationPrefix="" />
+        <Collisions GenerateCollisions="1" GenCollisionType="CollisionMesh" CollisionMeshPrefix="Col" GenerateLOSCollisions="1" GenLOSCollisionType="CollisionMesh" LOSCollisionMeshPrefix="LOS" />
+        <Images ImageType="N/A" DiffuseTypeSuffixes="_ALBEDO;_DIFFUSE;_ALB;_DIF;_COLOR;_COL;_BASECOLOR;_BASE_COLOR;_Al" NormalTypeSuffixes="_NORMAL;_NORM;_N" SpecularTypeSuffixes="_SPECULAR;_SPEC" MetalnessTypeSuffixes="_METAL;_MET;_METALNESS;_METALLIC" RoughnessTypeSuffixes="_ROUGH;_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH;_SMOOTHNESS" AOTypeSuffixes="_AO;_AMBIENT;_AMBIENTOCCLUSION" CompositeTypeSuffixes="_COMP;_COMPOSITE;_C" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="1" PopulateMaterialMaps="1" />
+        <Sounds VolumeAdjust="1" PitchAdjust="1" Compressed="0" />
+    </Config>
+</AssetImportConfigs>

+ 6 - 6
Templates/BaseGame/game/tools/assetBrowser/guis/assetBrowser.gui

@@ -323,7 +323,7 @@
          minExtent = "64 64";
          horizSizing = "relative";
          vertSizing = "height";
-         profile = "GuiDefaultProfile";
+         profile = "ToolsGuiDefaultProfile";
          visible = "1";
          active = "1";
          tooltipProfile = "GuiToolTipProfile";
@@ -345,7 +345,7 @@
             minExtent = "16 16";
             horizSizing = "right";
             vertSizing = "bottom";
-            profile = "GuiDefaultProfile";
+            profile = "ToolsGuiDefaultProfile";
             visible = "1";
             active = "1";
             tooltipProfile = "GuiToolTipProfile";
@@ -414,7 +414,7 @@
                   minExtent = "8 2";
                   horizSizing = "right";
                   vertSizing = "bottom";
-                  profile = "GuiDefaultProfile";
+                  profile = "ToolsGuiDefaultProfile";
                   visible = "1";
                   active = "1";
                   command = "AssetBrowser.showFilterPopup();";
@@ -530,7 +530,7 @@
             minExtent = "16 16";
             horizSizing = "right";
             vertSizing = "bottom";
-            profile = "GuiDefaultProfile";
+            profile = "ToolsGuiDefaultProfile";
             visible = "1";
             active = "1";
             tooltipProfile = "GuiToolTipProfile";
@@ -657,7 +657,7 @@
                   minExtent = "8 2";
                   horizSizing = "right";
                   vertSizing = "bottom";
-                  profile = "GuiDefaultProfile";
+                  profile = "ToolsGuiDefaultProfile";
                   visible = "1";
                   active = "1";
                   command = "AssetBrowser.toggleTagFilterPopup();";
@@ -798,7 +798,7 @@
                         minExtent = "8 2";
                         horizSizing = "right";
                         vertSizing = "bottom";
-                        profile = "GuiDefaultProfile";
+                        profile = "ToolsGuiDefaultProfile";
                         visible = "1";
                         active = "1";
                         tooltipProfile = "GuiToolTipProfile";

+ 3 - 3
Templates/BaseGame/game/tools/assetBrowser/guis/assetImport.gui

@@ -85,7 +85,7 @@
          minExtent = "8 2";
          horizSizing = "width";
          vertSizing = "height";
-         profile = "GuiScrollProfile";
+         profile = "ToolsGuiScrollProfile";
          visible = "1";
          active = "1";
          tooltipProfile = "GuiToolTipProfile";
@@ -243,7 +243,7 @@
          minExtent = "8 2";
          horizSizing = "width";
          vertSizing = "height";
-         profile = "GuiScrollProfile";
+         profile = "ToolsGuiScrollProfile";
          visible = "1";
          active = "1";
          tooltipProfile = "GuiToolTipProfile";
@@ -574,7 +574,7 @@
          minExtent = "8 2";
          horizSizing = "width";
          vertSizing = "height";
-         profile = "GuiScrollProfile";
+         profile = "ToolsGuiScrollProfile";
          visible = "1";
          active = "1";
          tooltipProfile = "GuiToolTipProfile";

+ 1 - 1
Templates/BaseGame/game/tools/assetBrowser/guis/editAsset.gui

@@ -66,7 +66,7 @@
          minExtent = "8 2";
          horizSizing = "right";
          vertSizing = "bottom";
-         profile = "GuiScrollProfile";
+         profile = "Tools";
          visible = "1";
          active = "1";
          tooltipProfile = "GuiToolTipProfile";

+ 1 - 1
Templates/BaseGame/game/tools/assetBrowser/guis/editModule.gui

@@ -66,7 +66,7 @@
          minExtent = "8 2";
          horizSizing = "right";
          vertSizing = "bottom";
-         profile = "GuiScrollProfile";
+         profile = "ToolsGuiScrollProfile";
          visible = "1";
          active = "1";
          tooltipProfile = "GuiToolTipProfile";

+ 1 - 1
Templates/BaseGame/game/tools/assetBrowser/guis/newAsset.gui

@@ -196,7 +196,7 @@
          minExtent = "8 2";
          horizSizing = "right";
          vertSizing = "bottom";
-         profile = "GuiScrollProfile";
+         profile = "ToolsGuiScrollProfile";
          visible = "1";
          active = "1";
          tooltipProfile = "GuiToolTipProfile";

+ 1 - 0
Templates/BaseGame/game/tools/assetBrowser/main.cs

@@ -22,6 +22,7 @@
 if( !isObject( ToolsGuiDefaultNonModalProfile ) )
 new GuiControlProfile (ToolsGuiDefaultNonModalProfile : ToolsGuiDefaultProfile)
 {
+   opaque = false;
    modal = false;
 };
 

+ 1 - 1
Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.cs

@@ -150,7 +150,7 @@ function AssetBrowser::showDialog( %this, %AssetTypeFilter, %selectCallback, %ta
    AssetBrowser.fieldTargetObject = %targetObj;
    AssetBrowser.fieldTargetName = %fieldName;
 
-   Canvas.add(AssetBrowser);
+   Canvas.pushDialog(AssetBrowser);
    AssetBrowser.setVisible(1);
    AssetBrowserWindow.setVisible(1);
    AssetBrowserWindow.selectWindow();

+ 12 - 11
Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs

@@ -497,6 +497,9 @@ function ImportAssetWindow::onWake(%this)
       return;
       
    $AssetBrowser::importConfigsFile = "tools/assetBrowser/assetImportConfigs.xml";
+   $AssetBrowser::currentImportConfig = "";
+   new Settings(AssetImportSettings) { file = $AssetBrowser::importConfigsFile; };
+   AssetImportSettings.read();
    
    %this.reloadImportOptionConfigs();
 }
@@ -510,17 +513,15 @@ function ImportAssetWindow::reloadImportOptionConfigs(%this)
    if(%xmlDoc.loadFile($AssetBrowser::importConfigsFile))
    {
       //StateMachine element
-      %xmlDoc.pushFirstChildElement("AssetImportConfigs");
+      %xmlDoc.pushFirstChildElement("AssetImportSettings");
       
-      //Configs
+      //Config Groups
       %configCount = 0;
       while(%xmlDoc.pushChildElement(%configCount))
       {
-         %configObj = new ScriptObject(){};
-         
-         %configObj.Name = %xmlDoc.attribute("Name");
+         %configName = %xmlDoc.attribute("name");
 
-         %xmlDoc.pushFirstChildElement("Mesh");
+         /*%xmlDoc.pushFirstChildElement("Mesh");
             %configObj.ImportMesh = %xmlDoc.attribute("ImportMesh");
             %configObj.DoUpAxisOverride = %xmlDoc.attribute("DoUpAxisOverride");
             %configObj.UpAxisOverride = %xmlDoc.attribute("UpAxisOverride");
@@ -583,12 +584,12 @@ function ImportAssetWindow::reloadImportOptionConfigs(%this)
             %configObj.VolumeAdjust = %xmlDoc.attribute("VolumeAdjust");
             %configObj.PitchAdjust = %xmlDoc.attribute("PitchAdjust");
             %configObj.Compressed = %xmlDoc.attribute("Compressed");
-         %xmlDoc.popElement();
+         %xmlDoc.popElement();*/
          
          %xmlDoc.popElement();
          %configCount++;
          
-         ImportAssetWindow.importConfigsList.add(%configObj);
+         ImportAssetWindow.importConfigsList.add(%configName);
       }
       
       %xmlDoc.popElement();
@@ -596,8 +597,8 @@ function ImportAssetWindow::reloadImportOptionConfigs(%this)
    
    for(%i = 0; %i < ImportAssetWindow.importConfigsList.count(); %i++)
    {
-      %configObj = ImportAssetWindow.importConfigsList.getKey(%i);
-      ImportAssetConfigList.add(%configObj.Name);
+      %configName = ImportAssetWindow.importConfigsList.getKey(%i);
+      ImportAssetConfigList.add(%configName);
    }
    
    %importConfigIdx = ImportAssetWindow.activeImportConfigIndex;
@@ -607,7 +608,7 @@ function ImportAssetWindow::reloadImportOptionConfigs(%this)
    ImportAssetConfigList.setSelected(%importConfigIdx);
 }
 
-function ImportAssetWindow::setImportOptions(%this, %optionsObj)
+function ImportAssetWindow::setImportOptions(%this, %configName)
 {
    //Todo, editor + load from files for preconfigs
    

+ 1 - 1
Templates/BaseGame/game/tools/convexEditor/convexEditorToolbar.ed.gui

@@ -114,7 +114,7 @@
       canSaveDynamicFields = "0";
       Enabled = "1";
       isContainer = "1";
-      Profile = "menubarProfile";
+      Profile = "ToolsMenubarProfile";
       HorizSizing = "width";
       VertSizing = "bottom";
       Position = "195 0";

二進制
Templates/BaseGame/game/tools/editorClasses/gui/images/rollout.png


+ 0 - 51
Templates/BaseGame/game/tools/editorClasses/gui/panels/navPanelProfiles.ed.cs

@@ -28,7 +28,6 @@ singleton GuiControlProfile (NavPanelProfile)
    category = "Editor";
 };
 
-
 singleton GuiControlProfile (NavPanel : NavPanelProfile) 
 {
    bitmap = "./navPanel";
@@ -64,53 +63,3 @@ singleton GuiControlProfile (NavPanelYellow : NavPanelProfile)
    bitmap = "./navPanel_yellow";
    category = "Editor";
 };
-singleton GuiControlProfile (menubarProfile : NavPanelProfile) 
-{
-   bitmap = "./menubar";
-   category = "Editor";
-   
-   fillColor = "48 48 48";
-   fontColor = "215 215 215";
-   fontColorHL = "150 150 150";
-   borderColor = "34 34 34";
-};
-singleton GuiControlProfile (editorMenubarProfile : NavPanelProfile) 
-{
-   bitmap = "./editor-menubar";
-   category = "Editor";
-};
-singleton GuiControlProfile (editorMenu_wBorderProfile : NavPanelProfile) 
-{
-   bitmap = "./menu-fullborder";
-   category = "Editor";
-};
-singleton GuiControlProfile (inspectorStyleRolloutProfile : NavPanelProfile) 
-{
-   bitmap = "./inspector-style-rollout";
-   category = "Editor";
-};
-singleton GuiControlProfile (inspectorStyleRolloutListProfile : NavPanelProfile) 
-{
-   bitmap = "./inspector-style-rollout-list";
-   category = "Editor";
-};
-singleton GuiControlProfile (inspectorStyleRolloutDarkProfile : NavPanelProfile) 
-{
-   bitmap = "./inspector-style-rollout-dark";
-   category = "Editor";
-};
-singleton GuiControlProfile (inspectorStyleRolloutInnerProfile : NavPanelProfile) 
-{
-   bitmap = "./inspector-style-rollout_inner";
-   category = "Editor";
-};
-singleton GuiControlProfile (inspectorStyleRolloutNoHeaderProfile : NavPanelProfile)
-{
-   bitmap = "./inspector-style-rollout-noheader";
-   category = "Editor";
-};
-singleton GuiControlProfile (IconDropdownProfile : NavPanelProfile) 
-{
-   bitmap = "./icon-dropdownbar";
-   category = "Editor";
-};

+ 180 - 31
Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs

@@ -22,19 +22,31 @@
 
 function ESettingsWindow::startup( %this )
 {
+   new ArrayObject(EditorSettingsPageList);
+   new ArrayObject(GameSettingsPageList);
+   
+   %this.addEditorSettingsPage("Axis", "Axis Gizmo");
+   %this.addEditorSettingsPage("General", "General Settings");
+   %this.addEditorSettingsPage("Camera", "Camera Settings");
+   %this.addEditorSettingsPage("SceneEditor", "Scene Editor");
+   %this.addEditorSettingsPage("ShapeEditor", "Shape Editor");
+   %this.addEditorSettingsPage("NavEditor", "Navigation Editor");
+   %this.addEditorSettingsPage("Theme", "Theme");
+   
+   %this.addGameSettingsPage("GameGeneral", "General");
+   %this.addGameSettingsPage("Gameplay", "Gameplay");
+   %this.addGameSettingsPage("Paths", "Paths");
+   %this.addGameSettingsPage("UI", "UI");
+   %this.addGameSettingsPage("LevelDefaults", "Level Defaults");
+   %this.addGameSettingsPage("GameOptions", "Game Options");
+   %this.addGameSettingsPage("AssetManagement", "Asset Management");
+   
+   %this.mode = "Editor";
 }
 
 function ESettingsWindow::onWake( %this )
 {
-   new ArrayObject(SettingsPageList);
-   %this.addSettingsPage("Axis", "Axis Gizmo");
-   %this.addSettingsPage("General", "General Settings");
-   %this.addSettingsPage("Camera", "Camera Settings");
-   %this.addSettingsPage("SceneEditor", "Scene Editor");
-   %this.addSettingsPage("ShapeEditor", "Shape Editor");
-   %this.addSettingsPage("NavEditor", "Navigation Editor");
    
-   ESettingsWindowList.setSelectedById( 1 );
 }
 
 function ESettingsWindow::hideDialog( %this )
@@ -47,7 +59,6 @@ function ESettingsWindow::ToggleVisibility()
    if ( ESettingsWindow.visible  )
    {
       ESettingsWindow.setVisible(false);
-      EditorSettings.write();
    }
    else
    {
@@ -59,19 +70,50 @@ function ESettingsWindow::ToggleVisibility()
    ESettingsWindowList.setSelectedById( 1 );
 }
 
-/*function ESettingsWindow::addTabPage( %this, %page )
+function ESettingsWindow::toggleProjectSettings(%this)
 {
-   ESettingsWindowTabBook.add( %page );
-   ESettingsWindowList.addRow( ESettingsWindowTabBook.getSelectedPage(), %page.text );
+   %this.ToggleVisibility();
+   
+   %count = GameSettingsPageList.count();
+   for(%i=0; %i < %count; %i++)
+   {
+      %settingsPageText = GameSettingsPageList.getValue(%i);
+      ESettingsWindowList.addRow( %i, %settingsPageText );
+   }
    ESettingsWindowList.sort(0);
-}*/
+   
+   ESettingsWindowList.setSelectedById( 1 );
+   
+   %this.mode = "Project";
+   ESettingsWindow.text = "Game Project Settings";
+}
 
-function ESettingsWindow::addSettingsPage(%this, %settingsPageName, %settingsPageText)
+function ESettingsWindow::toggleEditorSettings(%this)
 {
-   SettingsPageList.add(%settingsPageName, %settingsPageText);
+   %this.ToggleVisibility();
    
-   ESettingsWindowList.addRow( SettingsPageList.count(), %settingsPageText );
+   %count = EditorSettingsPageList.count();
+   for(%i=0; %i < %count; %i++)
+   {
+      %settingsPageText = EditorSettingsPageList.getValue(%i);
+      ESettingsWindowList.addRow( %i, %settingsPageText );
+   }
    ESettingsWindowList.sort(0);
+   
+   ESettingsWindowList.setSelectedById( 1 );
+   
+   %this.mode = "Editor";
+   ESettingsWindow.text = "Editor Settings";
+}
+
+function ESettingsWindow::addEditorSettingsPage(%this, %settingsPageName, %settingsPageText)
+{
+   EditorSettingsPageList.add(%settingsPageName, %settingsPageText);
+}
+
+function ESettingsWindow::addGameSettingsPage(%this, %settingsPageName, %settingsPageText)
+{
+   GameSettingsPageList.add(%settingsPageName, %settingsPageText);
 }
 
 //-----------------------------------------------------------------------------
@@ -79,10 +121,49 @@ function ESettingsWindow::addSettingsPage(%this, %settingsPageName, %settingsPag
 function ESettingsWindowList::onSelect( %this, %id, %text )
 {
    SettingsInspector.clearFields();
-   %pageName = SettingsPageList.getKey(SettingsPageList.getIndexFromValue(%text));
+   
+   if(ESettingsWindow.mode $= "Editor")
+      %pageName = EditorSettingsPageList.getKey(EditorSettingsPageList.getIndexFromValue(%text));
+   else
+      %pageName = GameSettingsPageList.getKey(GameSettingsPageList.getIndexFromValue(%text));
+      
    eval("ESettingsWindow.get" @ %pageName @ "Settings();");
 }
 
+//Read/write field functions
+function SettingsInspector::addSettingsField(%this, %settingsFieldName, %labelText, %fieldType, %tooltip, %fieldData)
+{
+   %moddedSettingsFieldName = strreplace(%settingsFieldName, "/", "-");
+   
+   if(ESettingsWindow.mode $= "Editor")
+      %this.addCallbackField(%moddedSettingsFieldName, %labelText, %fieldType, "", EditorSettings.value(%settingsFieldName), %fieldData, "changeEditorSetting");
+   else
+      %this.addCallbackField(%moddedSettingsFieldName, %labelText, %fieldType, "", ProjectSettings.value(%settingsFieldName), %fieldData, "changeEditorSetting");
+}
+
+function SettingsInspector::changeEditorSetting(%this, %varName, %value)
+{
+   %varName = strreplace(%varName, "-", "/");
+   
+   echo("Set " @ %varName @ " to be " @ %value);  
+   
+   if(ESettingsWindow.mode $= "Editor")
+      EditorSettings.setValue(%varName, %value);
+   else
+      ProjectSettings.setValue(%varName, %value);
+   
+   //%id = ESettingsWindowList.getSelectedRow();
+   //ESettingsWindowList.setSelectedRow(%id);
+   
+   if(ESettingsWindow.mode $= "Editor")
+      %success = EditorSettings.write();
+   else
+      %success = ProjectSettings.write();
+}
+
+//
+// COMMON EDITOR SETTINGS
+//
 function ESettingsWindow::getAxisSettings(%this)
 {
    SettingsInspector.startGroup("Gizmo");
@@ -182,21 +263,89 @@ function ESettingsWindow::getShapeEditorSettings(%this)
    SettingsInspector.endGroup();
 }
 
-//Read/write field functions
-function SettingsInspector::addSettingsField(%this, %settingsFieldName, %labelText, %fieldType, %tooltip, %fieldData)
+function ESettingsWindow::getThemeSettings(%this)
 {
-   %moddedSettingsFieldName = strreplace(%settingsFieldName, "/", "-");
-   %this.addCallbackField(%moddedSettingsFieldName, %labelText, %fieldType, "", EditorSettings.value(%settingsFieldName), %fieldData, "changeEditorSetting");
-}
-
-function SettingsInspector::changeEditorSetting(%this, %varName, %value)
-{
-   %varName = strreplace(%varName, "-", "/");
+   SettingsInspector.startGroup("Colors");
+   SettingsInspector.addSettingsField("Theme/headerColor", "Headerbar Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/windowBackgroundColor", "Window Background Color", "ColorI", "");
    
-   echo("Set " @ %varName @ " to be " @ %value);  
+   SettingsInspector.addSettingsField("Theme/tabsColor", "Tabs Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/tabsHLColor", "Tabs Highlight Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/tabsSELColor", "Tabs Selected Color", "ColorI", "");
+   
+   SettingsInspector.addSettingsField("Theme/dividerDarkColor", "Divider Dark Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/dividerMidColor", "Divider Mid Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/dividerLightColor", "Divider Light Color", "ColorI", "");
    
-   EditorSettings.setValue(%varName, %value);
+   SettingsInspector.addSettingsField("Theme/headerTextColor", "Header Text Color", "ColorI", "");
    
-   %id = ESettingsWindowList.getSelectedRow();
-   ESettingsWindowList.setSelectedRow(%id);
-}
+   SettingsInspector.addSettingsField("Theme/fieldTextColor", "Field Text Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/fieldTextHLColor", "Field Text Highlight Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/fieldTextSELColor", "Field Text Selected Color", "ColorI", "");
+   
+   SettingsInspector.addSettingsField("Theme/fieldBGColor", "Field Background Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/fieldBGHLColor", "Field Background Highlight Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/fieldBGSELColor", "Field Background Selected Color", "ColorI", "");
+   
+   SettingsInspector.addSettingsField("Theme/tooltipBGColor", "Tooltip Background Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/tooltipTextColor", "Tooltip Text Highlight Color", "ColorI", "");
+   SettingsInspector.addSettingsField("Theme/tooltipDivColor", "Tooltip Divider Color", "ColorI", "");
+   SettingsInspector.endGroup();
+} 
+//
+// COMMON GAME SETTINGS
+//
+function ESettingsWindow::getGameGeneralSettings(%this)
+{
+   SettingsInspector.startGroup("General");
+   SettingsInspector.addSettingsField("General/ProjectName", "Project Name", "string", "");
+   SettingsInspector.endGroup();
+} 
+
+function ESettingsWindow::getPathsSettings(%this)
+{
+   SettingsInspector.startGroup("Paths");
+   SettingsInspector.addSettingsField("Paths/splashImagePath", "Splash Image", "filename", "");
+   SettingsInspector.addSettingsField("Paths/iconImagePath", "Icon Image", "filename", "");
+   SettingsInspector.addSettingsField("Paths/missingTexturePath", "Missing Texture Image", "filename", "");
+   SettingsInspector.addSettingsField("Paths/noMaterialPath", "No Material Image", "filename", "");
+   SettingsInspector.addSettingsField("Paths/errorMaterialMath", "Error Material Image", "filename", "");
+   SettingsInspector.endGroup();
+} 
+
+function ESettingsWindow::getUISettings(%this)
+{
+   SettingsInspector.startGroup("UI");
+   SettingsInspector.addSettingsField("UI/playGUIName", "Play GUI Name", "string", "");
+   SettingsInspector.addSettingsField("UI/mainMenuName", "Main Menu GUI Name", "string", "");
+   SettingsInspector.endGroup();
+} 
+
+function ESettingsWindow::getAssetManagementSettings(%this)
+{
+   SettingsInspector.startGroup("Modules");
+   SettingsInspector.addSettingsField("AssetManagement/Modules/coreModulePath", "Core Module Path", "string", "");
+   SettingsInspector.addSettingsField("AssetManagement/Modules/gameDataModulePath", "Game Data Module Path", "string", "");
+   SettingsInspector.addSettingsField("AssetManagement/Modules/moduleExtension", "Module Extension", "string", "");
+   SettingsInspector.endGroup();
+   
+   SettingsInspector.startGroup("Assets");
+   SettingsInspector.addSettingsField("AssetManagement/Assets/assetExtension", "Asset Extension", "string", "");
+   SettingsInspector.addSettingsField("AssetManagement/Assets/datablockCaching", "Cache Datablocks", "bool", "");
+   //SettingsInspector.addSettingsField("AssetManagement/Assets/moduleExtension", "Module Extension", "string", "");
+   SettingsInspector.endGroup();
+} 
+
+function ESettingsWindow::getGameplaySettings(%this)
+{
+   SettingsInspector.startGroup("Game Modes");
+   SettingsInspector.addSettingsField("Gameplay/GameModes/defaultModeName", "Default Gamemode Name", "string", "");
+   SettingsInspector.endGroup();
+} 
+
+function ESettingsWindow::getGameOptionsSettings(%this)
+{
+   SettingsInspector.startGroup("Game Modes");
+   SettingsInspector.addSettingsField("Gameplay/GameModes/defaultModeName", "Default Gamemode Name", "string", "");
+   SettingsInspector.endGroup();
+} 

二進制
Templates/BaseGame/game/tools/gui/images/button.png


二進制
Templates/BaseGame/game/tools/gui/images/tab.png


二進制
Templates/BaseGame/game/tools/gui/images/window.png


+ 1 - 1
Templates/BaseGame/game/tools/gui/messageBoxes/messageBoxOKCancelDetailsDlg.ed.gui

@@ -99,7 +99,7 @@
       };
       new GuiScrollCtrl(MBOKCancelDetailsScroll) {
          canSaveDynamicFields = "0";
-         Profile = "GuiScrollProfile";
+         Profile = "ToolsGuiScrollProfile";
          HorizSizing = "right";
          VertSizing = "bottom";
          position = "8 115";

+ 239 - 140
Templates/BaseGame/game/tools/gui/profiles.ed.cs

@@ -38,26 +38,26 @@ new GuiControlProfile (ToolsGuiDefaultProfile)
 
    // fill color
    opaque = true;
-   fillColor = "50 50 50";
-   fillColorHL = "91 101 116";
-   fillColorSEL = "91 101 116";
-   fillColorNA = "255 0 255 ";
+   fillColor = EditorSettings.value("Theme/tabsColor");
+   fillColorHL = EditorSettings.value("Theme/tabsGLColor");
+   fillColorSEL = EditorSettings.value("Theme/tabsSELColor");
+   fillColorNA = EditorSettings.value("Theme/tabsSELColor");
 
    // border color
    border = 0;
-   borderColor   = "34 34 34"; 
-   borderColorHL = "91 101 116";
-   borderColorNA = "32 32 32"; 
+   borderColor   = EditorSettings.value("Theme/dividerDarkColor"); 
+   borderColorHL = EditorSettings.value("Theme/dividerMidColor");
+   borderColorNA = EditorSettings.value("Theme/dividerLightColor"); 
 
    // font
    fontType = "Noto Sans";
    fontSize = 14;
    fontCharset = ANSI;
 
-   fontColor = "215 215 215";
-   fontColorHL = "215 215 215";
-   fontColorNA = "215 215 215";
-   fontColorSEL= "255 255 255";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
+   fontColorSEL= EditorSettings.value("Theme/fieldTextSELColor");
 
    // bitmap information
    bitmap = "";
@@ -118,15 +118,15 @@ if( !isObject( ToolsGuiToolTipProfile ) )
 new GuiControlProfile (ToolsGuiToolTipProfile)
 {
    // fill color
-   fillColor = "255 255 255";
+   fillColor = EditorSettings.value("Theme/tooltipBGColor");
 
    // border color
-   borderColor   = "0 0 0";
+   borderColor   = EditorSettings.value("Theme/tooltipDivColor");
 
    // font
    fontType = "Noto Sans";
    fontSize = 14;
-   fontColor = "24 24 24";
+   fontColor = EditorSettings.value("Theme/tooltipTextColor");
 
    category = "Tools";
 };
@@ -141,7 +141,7 @@ new GuiControlProfile( ToolsGuiModelessDialogProfile )
 if( !isObject( ToolsGuiFrameSetProfile ) )
 new GuiControlProfile (ToolsGuiFrameSetProfile)
 {
-   fillColor = "48 48 48";
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");
    borderColor = "246 245 244";
    border = 1;
    opaque = true;
@@ -154,11 +154,11 @@ new GuiControlProfile (ToolsGuiWindowProfile)
 {
    opaque = false;
    border = 1;
-   fillColor = EditorSettings.value("WorldEditor/Theme/windowTitleBGColor");
-   fillColorHL = EditorSettings.value("WorldEditor/Theme/windowTitleBGHLColor");
-   fillColorNA = EditorSettings.value("WorldEditor/Theme/windowTitleBGNAColor");
-   fontColor = EditorSettings.value("WorldEditor/Theme/windowTitleFontColor");
-   fontColorHL = EditorSettings.value("WorldEditor/Theme/windowTitleFontHLColor");
+   fillColor = EditorSettings.value("Theme/tabsColor");
+   fillColorHL = EditorSettings.value("Theme/tabsColor");
+   fillColorNA = EditorSettings.value("Theme/tabsColor");
+   fontColor = EditorSettings.value("Theme/headerTextColor");
+   fontColorHL = EditorSettings.value("Theme/headerTextColor");
    bevelColorHL = "255 255 255";
    bevelColorLL = "0 0 0";
    text = "untitled";
@@ -186,15 +186,16 @@ new GuiControlProfile (ToolsGuiWindowCollapseProfile : ToolsGuiWindowProfile)
 if( !isObject( ToolsGuiTextProfile ) )
 new GuiControlProfile (ToolsGuiTextProfile)
 {
+   opaque = true;
    justify = "left";
-   fontColor = "185 185 185";
+   fontColor = EditorSettings.value("Theme/headerTextColor");
    category = "Tools";
 };
 
 if( !isObject( ToolsGuiTextBoldCenterProfile ) )
 new GuiControlProfile (ToolsGuiTextBoldCenterProfile : ToolsGuiTextProfile)
 {
-   fontColor = "165 165 165";
+   fontColor = EditorSettings.value("Theme/headerTextColor");
    fontType = "Noto Sans Bold";
    fontSize = 16;
    justify = "center";
@@ -218,7 +219,7 @@ new GuiControlProfile (ToolsGuiTextCenterProfile : ToolsGuiTextProfile)
 if( !isObject( ToolsGuiInspectorTitleTextProfile ) )
 new GuiControlProfile (ToolsGuiInspectorTitleTextProfile)
 {
-   fontColor = "100 100 100";
+   fontColor = EditorSettings.value("Theme/headerTextColor");
    category = "Tools";
 };
 
@@ -245,12 +246,12 @@ new GuiControlProfile( ToolsGuiMLTextProfile )
 if( !isObject( ToolsGuiTextArrayProfile ) )
 new GuiControlProfile( ToolsGuiTextArrayProfile : ToolsGuiTextProfile )
 {
-   fontColor = "165 165 165";
-   fontColorHL = "215 215 215";
-   fontColorSEL = "215 215 215";
-   fillColor = "200 200 200";
-   fillColorHL = "228 228 235";
-   fillColorSEL = "200 200 200";
+   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");
    border = false;
    category = "Tools";
 };
@@ -272,11 +273,11 @@ new GuiControlProfile( ToolsGuiTextEditProfile )
    border = -2; // fix to display textEdit img
    //borderWidth = "1";  // fix to display textEdit img
    //borderColor = "100 100 100";
-   fillColor = "42 42 42 0";
-   fillColorHL = "91 101 116";
-   fontColor = "215 215 215";
-   fontColorHL = "115 115 115";
-   fontColorSEL = "98 100 137";
+   fillColor = EditorSettings.value("Theme/fieldBGColor");
+   fillColorHL = EditorSettings.value("Theme/fieldBGHLColor");
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorSEL = EditorSettings.value("Theme/fieldTextSELColor");
    fontColorNA = "200 200 200";
    textOffset = "4 2";
    autoSizeWidth = false;
@@ -325,9 +326,9 @@ new GuiControlProfile( ToolsGuiButtonProfile )
 {
    opaque = true;
    border = true;
-   fontColor = "165 165 165";
-   fontColorHL = "215 215 215";
-   fontColorNA = "200 200 200";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    fixedExtent = false;
    justify = "center";
    canKeyFocus = false;
@@ -348,9 +349,9 @@ new GuiControlProfile( ToolsGuiIconButtonProfile )
 {
    opaque = true;
    border = true;
-   fontColor = "165 165 165";
-   fontColorHL = "215 215 215";
-   fontColorNA = "200 200 200";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    fixedExtent = false;
    justify = "center";
    canKeyFocus = false;
@@ -371,10 +372,10 @@ new GuiControlProfile(ToolsGuiEditorTabPage)
 {
    opaque = true;
    border = false;
-   fillColor = "48 48 48";
-   fontColor = "215 215 215";
-   fontColorHL = "150 150 150";
-   borderColor = "34 34 34";
+   fillColor = EditorSettings.value("Theme/tabsColor");
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
    fixedExtent = false;
    justify = "left";
    canKeyFocus = false;
@@ -387,13 +388,13 @@ if( !isObject( ToolsGuiCheckBoxProfile ) )
 new GuiControlProfile( ToolsGuiCheckBoxProfile )
 {
    opaque = false;
-   fillColor = "232 232 232";
+   fillColor = EditorSettings.value("Theme/fieldBGColor");
    border = false;
-   borderColor = "100 100 100";
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
    fontSize = 14;
-   fontColor = "185 185 185";
-   fontColorHL = "80 80 80";
-	fontColorNA = "200 200 200";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+	fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    fixedExtent = true;
    justify = "left";
    bitmap = "./images/checkbox";
@@ -417,7 +418,7 @@ new GuiControlProfile( ToolsGuiCheckBoxListFlipedProfile : ToolsGuiCheckBoxProfi
 
 if( !isObject( ToolsGuiInspectorCheckBoxTitleProfile ) )
 new GuiControlProfile( ToolsGuiInspectorCheckBoxTitleProfile : ToolsGuiCheckBoxProfile ){
-   fontColor = "100 100 100";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
    category = "Tools";
 };
 
@@ -425,9 +426,9 @@ if( !isObject( ToolsGuiRadioProfile ) )
 new GuiControlProfile( ToolsGuiRadioProfile )
 {
    fontSize = 14;
-   fillColor = "232 232 232";
-   fontColor = "185 185 185";
-   fontColorHL = "80 80 80";
+   fillColor = EditorSettings.value("Theme/fieldBGColor");
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
    fixedExtent = true;
    bitmap = "./images/radioButton";
    hasBitmapArray = true;
@@ -438,10 +439,10 @@ if( !isObject( ToolsGuiScrollProfile ) )
 new GuiControlProfile( ToolsGuiScrollProfile )
 {
    opaque = true;
-   fillColor = "48 48 48";
-   fontColor = "215 215 215";
-   fontColorHL = "150 150 150";
-   borderColor = "34 34 34";
+   fillColor = EditorSettings.value("Theme/tabsColor");
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
    border = true;
    bitmap = "./images/scrollBar";
    hasBitmapArray = true;
@@ -452,10 +453,9 @@ if( !isObject( ToolsGuiOverlayProfile ) )
 new GuiControlProfile( ToolsGuiOverlayProfile )
 {
    opaque = true;
-   fillColor = "48 48 48";
-   fontColor = "215 215 215";
-   fontColorHL = "255 255 255";
-   fillColor = "0 0 0 100";
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextGLColor");
    category = "Tools";
 };
 
@@ -478,9 +478,9 @@ new GuiControlProfile( ToolsGuiPopupMenuItemBorder : ToolsGuiButtonProfile )
 {
    opaque = true;
    border = true;
-   fontColor = "215 215 215";
-   fontColorHL = "215 215 215";
-   fontColorNA = "255 255 255";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextGLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    fixedExtent = false;
    justify = "center";
    canKeyFocus = false;
@@ -500,13 +500,14 @@ new GuiControlProfile( ToolsGuiPopUpMenuDefault : ToolsGuiDefaultProfile )
    bitmap = "./images/scrollbar";
    hasBitmapArray = true;
    profileForChildren = ToolsGuiPopupMenuItemBorder;
-   fillColor = "48 48 48";//"255 255 255";//100
-   fillColorHL = "228 228 235 ";//"91 101 116";
-   fillColorSEL = "98 100 137 ";//"91 101 116";
+   fillColor = EditorSettings.value("Theme/fieldBGColor");//"255 255 255";//100
+   fillColorHL = EditorSettings.value("Theme/fieldBGHLColor");//"91 101 116";
+   fillColorSEL = EditorSettings.value("Theme/fieldBGSELColor");//"91 101 116";
    // font color is black
-   fontColorHL = "215 215 215 ";//"215 215 215";
-   fontColorSEL = "255 255 255";//"215 215 215";
-   borderColor = "100 100 100";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");//"215 215 215";
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");//"215 215 215";
+   fontColorSEL = EditorSettings.value("Theme/fieldTextSELColor");//"215 215 215";
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
    category = "Tools";
 };
 
@@ -548,11 +549,11 @@ new GuiControlProfile( ToolsGuiPopUpMenuEditProfile : ToolsGuiPopUpMenuDefault )
 if( !isObject( ToolsGuiListBoxProfile ) )
 new GuiControlProfile( ToolsGuiListBoxProfile )
 {
-   fillColorHL = "100 100 100";
-   fillColorNA = "150 150 150";
-   fontColor = "215 215 215";
-   fontColorHL = "215 215 215";
-   fontColorNA = "50 50 50";
+   fillColorHL = EditorSettings.value("Theme/windowBackgroundColor");
+   fillColorNA = EditorSettings.value("Theme/windowBackgroundColor");
+   fontColor = EditorSettings.value("Theme/headerTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    
    tab = true;
    canKeyFocus = true;
@@ -562,11 +563,11 @@ new GuiControlProfile( ToolsGuiListBoxProfile )
 if( !isObject( ToolsGuiTabBookProfile ) )
 new GuiControlProfile( ToolsGuiTabBookProfile )
 {
-   fillColorHL = "100 100 100";
-   fillColorNA = "150 150 150";
-   fontColor = "215 215 215";
-   fontColorHL = "215 215 215";
-   fontColorNA = "50 50 50";
+   fillColorHL = EditorSettings.value("Theme/windowBackgroundColor");
+   fillColorNA = EditorSettings.value("Theme/windowBackgroundColor");
+   fontColor = EditorSettings.value("Theme/headerTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    fontType = "Noto Sans";
    fontSize = 14;
    justify = "center";
@@ -606,7 +607,7 @@ new GuiControlProfile( ToolsGuiTreeViewProfile )
    bitmap = "./images/treeView";
    autoSizeHeight = true;
    canKeyFocus = true;
-   fillColor = "48 48 48"; 
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor"); 
    fillColorHL = "116 116 116";
    fillColorSEL = "91 101 116";
    fillColorNA = "40 40 40";
@@ -632,7 +633,7 @@ new GuiControlProfile( ToolsGuiTextPadProfile )
    
    // Deviate from the Default
    opaque=true;  
-   fillColor = "48 48 48";   
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");   
    border = 0;
    category = "Tools";
 };
@@ -686,7 +687,7 @@ singleton GuiControlProfile( GuiBackFillProfile )
 singleton GuiControlProfile( GuiControlListPopupProfile )
 {
    opaque = true;
-   fillColor = "48 48 48";
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");
    fillColorHL = "91 101 116";
    border = false;
    //borderColor = "0 0 0";
@@ -719,10 +720,10 @@ singleton GuiControlProfile( GuiInspectorButtonProfile : ToolsGuiButtonProfile )
 
 singleton GuiControlProfile( GuiInspectorSwatchButtonProfile )
 {
-   borderColor = "100 100 100 255";
-   borderColorNA = "200 200 200 255";
-   fillColorNA = "255 255 255 0";
-   borderColorHL = "0 0 0 255";
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
+   borderColorNA = EditorSettings.value("Theme/dividerMidColor");
+   fillColorNA = EditorSettings.value("Theme/fieldBGColor");
+   borderColorHL = EditorSettings.value("Theme/dividerLightColor");
    category = "Editor";
 };
 
@@ -730,8 +731,8 @@ singleton GuiControlProfile( GuiInspectorTextEditProfile )
 {
    // Transparent Background
    opaque = true;
-   fillColor = "0 0 0 0";
-   fillColorHL = "91 101 116";
+   fillColor = EditorSettings.value("Theme/fieldBGColor");
+   fillColorHL = EditorSettings.value("Theme/fieldBGHLColor");
 
    // No Border (Rendered by field control)
    border = false;
@@ -743,10 +744,10 @@ singleton GuiControlProfile( GuiInspectorTextEditProfile )
    fontType = "Noto Sans";
    fontSize = 14;
 
-   fontColor = "215 215 215";
-   fontColorSEL = "0 140 220";
-   fontColorHL = "240 240 240";
-   fontColorNA = "100 100 100";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorSEL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextSELColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    category = "Editor";
 };
 singleton GuiControlProfile( GuiDropdownTextEditProfile :  ToolsGuiTextEditProfile )
@@ -765,9 +766,9 @@ singleton GuiControlProfile( GuiInspectorGroupProfile )
    fontType    = "Noto Sans";
    fontSize    = "14";
    
-   fontColor = "215 215 215 150";
-   fontColorHL = "215 215 215 220";
-   fontColorNA = "128 128 128";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    
    justify = "left";
    opaque = false;
@@ -783,16 +784,16 @@ singleton GuiControlProfile( GuiInspectorGroupProfile )
 singleton GuiControlProfile( GuiInspectorFieldProfile)
 {
    // fill color
-   opaque = false;
-   fillColor = "48 48 48";
-   fillColorHL = "91 101 116";
-   fillColorNA = "244 244 244";
+   opaque = true;
+   fillColor = EditorSettings.value("Theme/fieldBGColor");
+   fillColorHL = EditorSettings.value("Theme/fieldBGHLColor");
+   fillColorNA = EditorSettings.value("Theme/fieldBGSELColor");
 
    // border color
    border = false;
-   borderColor   = "190 190 190";
-   borderColorHL = "156 156 156";
-   borderColorNA = "200 200 200";
+   borderColor   = EditorSettings.value("Theme/dividerDarkColor");
+   borderColorHL = EditorSettings.value("Theme/dividerMidColor");
+   borderColorNA = EditorSettings.value("Theme/dividerLightColor");
    
    //bevelColorHL = "255 255 255";
    //bevelColorLL = "0 0 0";
@@ -801,9 +802,9 @@ singleton GuiControlProfile( GuiInspectorFieldProfile)
    fontType = "Noto Sans";
    fontSize = 14;
 
-   fontColor = "240 240 240";
-   fontColorHL = "240 240 240";
-   fontColorNA = "190 190 190";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    textOffset = "10 0";
 
    tab = true;
@@ -822,15 +823,15 @@ singleton GuiControlProfile( GuiInspectorMultiFieldProfile : GuiInspectorFieldPr
 singleton GuiControlProfile( GuiInspectorMultiFieldDifferentProfile : GuiInspectorFieldProfile )
 {
    border = true;
-   borderColor = "190 100 100";
+   borderColor = EditorSettings.value("Theme/dividerMidColor");
 };
 
 singleton GuiControlProfile( GuiInspectorDynamicFieldProfile : GuiInspectorFieldProfile )
 {
    // Transparent Background
    opaque = true;
-   fillColor = "0 0 0 0";
-   fillColorHL = "91 101 116";
+   fillColor = EditorSettings.value("Theme/fieldBGColor");
+   fillColorHL = EditorSettings.value("Theme/fieldBGHLColor");
 
    // No Border (Rendered by field control)
    border = false;
@@ -842,21 +843,21 @@ singleton GuiControlProfile( GuiInspectorDynamicFieldProfile : GuiInspectorField
    fontType = "Noto Sans";
    fontSize = 14;
 
-   fontColor = "215 215 215";
-   fontColorSEL = "0 140 220";
-   fontColorHL = "240 240 240";
-   fontColorNA = "100 100 100";
+   fontColor = EditorSettings.value("Theme/headerTextColor");
+   fontColorSEL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextSELColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    category = "Editor";
 };
 
 singleton GuiControlProfile( GuiRolloutProfile )
 {
    border = 0;
-   borderColor = "200 200 200";
+   borderColor = EditorSettings.value("Theme/dividerLightColor");
    
-   fontColor = "240 240 240";
-   fontColorHL = "240 240 240";
-   fontColorNA = "190 190 190";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    
    hasBitmapArray = true;
    bitmap = "tools/editorClasses/gui/images/rollout";
@@ -894,12 +895,19 @@ singleton GuiControlProfile( GuiInspectorStackProfile )
    opaque = false;
    border = false;
    category = "Editor";
+   
+   fillColor = EditorSettings.value("Theme/tabsColor");
+   fillColorHL = EditorSettings.value("Theme/tabsHLColor");
+   
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
 };
 
 singleton GuiControlProfile( GuiInspectorProfile  : GuiInspectorFieldProfile )
 {
    opaque = true;
-   fillColor = "42 42 42 255";
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");
    border = 0;
    cankeyfocus = true;
    tab = true;
@@ -908,7 +916,7 @@ singleton GuiControlProfile( GuiInspectorProfile  : GuiInspectorFieldProfile )
 singleton GuiControlProfile( GuiInspectorInfoProfile  : GuiInspectorFieldProfile )
 {
    opaque = true;
-   fillColor = "48 48 48";
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");
    border = 0;
    cankeyfocus = true;
    tab = true;
@@ -945,7 +953,7 @@ singleton GuiControlProfile( GuiInspectorTypeFileNameProfile )
    fontColorHL = "240 240 240";
    fontColorNA = "215 215 215";
 
-   fillColor = "48 48 48";
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");
    fillColorHL = "91 101 116";
    fillColorNA = "244 244 244";
 
@@ -987,7 +995,7 @@ singleton GuiControlProfile( InspectorTypeCheckboxProfile : GuiInspectorFieldPro
 singleton GuiControlProfile( GuiToolboxButtonProfile : ToolsGuiButtonProfile )
 {
    justify = "center";
-   fontColor = "215 215 215";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
    border = 0;
    textOffset = "0 0";   
    category = "Editor";
@@ -995,10 +1003,10 @@ singleton GuiControlProfile( GuiToolboxButtonProfile : ToolsGuiButtonProfile )
 
 singleton GuiControlProfile( GuiDirectoryTreeProfile : ToolsGuiTreeViewProfile )
 {
-   fontColor = "240 240 240";
-   fontColorSEL= "250 250 250 175"; 
-   fillColorHL = "0 60 150";
-   fontColorNA = "240 240 240";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorSEL= EditorSettings.value("Theme/fieldTextSELColor"); 
+   fillColorHL = EditorSettings.value("Theme/fieldBGColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    fontType = "Noto Sans";
    fontSize = 14;
    category = "Editor";
@@ -1006,10 +1014,10 @@ singleton GuiControlProfile( GuiDirectoryTreeProfile : ToolsGuiTreeViewProfile )
 
 singleton GuiControlProfile( GuiDirectoryFileListProfile )
 {
-   fontColor = "240 240 240";
-   fontColorSEL= "250 250 250 175"; 
-   fillColorHL = "0 60 150";
-   fontColorNA = "240 240 240";
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorSEL= EditorSettings.value("Theme/fieldTextSELColor"); 
+   fillColorHL = EditorSettings.value("Theme/fieldBGColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    fontType = "Noto Sans";
    fontSize = 14;
    category = "Editor";
@@ -1035,13 +1043,17 @@ singleton GuiControlProfile( GuiInspectorFieldInfoMLTextProfile : ToolsGuiMLText
    border = 0;   
    textOffset = "5 0";
    category = "Editor";
+   
+   fontColor = EditorSettings.value("Theme/fieldTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorSEL = EditorSettings.value("Theme/fieldTextSELColor");
 };
 
 singleton GuiControlProfile( GuiEditorScrollProfile )
 {
    opaque = true;
-   fillcolor = GuiInspectorBackgroundProfile.fillColor;
-   borderColor = ToolsGuiDefaultProfile.borderColor;
+   fillcolor = EditorSettings.value("Theme/windowBackgroundColor");
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
    border = 1;
    bitmap = "tools/gui/images/scrollBar";
    hasBitmapArray = true;
@@ -1077,16 +1089,16 @@ singleton GuiControlProfile( GuiCreatorIconButtonProfile )
    category = "Editor";
 };
 
-singleton GuiControlProfile( GuiMenuBarProfile )
+singleton GuiControlProfile( ToolsGuiMenuBarProfile )
 {
-   fillColor = "48 48 48";
-   fillcolorHL = "42 42 42";
-   borderColor = "30 30 30 255";
-   borderColorHL = "30 30 30 255";
-   fontColor = "215 215 215";
-   fontColorSEL = "43 107 206";
-   fontColorHL = "244 244 244";
-   fontColorNA = "100 100 100";
+   fillColor = EditorSettings.value("Theme/headerColor");
+   fillcolorHL = EditorSettings.value("Theme/tabsSELColor");
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
+   borderColorHL = EditorSettings.value("Theme/dividerMidColor");
+   fontColor = EditorSettings.value("Theme/headerTextColor");
+   fontColorSEL = EditorSettings.value("Theme/fieldTextSELColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
    border = 0;
    borderThickness = 1;
    opaque = true;
@@ -1094,3 +1106,90 @@ singleton GuiControlProfile( GuiMenuBarProfile )
    category = "Editor";
    bitmap = "tools/gui/images/checkbox-menubar";
 };
+
+singleton GuiControlProfile( ToolsMenubarProfile : ToolsGuiDefaultProfile ) 
+{
+   bitmap = "./menubar";
+   category = "Editor";
+   
+   fillColor = EditorSettings.value("Theme/headerColor");
+   fontColor = EditorSettings.value("Theme/headerTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
+};
+
+singleton GuiControlProfile (menubarProfile) 
+{
+   opaque = false;
+   border = -2;
+   category = "Editor";
+   
+   bitmap = "./menubar";
+   category = "Editor";
+   
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");
+   fontColor = EditorSettings.value("Theme/headerTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
+};
+
+singleton GuiControlProfile (editorMenubarProfile) 
+{
+   border = -2;
+   category = "Editor";
+   bitmap = "./editor-menubar";
+   category = "Editor";
+};
+singleton GuiControlProfile (editorMenu_wBorderProfile) 
+{
+   border = -2;
+   category = "Editor";
+   bitmap = "./menu-fullborder";
+   category = "Editor";
+};
+singleton GuiControlProfile (inspectorStyleRolloutProfile) 
+{
+   border = -2;
+   category = "Editor";
+   bitmap = "./inspector-style-rollout";
+   category = "Editor";
+};
+singleton GuiControlProfile (inspectorStyleRolloutListProfile) 
+{
+   border = -2;
+   category = "Editor";
+   bitmap = "./inspector-style-rollout-list";
+   category = "Editor";
+};
+singleton GuiControlProfile (inspectorStyleRolloutDarkProfile) 
+{
+   border = -2;
+   category = "Editor";
+   bitmap = "./inspector-style-rollout-dark";
+   
+   fillColor = EditorSettings.value("Theme/windowBackgroundColor");
+   fontColor = EditorSettings.value("Theme/headerTextColor");
+   fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
+   borderColor = EditorSettings.value("Theme/dividerDarkColor");
+};
+singleton GuiControlProfile (inspectorStyleRolloutInnerProfile) 
+{
+   border = -2;
+   category = "Editor";
+   bitmap = "./inspector-style-rollout_inner";
+   category = "Editor";
+};
+singleton GuiControlProfile (inspectorStyleRolloutNoHeaderProfile)
+{
+   border = -2;
+   category = "Editor";
+   bitmap = "./inspector-style-rollout-noheader";
+   category = "Editor";
+};
+singleton GuiControlProfile (IconDropdownProfile) 
+{
+   border = -2;
+   category = "Editor";
+   bitmap = "./icon-dropdownbar";
+   category = "Editor";
+};

+ 3 - 3
Templates/BaseGame/game/tools/guiEditor/gui/guiEditor.ed.gui

@@ -58,7 +58,7 @@
             anchorLeft = "1";
             anchorRight = "0";
             isContainer = "1";
-            profile = "menubarProfile";
+            profile = "ToolsMenubarProfile";
             horizSizing = "right";
             vertSizing = "bottom";
             position = "0 0";
@@ -755,7 +755,7 @@
       };
       new GuiControl(GuiEditorSidebar) {
          isContainer = "1";
-         Profile = "menubarProfile";
+         Profile = "ToolsMenubarProfile";
          HorizSizing = "width";
          VertSizing = "height";
          position = "798 0";
@@ -1503,7 +1503,7 @@
       canSave = "1";
       visible = "1";
       isContainer = "1";
-      profile = "menubarProfile";
+      profile = "ToolsMenubarProfile";
       
       new GuiTextCtrl( GuiEditorStatusBar ) {
          profile = "ToolsGuiTextProfile";

+ 1 - 1
Templates/BaseGame/game/tools/guiEditor/scripts/guiEditorCanvas.ed.cs

@@ -72,7 +72,7 @@ function GuiEditCanvas::onCreateMenu(%this)
       extent = "1024 20";
       minExtent = "320 20";
       horizSizing = "width";
-      profile = "GuiMenuBarProfile";
+      profile = "ToolsGuiMenuBarProfile";
       
       new PopupMenu()
       {

+ 1 - 1
Templates/BaseGame/game/tools/navEditor/NavEditorSettingsTab.gui

@@ -43,7 +43,7 @@
       minExtent = "8 2";
       horizSizing = "width";
       vertSizing = "height";
-      profile = "GuiScrollProfile";
+      profile = "ToolsGuiScrollProfile";
       visible = "1";
       active = "1";
       tooltipProfile = "GuiToolTipProfile";

+ 112 - 89
Templates/BaseGame/game/tools/settings.xml

@@ -1,99 +1,52 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <EditorSettings>
-    <Group name="WorldEditor">
-        <Setting name="forceLoadDAE">0</Setting>
-        <Setting name="orthoShowGrid">1</Setting>
-        <Setting name="dropType">screenCenter</Setting>
-        <Setting name="displayType">6</Setting>
-        <Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
-        <Setting name="undoLimit">40</Setting>
-        <Setting name="orthoFOV">50</Setting>
-        <Setting name="torsionPath">AssetWork_Debug.exe</Setting>
-        <Group name="ObjectIcons">
-            <Setting name="fadeIconsStartDist">8</Setting>
-            <Setting name="fadeIcons">1</Setting>
-            <Setting name="fadeIconsEndAlpha">0</Setting>
-            <Setting name="fadeIconsStartAlpha">255</Setting>
-            <Setting name="fadeIconsEndDist">20</Setting>
-        </Group>
-        <Group name="Docs">
-            <Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
-            <Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
-            <Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
-            <Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
-        </Group>
-        <Group name="Render">
-            <Setting name="renderObjText">1</Setting>
-            <Setting name="showMousePopupInfo">1</Setting>
-            <Setting name="renderSelectionBox">1</Setting>
-            <Setting name="renderPopupBackground">1</Setting>
-            <Setting name="renderObjHandle">1</Setting>
-        </Group>
-        <Group name="Grid">
-            <Setting name="gridOriginColor">255 255 255 100</Setting>
-            <Setting name="gridSnap">0</Setting>
-            <Setting name="gridMinorColor">51 51 51 100</Setting>
-            <Setting name="gridColor">102 102 102 100</Setting>
-            <Setting name="gridSize">1</Setting>
-        </Group>
-        <Group name="Tools">
-            <Setting name="snapSoftSize">2</Setting>
-            <Setting name="snapSoft">0</Setting>
-            <Setting name="boundingBoxCollision">0</Setting>
-            <Setting name="dropAtScreenCenterScalar">1</Setting>
-            <Setting name="objectsUseBoxCenter">1</Setting>
-            <Setting name="snapGround">0</Setting>
-            <Setting name="dropAtScreenCenterMax">100</Setting>
-        </Group>
-        <Group name="Theme">
-            <Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
-            <Setting name="windowTitleFontColor">215 215 215 255</Setting>
-            <Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
-            <Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
-            <Setting name="windowTitleBGColor">50 50 50 255</Setting>
-        </Group>
-        <Group name="Color">
-            <Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
-            <Setting name="objMouseOverColor">0 255 0 255</Setting>
-            <Setting name="objSelectColor">255 0 0 255</Setting>
-            <Setting name="dragRectColor">255 255 0 255</Setting>
-            <Setting name="popupBackgroundColor">100 100 100 255</Setting>
-            <Setting name="objectTextColor">255 255 255 255</Setting>
-            <Setting name="selectionBoxColor">255 255 0 255</Setting>
-        </Group>
-        <Group name="Images">
-            <Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
-            <Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
-            <Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
-        </Group>
+    <Group name="Theme">
+        <Setting name="tooltipDividerColor">72 70 68 255</Setting>
+        <Setting name="fieldTextHLColor">234 232 230 255</Setting>
+        <Setting name="fieldBGSELColor">100 98 96 255</Setting>
+        <Setting name="dividerLightColor">96 94 92 255</Setting>
+        <Setting name="tabsSELColor">59 58 57 255</Setting>
+        <Setting name="headerColor">50 49 48 255</Setting>
+        <Setting name="fieldBGHLColor">72 70 68 255</Setting>
+        <Setting name="tabsHLColor">50 49 48 255</Setting>
+        <Setting name="fieldTextSELColor">240 240 240 255</Setting>
+        <Setting name="fieldBGColor">59 58 57 255</Setting>
+        <Setting name="headerTextColor">236 234 232 255</Setting>
+        <Setting name="dividerMidColor">50 49 48 255</Setting>
+        <Setting name="tabsColor">37 36 35 255</Setting>
+        <Setting name="fieldTextColor">178 175 172 255</Setting>
+        <Setting name="tooltipBGColor">43 43 43 255</Setting>
+        <Setting name="dividerDarkColor">17 16 15 255</Setting>
+        <Setting name="tooltipTextColor">255 255 255 255</Setting>
+        <Setting name="windowBackgroundColor">32 31 30 255</Setting>
     </Group>
     <Group name="GuiEditor">
-        <Setting name="previewResolution">1024 768</Setting>
         <Setting name="lastPath">tools/gui</Setting>
-        <Group name="EngineDevelopment">
-            <Setting name="showEditorProfiles">0</Setting>
-            <Setting name="toggleIntoEditor">0</Setting>
-            <Setting name="showEditorGuis">0</Setting>
+        <Setting name="previewResolution">1024 768</Setting>
+        <Group name="Help">
+            <Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
+            <Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
+            <Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
         </Group>
         <Group name="Snapping">
-            <Setting name="snapToCanvas">1</Setting>
             <Setting name="snapToGuides">1</Setting>
+            <Setting name="sensitivity">2</Setting>
+            <Setting name="snap2GridSize">8</Setting>
             <Setting name="snapToCenters">1</Setting>
             <Setting name="snapToControls">1</Setting>
-            <Setting name="snap2GridSize">8</Setting>
-            <Setting name="sensitivity">2</Setting>
             <Setting name="snapToEdges">1</Setting>
             <Setting name="snap2Grid">0</Setting>
-        </Group>
-        <Group name="Help">
-            <Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
-            <Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
-            <Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
+            <Setting name="snapToCanvas">1</Setting>
         </Group>
         <Group name="Rendering">
             <Setting name="drawGuides">1</Setting>
             <Setting name="drawBorderLines">1</Setting>
         </Group>
+        <Group name="EngineDevelopment">
+            <Setting name="showEditorGuis">0</Setting>
+            <Setting name="showEditorProfiles">0</Setting>
+            <Setting name="toggleIntoEditor">0</Setting>
+        </Group>
         <Group name="Library">
             <Setting name="viewType">Categorized</Setting>
         </Group>
@@ -102,25 +55,98 @@
         </Group>
     </Group>
     <Group name="AxisGizmo">
-        <Setting name="renderWhenUsed">0</Setting>
-        <Setting name="renderInfoText">1</Setting>
-        <Setting name="axisGizmoMaxScreenLen">100</Setting>
-        <Setting name="rotationSnap">15</Setting>
         <Setting name="snapRotations">0</Setting>
+        <Setting name="renderInfoText">1</Setting>
         <Setting name="mouseRotateScalar">0.8</Setting>
+        <Setting name="axisGizmoMaxScreenLen">100</Setting>
         <Setting name="mouseScaleScalar">0.8</Setting>
+        <Setting name="rotationSnap">15</Setting>
+        <Setting name="renderWhenUsed">0</Setting>
         <Group name="Grid">
+            <Setting name="snapToGrid">0</Setting>
             <Setting name="renderPlane">0</Setting>
-            <Setting name="planeDim">500</Setting>
             <Setting name="renderPlaneHashes">0</Setting>
-            <Setting name="gridColor">255 255 255 20</Setting>
+            <Setting name="planeDim">500</Setting>
             <Setting name="gridSize">10 10 10</Setting>
-            <Setting name="snapToGrid">0</Setting>
+            <Setting name="gridColor">255 255 255 20</Setting>
+        </Group>
+    </Group>
+    <Group name="WorldEditor">
+        <Setting name="forceLoadDAE">0</Setting>
+        <Setting name="orthoFOV">50</Setting>
+        <Setting name="torsionPath">AssetWork_Debug.exe</Setting>
+        <Setting name="undoLimit">40</Setting>
+        <Setting name="dropType">screenCenter</Setting>
+        <Setting name="displayType">6</Setting>
+        <Setting name="orthoShowGrid">1</Setting>
+        <Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
+        <Group name="Color">
+            <Setting name="selectionBoxColor">255 255 0 255</Setting>
+            <Setting name="objSelectColor">255 0 0 255</Setting>
+            <Setting name="objectTextColor">255 255 255 255</Setting>
+            <Setting name="dragRectColor">255 255 0 255</Setting>
+            <Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
+            <Setting name="objMouseOverColor">0 255 0 255</Setting>
+            <Setting name="popupBackgroundColor">100 100 100 255</Setting>
+        </Group>
+        <Group name="Tools">
+            <Setting name="objectsUseBoxCenter">1</Setting>
+            <Setting name="dropAtScreenCenterMax">100</Setting>
+            <Setting name="boundingBoxCollision">0</Setting>
+            <Setting name="snapSoft">0</Setting>
+            <Setting name="snapGround">0</Setting>
+            <Setting name="dropAtScreenCenterScalar">1</Setting>
+            <Setting name="snapSoftSize">2</Setting>
+        </Group>
+        <Group name="ObjectIcons">
+            <Setting name="fadeIcons">1</Setting>
+            <Setting name="fadeIconsEndAlpha">0</Setting>
+            <Setting name="fadeIconsStartAlpha">255</Setting>
+            <Setting name="fadeIconsEndDist">20</Setting>
+            <Setting name="fadeIconsStartDist">8</Setting>
+        </Group>
+        <Group name="Theme">
+            <Setting name="windowTitleBGColor">50 50 50 255</Setting>
+            <Setting name="windowTitleFontColor">215 215 215 255</Setting>
+            <Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
+            <Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
+            <Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
+        </Group>
+        <Group name="Images">
+            <Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
+            <Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
+            <Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
+        </Group>
+        <Group name="Render">
+            <Setting name="renderObjText">1</Setting>
+            <Setting name="showMousePopupInfo">1</Setting>
+            <Setting name="renderPopupBackground">1</Setting>
+            <Setting name="renderObjHandle">1</Setting>
+            <Setting name="renderSelectionBox">1</Setting>
+        </Group>
+        <Group name="Grid">
+            <Setting name="gridMinorColor">51 51 51 100</Setting>
+            <Setting name="gridSnap">0</Setting>
+            <Setting name="gridOriginColor">255 255 255 100</Setting>
+            <Setting name="gridSize">1</Setting>
+            <Setting name="gridColor">102 102 102 100</Setting>
+        </Group>
+        <Group name="Docs">
+            <Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
+            <Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
+            <Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
+            <Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
         </Group>
     </Group>
+    <Group name="NavEditor">
+        <Setting name="SpawnClass">AIPlayer</Setting>
+    </Group>
     <Group name="LevelInformation">
         <Setting name="levelsDirectory">data/FPSGameplay/levels</Setting>
         <Group name="levels">
+            <Group name="PbrMatTest.mis">
+                <Setting name="cameraSpeed">5</Setting>
+            </Group>
             <Group name="BlankRoom.mis">
                 <Setting name="cameraSpeed">25</Setting>
             </Group>
@@ -129,7 +155,4 @@
     <Group name="ConvexEditor">
         <Setting name="materialName">Grid_512_Orange</Setting>
     </Group>
-    <Group name="NavEditor">
-        <Setting name="SpawnClass">AIPlayer</Setting>
-    </Group>
 </EditorSettings>

+ 1 - 1
Templates/BaseGame/game/tools/shapeEditor/gui/ShapeEditorToolbar.ed.gui

@@ -25,7 +25,7 @@
       canSaveDynamicFields = "0";
       Enabled = "1";
       isContainer = "1";
-      Profile = "menubarProfile";
+      Profile = "ToolsMenubarProfile";
       HorizSizing = "width";
       VertSizing = "bottom";
       Position = "0 0";

+ 2 - 2
Templates/BaseGame/game/tools/worldEditor/gui/EditorGui.ed.gui

@@ -23,7 +23,7 @@
       canSaveDynamicFields = "0";
       Enabled = "1";
       isContainer = "1";
-      Profile = "menubarProfile";
+      Profile = "ToolsMenubarProfile";
       HorizSizing = "width";
       VertSizing = "bottom";
       Position = "0 0";
@@ -313,7 +313,7 @@
       canSaveDynamicFields = "0";
       Enabled = "1";
       isContainer = "1";
-      Profile = "menubarProfile";
+      Profile = "ToolsMenubarProfile";
       HorizSizing = "width";
       VertSizing = "top";
       Position = "0 578";

+ 2 - 2
Templates/BaseGame/game/tools/worldEditor/gui/ToolsToolbar.ed.gui

@@ -4,7 +4,7 @@
    Enabled = "0";
    internalName = "ToolsToolbar";
    isContainer = "1";
-   Profile = "editorMenubarProfile";
+   Profile = "ToolsMenubarProfile";
    HorizSizing = "right";
    VertSizing = "bottom";
    Position = "0 31";
@@ -20,7 +20,7 @@
       canSaveDynamicFields = "0";
       Enabled = "1";
       isContainer = "1";
-      Profile = "ToolsGuiDefaultProfile";
+      Profile = "ToolsMenubarProfile";
       HorizSizing = "width";
       VertSizing = "bottom";
       position = "4 3";

+ 6 - 6
Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorToolbar.ed.gui

@@ -4,7 +4,7 @@
    internalName = "WorldEditorToolbar";
    Enabled = "1";
    isContainer = "1";
-   Profile = "ToolsGuiDefaultProfile";
+   Profile = "ToolsMenubarProfile";
    HorizSizing = "right";
    VertSizing = "bottom";
    Position = "306 0";
@@ -21,7 +21,7 @@
       canSaveDynamicFields = "0";
       Enabled = "1";
       isContainer = "1";
-      Profile = "ToolsGuiDefaultProfile";
+      Profile = "ToolsMenubarProfile";
       HorizSizing = "width";
       VertSizing = "bottom";
       Position = "0 3";
@@ -83,7 +83,7 @@
       
       new GuiControl(SnapToBar){
          isContainer = "1";
-         profile = "ToolsGuiDefaultProfile";
+         profile = "ToolsMenubarProfile";
          Position = "116 3";
          Extent = "123 27";
          Padding = "4";
@@ -296,7 +296,7 @@
       
       new GuiControl(ToggleButtonBar){
          isContainer = "1";
-         profile = "ToolsGuiDefaultProfile";
+         profile = "ToolsMenubarProfile";
          Position = "313 3";
          Extent = "65 27";
          
@@ -377,7 +377,7 @@
             
       new GuiControl(ToggleNodeBar){
          isContainer = "1";
-         profile = "ToolsGuiDefaultProfile";
+         profile = "ToolsMenubarProfile";
          Position = "386 3";
          Extent = "63 27";
          
@@ -441,7 +441,7 @@
             
       new GuiControl(PrefabBar){
          isContainer = "1";
-         profile = "ToolsGuiDefaultProfile";
+         profile = "ToolsMenubarProfile";
          Position = "386 3";
          Extent = "63 27";
          visible = true;

+ 1 - 0
Templates/BaseGame/game/tools/worldEditor/gui/WorldEditorTreeWindow.ed.gui

@@ -274,6 +274,7 @@
                   canSave = "1";
                   Visible = "1";
                   tooltipprofile = "ToolsGuiToolTipProfile";
+                  profile = "ToolsGuiScrollProfile";
                   hovertime = "1000";
                   Docking = "Client";
                   Margin = "0 0 0 0";

+ 1 - 0
Templates/BaseGame/game/tools/worldEditor/gui/guiWorldEditorCreatorWindow.ed.gui

@@ -79,6 +79,7 @@
             canSave = "1";
             Visible = "1";
             tooltipprofile = "ToolsGuiToolTipProfile";
+            profile = "ToolsGuiScrollProfile";
             hovertime = "1000";
             Docking = "Client";
             Margin = "0 0 0 0";

+ 6 - 1
Templates/BaseGame/game/tools/worldEditor/main.cs

@@ -135,7 +135,12 @@ function initializeWorldEditor()
    EVisibility.addOption( "Frustum Lock", "$Scene::lockCull", "" );
    EVisibility.addOption( "Disable Zone Culling", "$Scene::disableZoneCulling", "" );
    EVisibility.addOption( "Disable Terrain Occlusion", "$Scene::disableTerrainOcclusion", "" );
-
+   
+   EVisibility.addOption( "Probes: Attenuation", "$Probes::showAttenuation", "" );   
+   EVisibility.addOption( "Probes: Specular Cubemaps", "$Probes::showSpecularCubemaps", "" );   
+   EVisibility.addOption( "Probes: Diffuse Cubemaps", "$Probes::showDiffuseCubemaps", "" );   
+   EVisibility.addOption( "Probes: Contribution", "$Probes::showProbeContrib", "" );
+   
    EVisibility.addOption( "Colorblindness: Protanopia", "$CBV_Protanopia", "toggleColorBlindnessViz" );
    EVisibility.addOption( "Colorblindness: Protanomaly", "$CBV_Protanomaly", "toggleColorBlindnessViz" );
    EVisibility.addOption( "Colorblindness: Deuteranopia", "$CBV_Deuteranopia", "toggleColorBlindnessViz" );

+ 0 - 7
Templates/BaseGame/game/tools/worldEditor/scripts/lightViz.cs

@@ -51,13 +51,11 @@ function toggleColorBufferViz( %enable )
    }
    else if ( %enable )
    {
-      AL_DeferredShading.disable();
       AL_ColorBufferVisualize.enable();
    }
    else if ( !%enable )
    {
       AL_ColorBufferVisualize.disable();    
-      AL_DeferredShading.enable();
    }
 }
 
@@ -360,12 +358,7 @@ function toggleBackbufferViz( %enable )
    if ( %enable $= "" )
    {
       $AL_BackbufferVisualizeVar = AL_DeferredShading.isEnabled() ? true : false;
-      AL_DeferredShading.toggle();
    }
-   else if ( %enable )
-      AL_DeferredShading.disable();
-   else if ( !%enable )
-      AL_DeferredShading.enable();    
 }
 
 function toggleColorBlindnessViz( %enable )

+ 7 - 6
Templates/BaseGame/game/tools/worldEditor/scripts/menus.ed.cs

@@ -116,7 +116,7 @@ function EditorGui::buildMenus(%this)
       extent = Canvas.extent.x SPC "20";
       minExtent = "320 20";
       horizSizing = "width";
-      profile = "GuiMenuBarProfile";
+      profile = "ToolsGuiMenuBarProfile";
    };
    
    // File Menu
@@ -185,11 +185,12 @@ function EditorGui::buildMenus(%this)
       Item[9] = "Select..." TAB "" TAB "EditorGui.toggleObjectSelectionsWindow();";
       item[10] = "-";
       item[11] = "Audio Parameters..." TAB "" TAB "EditorGui.toggleSFXParametersWindow();";
-      item[12] = "Editor Settings..." TAB "" TAB "ESettingsWindow.ToggleVisibility();";
-      item[13] = "Snap Options..." TAB "" TAB "ESnapOptions.ToggleVisibility();";
-      item[14] = "-";
-      item[15] = "Game Options..." TAB "" TAB "Canvas.pushDialog(optionsDlg);";
-      item[16] = "PostEffect Manager" TAB "" TAB "Canvas.pushDialog(PostFXManager);";
+      item[12] = "Editor Settings..." TAB "" TAB "ESettingsWindow.toggleEditorSettings();";
+      item[13] = "Game Settings..." TAB "" TAB "ESettingsWindow.toggleProjectSettings();";
+      item[14] = "Snap Options..." TAB "" TAB "ESnapOptions.ToggleVisibility();";
+      item[15] = "-";
+      item[16] = "Game Options..." TAB "" TAB "Canvas.pushDialog(optionsDlg);";
+      item[17] = "PostEffect Manager" TAB "" TAB "Canvas.pushDialog(PostFXManager);";
    };
    %this.menuBar.insert(%editMenu);
       

+ 1 - 3
Templates/Full/game/Full.torsion.opt

@@ -8,13 +8,11 @@
 <OpenFiles>
 <File ScrollX="0" ScrollY="0">art\main.cs</File>
 <File ScrollX="0" ScrollY="9">core\main.cs</File>
-<File ScrollX="0" ScrollY="9">..\..\Empty\game\core\main.cs</File>
-<File ScrollX="0" ScrollY="15">..\..\BaseGame\game\core\main.cs</File>
 <File ScrollX="0" ScrollY="130">core\scripts\client\postFx\MLAA.cs</File>
 <File ScrollX="0" ScrollY="228">core\scripts\client\postFx\ssao.cs</File>
 <File ScrollX="0" ScrollY="114">core\scripts\client\postFx\hdr.cs</File>
 <File ScrollX="0" ScrollY="0">core\scripts\client\postFx\dof.cs</File>
 <File ScrollX="0" ScrollY="9">core\scripts\client\postFx\caustics.cs</File>
-<File ScrollX="0" ScrollY="0" Active="true">..\..\..\..\..\RnDBuildTest\My Projects\RnDTest\game\modules\TheFactory\components\FakeGISpotlight.cs</File>
+<File ScrollX="0" ScrollY="108" Active="true">tools\worldEditor\main.cs</File>
 </OpenFiles>
 </TorsionProjectOptions>