Jelajahi Sumber

Integrates components into the update and render loop.

Areloch 9 tahun lalu
induk
melakukan
b3b50abd9b

+ 8 - 0
Engine/source/T3D/gameBase/processList.cpp

@@ -27,6 +27,9 @@
 #include "platform/profiler.h"
 #include "console/consoleTypes.h"
 
+#include "T3D/Components/coreInterfaces.h"
+
+#include "T3D/Components/Component.h"
 //----------------------------------------------------------------------------
 
 ProcessObject::ProcessObject()
@@ -268,6 +271,11 @@ void ProcessList::advanceObjects()
       onTickObject(pobj);
    }
 
+   for (U32 i = 0; i < UpdateInterface::all.size(); i++)
+   {
+      UpdateInterface::all[i]->processTick();
+   }
+
    mTotalTicks++;
 
    PROFILE_END();

+ 25 - 0
Engine/source/T3D/gameBase/std/stdGameProcess.cpp

@@ -36,6 +36,8 @@
 #include "T3D/gameBase/gameConnection.h"
 #include "T3D/gameBase/std/stdMoveList.h"
 #include "T3D/fx/cameraFXMgr.h"
+#include "T3D/Components/coreInterfaces.h"
+#include "T3D/Components/Component.h"
 
 MODULE_BEGIN( ProcessList )
 
@@ -132,6 +134,16 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta )
       obj = obj->mProcessLink.next;
    }
 
+   for (U32 i = 0; i < UpdateInterface::all.size(); i++)
+   {
+      Component *comp = dynamic_cast<Component*>(UpdateInterface::all[i]);
+
+      if (!comp->isClientObject() || !comp->isActive())
+            continue;
+
+      UpdateInterface::all[i]->interpolateTick(mLastDelta);
+   }
+
    // Inform objects of total elapsed delta so they can advance
    // client side animations.
    F32 dt = F32(timeDelta) / 1000;
@@ -146,6 +158,19 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta )
       obj = obj->mProcessLink.next;
    }
    
+   for (U32 i = 0; i < UpdateInterface::all.size(); i++)
+   {
+      Component *comp = dynamic_cast<Component*>(UpdateInterface::all[i]);
+
+      if (comp)
+      {
+         if (!comp->isClientObject() || !comp->isActive())
+            continue;
+      }
+
+      UpdateInterface::all[i]->advanceTime(dt);
+   }
+
    return ret;
 }
 

+ 13 - 1
Engine/source/scene/sceneRenderState.cpp

@@ -26,7 +26,8 @@
 #include "renderInstance/renderPassManager.h"
 #include "math/util/matrixSet.h"
 
-
+#include "T3D/Components/render/renderComponentInterface.h"
+#include "T3D/Components/Component.h"
 
 //-----------------------------------------------------------------------------
 
@@ -104,6 +105,17 @@ void SceneRenderState::renderObjects( SceneObject** objects, U32 numObjects )
       SceneObject* object = objects[ i ];
       object->prepRenderImage( this );
    }
+
+   U32 interfaceCount = RenderComponentInterface::all.size();
+   for (U32 i = 0; i < RenderComponentInterface::all.size(); i++)
+   {
+      Component* comp = dynamic_cast<Component*>(RenderComponentInterface::all[i]);
+
+      if (comp->isClientObject() && comp->isActive())
+      {
+         RenderComponentInterface::all[i]->prepRenderImage(this);
+      }
+   }
    PROFILE_END();
 
    // Render what the objects have batched.