Fixed transform updates to clear dirty flags appropriately #280
|
@ -82,7 +82,7 @@
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 0, y: 4.28833103, z: 0}
|
Translate: {x: 0, y: 4.28833103, z: 0}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -0, y: 0, z: -0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 0, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
RigidBody Component:
|
RigidBody Component:
|
||||||
Type: Dynamic
|
Type: Dynamic
|
||||||
|
@ -108,14 +108,6 @@
|
||||||
Density: 1
|
Density: 1
|
||||||
Position Offset: {x: 0, y: 0, z: 0}
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
- Is Trigger: false
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 2, y: 2, z: 2}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
- EID: 65537
|
- EID: 65537
|
||||||
|
|
|
@ -53,7 +53,7 @@ namespace SHADE
|
||||||
|
|
||||||
for (auto value : values)
|
for (auto value : values)
|
||||||
{
|
{
|
||||||
max = Min(max, value);
|
max = Max(max, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return max;
|
return max;
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "ECS_Base/Managers/SHComponentManager.h"
|
#include "ECS_Base/Managers/SHComponentManager.h"
|
||||||
#include "ECS_Base/Managers/SHEntityManager.h"
|
#include "ECS_Base/Managers/SHEntityManager.h"
|
||||||
#include "ECS_Base/Managers/SHSystemManager.h"
|
#include "ECS_Base/Managers/SHSystemManager.h"
|
||||||
|
#include "Editor/SHEditor.h"
|
||||||
#include "Math/SHMathHelpers.h"
|
#include "Math/SHMathHelpers.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
|
@ -35,7 +36,7 @@ namespace SHADE
|
||||||
{}
|
{}
|
||||||
|
|
||||||
SHTransformSystem::TransformPostPhysicsUpdate::TransformPostPhysicsUpdate()
|
SHTransformSystem::TransformPostPhysicsUpdate::TransformPostPhysicsUpdate()
|
||||||
: SHSystemRoutine { "Transform Post-Physics Update", false }
|
: SHSystemRoutine { "Transform Post-Physics Update", true }
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +55,28 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
// Get the current scene graph to traverse and update
|
// Get the current scene graph to traverse and update
|
||||||
const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph();
|
const auto& SCENE_GRAPH = SHSceneManager::GetCurrentSceneGraph();
|
||||||
|
|
||||||
|
#ifdef SHEDITOR
|
||||||
|
|
||||||
|
// When editor is not in play, only clear all dirty flags. No update required.
|
||||||
|
|
||||||
|
const auto* EDITOR = SHSystemManager::GetSystem<SHEditor>();
|
||||||
|
if (EDITOR && EDITOR->editorState != SHEditor::State::PLAY)
|
||||||
|
{
|
||||||
|
auto& transformsSet = SHComponentManager::GetDense<SHTransformComponent>();
|
||||||
|
for (auto& tfComp : transformsSet)
|
||||||
|
tfComp.dirty = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UpdateEntity(SCENE_GRAPH.GetRoot(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
UpdateEntity(SCENE_GRAPH.GetRoot(), true);
|
UpdateEntity(SCENE_GRAPH.GetRoot(), true);
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTransformSystem::Init()
|
void SHTransformSystem::Init()
|
||||||
|
|
|
@ -107,6 +107,7 @@ namespace SHADE
|
||||||
const SHVec3& RELATIVE_EXTENTS = box->GetRelativeExtents();
|
const SHVec3& RELATIVE_EXTENTS = box->GetRelativeExtents();
|
||||||
|
|
||||||
// Recompute world extents based on new scale and fixed relative extents
|
// Recompute world extents based on new scale and fixed relative extents
|
||||||
|
|
||||||
const SHVec3 WORLD_EXTENTS = RELATIVE_EXTENTS * (scale * 0.5f);
|
const SHVec3 WORLD_EXTENTS = RELATIVE_EXTENTS * (scale * 0.5f);
|
||||||
box->SetWorldExtents(WORLD_EXTENTS);
|
box->SetWorldExtents(WORLD_EXTENTS);
|
||||||
|
|
||||||
|
@ -118,6 +119,7 @@ namespace SHADE
|
||||||
const float RELATIVE_RADIUS = sphere->GetRelativeRadius();
|
const float RELATIVE_RADIUS = sphere->GetRelativeRadius();
|
||||||
|
|
||||||
// Recompute world radius based on new scale and fixed radius
|
// Recompute world radius based on new scale and fixed radius
|
||||||
|
|
||||||
const float MAX_SCALE = SHMath::Max({ scale.x, scale.y, scale.z });
|
const float MAX_SCALE = SHMath::Max({ scale.x, scale.y, scale.z });
|
||||||
const float WORLD_RADIUS = RELATIVE_RADIUS * MAX_SCALE * 0.5f;
|
const float WORLD_RADIUS = RELATIVE_RADIUS * MAX_SCALE * 0.5f;
|
||||||
sphere->SetWorldRadius(WORLD_RADIUS);
|
sphere->SetWorldRadius(WORLD_RADIUS);
|
||||||
|
|
|
@ -206,7 +206,7 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the half extents relative to world scale
|
// Set the half extents relative to world scale
|
||||||
const SHVec3 WORLD_EXTENTS = correctedHalfExtents * COLLIDER->GetScale();
|
const SHVec3 WORLD_EXTENTS = correctedHalfExtents * COLLIDER->GetScale() * 0.5f;
|
||||||
|
|
||||||
if (type != Type::BOX)
|
if (type != Type::BOX)
|
||||||
{
|
{
|
||||||
|
|
|
@ -309,12 +309,9 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
colliderComponent->position = WORLD_POS;
|
colliderComponent->position = WORLD_POS;
|
||||||
colliderComponent->orientation = WORLD_ROT;
|
colliderComponent->orientation = WORLD_ROT;
|
||||||
|
colliderComponent->scale = WORLD_SCL;
|
||||||
|
|
||||||
if (colliderComponent->scale != WORLD_SCL)
|
colliderComponent->RecomputeCollisionShapes();
|
||||||
{
|
|
||||||
colliderComponent->scale = WORLD_SCL;
|
|
||||||
colliderComponent->RecomputeCollisionShapes();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue