Fixed incorrect FixedUpdate() execution and added Time.FixedDeltaTime
This commit is contained in:
parent
4e97392098
commit
c08afcb804
|
@ -327,6 +327,11 @@ namespace SHADE
|
|||
void SHPhysicsSystem::PhysicsFixedUpdate::Execute(double dt) noexcept
|
||||
{
|
||||
auto* physicsSystem = reinterpret_cast<SHPhysicsSystem*>(GetSystem());
|
||||
auto scriptSys = SHSystemManager::GetSystem<SHScriptEngine>();
|
||||
if (!scriptSys)
|
||||
{
|
||||
SHLOG_WARNING("[SHPhysicsSystem] Unable to invoke FixedUpdate() on scripts due to missing SHScriptEngine!");
|
||||
}
|
||||
|
||||
fixedTimeStep = 1.0 / physicsSystem->fixedDT;
|
||||
accumulatedTime += dt;
|
||||
|
@ -334,6 +339,10 @@ namespace SHADE
|
|||
int count = 0;
|
||||
while (accumulatedTime > fixedTimeStep)
|
||||
{
|
||||
if (scriptSys)
|
||||
{
|
||||
scriptSys->ExecuteFixedUpdates();
|
||||
}
|
||||
physicsSystem->world->update(static_cast<rp3d::decimal>(fixedTimeStep));
|
||||
|
||||
accumulatedTime -= fixedTimeStep;
|
||||
|
@ -359,7 +368,6 @@ namespace SHADE
|
|||
auto scriptSys = SHSystemManager::GetSystem<SHScriptEngine>();
|
||||
if (scriptSys)
|
||||
{
|
||||
scriptSys->ExecuteFixedUpdates();
|
||||
scriptSys->ExecuteCollisionFunctions();
|
||||
}
|
||||
else
|
||||
|
|
|
@ -50,4 +50,16 @@ namespace SHADE
|
|||
SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get trigger events. Empty vector returned instead.");
|
||||
return emptyVec;
|
||||
}
|
||||
|
||||
double SHPhysicsSystemInterface::GetFixedDT() noexcept
|
||||
{
|
||||
auto phySystem = SHSystemManager::GetSystem<SHPhysicsSystem>();
|
||||
if (phySystem)
|
||||
{
|
||||
return phySystem->GetFixedDT();
|
||||
}
|
||||
|
||||
SHLOG_WARNING("[SHPhysicsSystemInterface] Failed to get fixed delta time. 0.0 returned instead.");
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,5 +41,6 @@ namespace SHADE
|
|||
/*---------------------------------------------------------------------------------*/
|
||||
[[nodiscard]] static const std::vector<SHCollisionEvent>& GetCollisionInfo() noexcept;
|
||||
[[nodiscard]] static const std::vector<SHCollisionEvent>& GetTriggerInfo() noexcept;
|
||||
[[nodiscard]] static double GetFixedDT() noexcept;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -14,6 +14,9 @@ of DigiPen Institute of Technology is prohibited.
|
|||
*//*************************************************************************************/
|
||||
// Precompiled Headers
|
||||
#include "SHpch.h"
|
||||
// External Dependencies
|
||||
#include "FRC/SHFramerateController.h"
|
||||
#include "Physics/SHPhysicsSystemInterface.h"
|
||||
// Primary Header
|
||||
#include "Time.hxx"
|
||||
|
||||
|
@ -26,4 +29,8 @@ namespace SHADE
|
|||
{
|
||||
return SHFrameRateController::GetRawDeltaTime();
|
||||
}
|
||||
double Time::FixedDeltaTime::get()
|
||||
{
|
||||
return SHPhysicsSystemInterface::GetFixedDT();
|
||||
}
|
||||
}
|
|
@ -14,8 +14,6 @@ of DigiPen Institute of Technology is prohibited.
|
|||
*//*************************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "FRC/SHFramerateController.h"
|
||||
|
||||
namespace SHADE
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -29,13 +27,18 @@ namespace SHADE
|
|||
/*-----------------------------------------------------------------------------*/
|
||||
/// <summary>
|
||||
/// Time taken to process the previous frame.
|
||||
/// Note, is affected by TimeScale. Use UnscaledDeltaTime if you wish to retrieve
|
||||
/// real world time. This is also affected by MaxDeltaTime clamping that
|
||||
/// UnscaledDeltaTime is subject to.
|
||||
/// </summary>
|
||||
static property double DeltaTime
|
||||
{
|
||||
double get();
|
||||
}
|
||||
/// <summary>
|
||||
/// Time taken for Physics simulations. You should use this for operations
|
||||
/// within Script.FixedUpdate()
|
||||
/// </summary>
|
||||
static property double FixedDeltaTime
|
||||
{
|
||||
double get();
|
||||
}
|
||||
};
|
||||
}
|
|
@ -41,6 +41,11 @@ public class PhysicsTest : Script
|
|||
Debug.Log($"{Transform.LocalPosition.y}");
|
||||
}
|
||||
|
||||
protected override void fixedUpdate()
|
||||
{
|
||||
Debug.Log("Fixed Update");
|
||||
}
|
||||
|
||||
protected override void onCollisionEnter(CollisionInfo info)
|
||||
{
|
||||
Debug.Log($"Collision Enter: {info.GameObject.Name}");
|
||||
|
|
Loading…
Reference in New Issue