Browse Source

Adds some console preference variables for object fade overriding on TSStatics

Areloch 5 years ago
parent
commit
a257dc8399
2 changed files with 59 additions and 1 deletions
  1. 46 1
      Engine/source/T3D/tsStatic.cpp
  2. 13 0
      Engine/source/T3D/tsStatic.h

+ 46 - 1
Engine/source/T3D/tsStatic.cpp

@@ -100,6 +100,11 @@ ConsoleDocClass(TSStatic,
    "@ingroup gameObjects\n"
 );
 
+bool TSStatic::smUseStaticObjectFade = false;
+F32 TSStatic::smStaticObjectFadeStart = 50;
+F32 TSStatic::smStaticObjectFadeEnd = 75;
+F32 TSStatic::smStaticObjectUnfadeableSize = 75;
+
 TSStatic::TSStatic()
    :
    cubeDescId(0),
@@ -271,6 +276,17 @@ void TSStatic::initPersistFields()
    Parent::initPersistFields();
 }
 
+void TSStatic::consoleInit()
+{
+   Parent::consoleInit();
+
+   // Vars for debug rendering while the RoadEditor is open, only used if smEditorOpen is true.
+   Con::addVariable("$pref::useStaticObjectFade", TypeBool, &TSStatic::smUseStaticObjectFade, "Indicates if all statics should utilize the distance-based object fadeout logic.\n");
+   Con::addVariable("$pref::staticObjectFadeStart", TypeF32, &TSStatic::smStaticObjectFadeStart, "Distance at which static object fading begins if $pref::useStaticObjectFade is on.\n");
+   Con::addVariable("$pref::staticObjectFadeEnd", TypeF32, &TSStatic::smStaticObjectFadeEnd, "Distance at which static object fading should have fully faded if $pref::useStaticObjectFade is on.\n");
+   Con::addVariable("$pref::staticObjectUnfadeableSize", TypeF32, &TSStatic::smStaticObjectUnfadeableSize, "Size of object where if the bounds is at or bigger than this, it will be ignored in the $pref::useStaticObjectFade logic. Useful for very large, distance-important objects.\n");
+}
+
 bool TSStatic::_setShapeAsset(void* obj, const char* index, const char* data)
 {
    TSStatic* ts = static_cast<TSStatic*>(obj);// ->setFile(FileName(data));
@@ -808,6 +824,35 @@ void TSStatic::prepRenderImage(SceneRenderState* state)
          }
       }
    }
+   else if (smUseStaticObjectFade)
+   {
+      //todo, scale-adjust the fade via bounds sizing?
+      Box3F bounds = getObjBox();
+      bounds.scale(getScale());
+
+      F32 boundsLen = bounds.len();
+
+      if (boundsLen < smStaticObjectUnfadeableSize)
+      {
+         F32 distAdjust = (boundsLen) / (smStaticObjectUnfadeableSize);
+         distAdjust = 1 - distAdjust;
+
+         dist *= distAdjust;
+
+         mAlphaFade = 1.0f;
+         if ((smStaticObjectFadeStart < smStaticObjectFadeEnd) && smStaticObjectFadeStart > 0.1f)
+         {
+            if (dist >= smStaticObjectFadeEnd)
+            {
+               return;
+            }
+            if (dist > smStaticObjectFadeStart)
+            {
+               mAlphaFade -= ((dist - smStaticObjectFadeStart) / (smStaticObjectFadeEnd - smStaticObjectFadeStart));
+            }
+         }
+      }
+   }
 
    F32 invScale = (1.0f / getMax(getMax(mObjScale.x, mObjScale.y), mObjScale.z));
 
@@ -880,7 +925,7 @@ void TSStatic::prepRenderImage(SceneRenderState* state)
    mShapeInstance->animate();
    if (mShapeInstance)
    {
-      if (mUseAlphaFade)
+      if (mUseAlphaFade || smUseStaticObjectFade)
       {
          mShapeInstance->setAlphaAlways(mAlphaFade);
          S32 s = mShapeInstance->mMeshObjects.size();

+ 13 - 0
Engine/source/T3D/tsStatic.h

@@ -240,6 +240,7 @@ public:
 
    DECLARE_CONOBJECT(TSStatic);
    static void initPersistFields();
+   static void consoleInit();
    static bool _setShapeAsset(void* obj, const char* index, const char* data);
    static bool _setShapeName(void* obj, const char* index, const char* data);
    static bool _setFieldSkin(void* object, const char* index, const char* data);
@@ -288,6 +289,18 @@ private:
 protected:
    Vector<S32>    mDecalDetails;
    Vector<S32>* mDecalDetailsPtr;
+
+   ///Indicates if all statics should utilize the distance-based object fadeout logic
+   static bool    smUseStaticObjectFade;
+
+   ///Distance at which static object fading begins if smUseStaticObjectFade is on
+   static F32 smStaticObjectFadeStart;
+
+   ///Distance at which static object fading should have fully faded if smUseStaticObjectFade is on
+   static F32 smStaticObjectFadeEnd;
+
+   ///Size of object where if the bounds is at or bigger than this, it will be ignored in the smUseStaticObjectFade logic. Useful for very large, distance-important objects
+   static F32 smStaticObjectUnfadeableSize;
 public:
    bool           mIgnoreZodiacs;
    bool           mHasGradients;