Added 90% of transform component & transform system.
This commit is contained in:
parent
cc6d1dd95b
commit
9c69d41a4e
|
@ -211,6 +211,7 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)"</Command
|
||||||
<ClInclude Include="src\Math\SHQuaternion.h" />
|
<ClInclude Include="src\Math\SHQuaternion.h" />
|
||||||
<ClInclude Include="src\Math\Transform\SHTransform.h" />
|
<ClInclude Include="src\Math\Transform\SHTransform.h" />
|
||||||
<ClInclude Include="src\Math\Transform\SHTransformComponent.h" />
|
<ClInclude Include="src\Math\Transform\SHTransformComponent.h" />
|
||||||
|
<ClInclude Include="src\Math\Transform\SHTransformSystem.h" />
|
||||||
<ClInclude Include="src\Math\Vector\SHVec2.h" />
|
<ClInclude Include="src\Math\Vector\SHVec2.h" />
|
||||||
<ClInclude Include="src\Math\Vector\SHVec3.h" />
|
<ClInclude Include="src\Math\Vector\SHVec3.h" />
|
||||||
<ClInclude Include="src\Math\Vector\SHVec4.h" />
|
<ClInclude Include="src\Math\Vector\SHVec4.h" />
|
||||||
|
@ -307,6 +308,7 @@ xcopy /s /r /y /q "$(SolutionDir)/Dependencies/dotnet/bin" "$(OutDir)"</Command
|
||||||
<ClCompile Include="src\Math\SHQuaternion.cpp" />
|
<ClCompile Include="src\Math\SHQuaternion.cpp" />
|
||||||
<ClCompile Include="src\Math\Transform\SHTransform.cpp" />
|
<ClCompile Include="src\Math\Transform\SHTransform.cpp" />
|
||||||
<ClCompile Include="src\Math\Transform\SHTransformComponent.cpp" />
|
<ClCompile Include="src\Math\Transform\SHTransformComponent.cpp" />
|
||||||
|
<ClCompile Include="src\Math\Transform\SHTransformSystem.cpp" />
|
||||||
<ClCompile Include="src\Math\Vector\SHVec2.cpp" />
|
<ClCompile Include="src\Math\Vector\SHVec2.cpp" />
|
||||||
<ClCompile Include="src\Math\Vector\SHVec3.cpp" />
|
<ClCompile Include="src\Math\Vector\SHVec3.cpp" />
|
||||||
<ClCompile Include="src\Math\Vector\SHVec4.cpp" />
|
<ClCompile Include="src\Math\Vector\SHVec4.cpp" />
|
||||||
|
|
|
@ -499,6 +499,7 @@
|
||||||
<Filter>Tools</Filter>
|
<Filter>Tools</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="src\Math\Transform\SHTransformComponent.h" />
|
<ClInclude Include="src\Math\Transform\SHTransformComponent.h" />
|
||||||
|
<ClInclude Include="src\Math\Transform\SHTransformSystem.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="src\ECS_Base\Components\SHComponent.cpp">
|
<ClCompile Include="src\ECS_Base\Components\SHComponent.cpp">
|
||||||
|
@ -740,5 +741,6 @@
|
||||||
<Filter>Tools</Filter>
|
<Filter>Tools</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="src\Math\Transform\SHTransformComponent.cpp" />
|
<ClCompile Include="src\Math\Transform\SHTransformComponent.cpp" />
|
||||||
|
<ClCompile Include="src\Math\Transform\SHTransformSystem.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -51,15 +51,6 @@ namespace SHADE
|
||||||
return (position != rhs.position || rotation != rhs.rotation || scale != rhs.scale);
|
return (position != rhs.position || rotation != rhs.rotation || scale != rhs.scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
/* Getter Function Definitions */
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
const SHMatrix& SHTransform::GetTRS() const
|
|
||||||
{
|
|
||||||
return trs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Public Function Member Definitions */
|
/* Public Function Member Definitions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -29,9 +29,11 @@ namespace SHADE
|
||||||
|
|
||||||
static const SHTransform Identity;
|
static const SHTransform Identity;
|
||||||
|
|
||||||
SHVec3 position;
|
SHVec3 position;
|
||||||
SHVec3 rotation;
|
SHVec3 rotation;
|
||||||
SHVec3 scale;
|
SHVec3 scale;
|
||||||
|
|
||||||
|
SHMatrix trs;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Constructors & Destructor */
|
/* Constructors & Destructor */
|
||||||
|
@ -54,24 +56,12 @@ namespace SHADE
|
||||||
[[nodiscard]] bool operator==(const SHTransform& rhs) const noexcept;
|
[[nodiscard]] bool operator==(const SHTransform& rhs) const noexcept;
|
||||||
[[nodiscard]] bool operator!=(const SHTransform& rhs) const noexcept;
|
[[nodiscard]] bool operator!=(const SHTransform& rhs) const noexcept;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
|
||||||
/* Getter Functions */
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
[[nodiscard]] const SHMatrix& GetTRS() const;
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Function Members */
|
/* Function Members */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
const SHMatrix& ComputeTRS();
|
const SHMatrix& ComputeTRS();
|
||||||
|
|
||||||
private:
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
|
||||||
/* Data Members */
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
SHMatrix trs;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace SHADE
|
} // namespace SHADE
|
|
@ -21,16 +21,15 @@ namespace SHADE
|
||||||
|
|
||||||
SHTransformComponent::SHTransformComponent() noexcept
|
SHTransformComponent::SHTransformComponent() noexcept
|
||||||
: SHComponent {}
|
: SHComponent {}
|
||||||
, parent { nullptr }
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Getter Function Definitions */
|
/* Getter Function Definitions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
const SHTransform* SHTransformComponent::GetParent() const noexcept
|
bool SHTransformComponent::HasChanged() const noexcept
|
||||||
{
|
{
|
||||||
return parent;
|
return dirty;
|
||||||
}
|
}
|
||||||
|
|
||||||
const SHVec3& SHTransformComponent::GetLocalPosition() const noexcept
|
const SHVec3& SHTransformComponent::GetLocalPosition() const noexcept
|
||||||
|
@ -63,65 +62,83 @@ namespace SHADE
|
||||||
return world.scale;
|
return world.scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
SHMatrix SHTransformComponent::GetLocalToWorld() const noexcept
|
const SHMatrix& SHTransformComponent::GetLocalToWorld() const noexcept
|
||||||
{
|
{
|
||||||
return parent != nullptr ? parent->GetTRS() : SHMatrix::Identity;
|
return local.trs;
|
||||||
}
|
}
|
||||||
|
|
||||||
SHMatrix SHTransformComponent::GetWorldToLocal() const noexcept
|
SHMatrix SHTransformComponent::GetWorldToLocal() const noexcept
|
||||||
{
|
{
|
||||||
return parent != nullptr ? SHMatrix::Inverse(parent->GetTRS()) : SHMatrix::Identity;
|
return SHMatrix::Inverse(local.trs);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SHMatrix& SHTransformComponent::GetTRS() const noexcept
|
const SHMatrix& SHTransformComponent::GetTRS() const noexcept
|
||||||
{
|
{
|
||||||
return world.GetTRS();
|
return world.trs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Setter Function Definitions */
|
/* Setter Function Definitions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
void SHTransformComponent::SetParent(const SHTransform* parentTransform) noexcept
|
|
||||||
{
|
|
||||||
if (parent == nullptr)
|
|
||||||
SHLOG_WARNING("Removing parent transform from Entity {}", GetEID())
|
|
||||||
|
|
||||||
parent = parentTransform;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SHTransformComponent::SetLocalPosition(const SHVec3& newLocalPosition) noexcept
|
void SHTransformComponent::SetLocalPosition(const SHVec3& newLocalPosition) noexcept
|
||||||
{
|
{
|
||||||
|
dirty = true;
|
||||||
local.position = newLocalPosition;
|
local.position = newLocalPosition;
|
||||||
updateQueue.push({ UpdateCommandType::LOCAL_POSITION, newLocalPosition });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTransformComponent::SetLocalRotation(const SHVec3& newLocalRotation) noexcept
|
void SHTransformComponent::SetLocalRotation(const SHVec3& newLocalRotation) noexcept
|
||||||
{
|
{
|
||||||
|
dirty = true;
|
||||||
local.rotation = newLocalRotation;
|
local.rotation = newLocalRotation;
|
||||||
updateQueue.push({ UpdateCommandType::LOCAL_ROTATION, newLocalRotation });
|
}
|
||||||
|
|
||||||
|
void SHTransformComponent::SetLocalRotation(float pitch, float yaw, float roll) noexcept
|
||||||
|
{
|
||||||
|
dirty = true;
|
||||||
|
|
||||||
|
local.rotation.x = pitch;
|
||||||
|
local.rotation.y = yaw;
|
||||||
|
local.rotation.z = roll;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTransformComponent::SetLocalScale(const SHVec3& newLocalScale) noexcept
|
void SHTransformComponent::SetLocalScale(const SHVec3& newLocalScale) noexcept
|
||||||
{
|
{
|
||||||
|
dirty = true;
|
||||||
local.scale = newLocalScale;
|
local.scale = newLocalScale;
|
||||||
updateQueue.push({ UpdateCommandType::LOCAL_SCALE, newLocalScale });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTransformComponent::SetWorldPosition(const SHVec3& newWorldPosition) noexcept
|
void SHTransformComponent::SetWorldPosition(const SHVec3& newWorldPosition) noexcept
|
||||||
{
|
{
|
||||||
|
dirty = true;
|
||||||
|
|
||||||
world.position = newWorldPosition;
|
world.position = newWorldPosition;
|
||||||
updateQueue.push({ UpdateCommandType::WORLD_POSITION, newWorldPosition });
|
updateQueue.push({ UpdateCommandType::WORLD_POSITION, newWorldPosition });
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTransformComponent::SetWorldRotation(const SHVec3& newWorldRotation) noexcept
|
void SHTransformComponent::SetWorldRotation(const SHVec3& newWorldRotation) noexcept
|
||||||
{
|
{
|
||||||
|
dirty = true;
|
||||||
|
|
||||||
world.rotation = newWorldRotation;
|
world.rotation = newWorldRotation;
|
||||||
updateQueue.push({ UpdateCommandType::WORLD_ROTATION, newWorldRotation });
|
updateQueue.push({ UpdateCommandType::WORLD_ROTATION, newWorldRotation });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHTransformComponent::SetWorldRotation(float pitch, float yaw, float roll) noexcept
|
||||||
|
{
|
||||||
|
dirty = true;
|
||||||
|
|
||||||
|
world.rotation.x = pitch;
|
||||||
|
world.rotation.y = yaw;
|
||||||
|
world.rotation.z = roll;
|
||||||
|
|
||||||
|
updateQueue.push({ UpdateCommandType::WORLD_ROTATION, SHVec3{ pitch, yaw, roll} });
|
||||||
|
}
|
||||||
|
|
||||||
void SHTransformComponent::SetWorldScale(const SHVec3& newWorldScale) noexcept
|
void SHTransformComponent::SetWorldScale(const SHVec3& newWorldScale) noexcept
|
||||||
{
|
{
|
||||||
|
dirty = true;
|
||||||
|
|
||||||
world.scale = newWorldScale;
|
world.scale = newWorldScale;
|
||||||
updateQueue.push({ UpdateCommandType::WORLD_SCALE, newWorldScale });
|
updateQueue.push({ UpdateCommandType::WORLD_SCALE, newWorldScale });
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,14 @@ namespace SHADE
|
||||||
|
|
||||||
class SH_API SHTransformComponent : public SHComponent
|
class SH_API SHTransformComponent : public SHComponent
|
||||||
{
|
{
|
||||||
public:
|
private:
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Friends */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
friend class SHTransformSystem;
|
||||||
|
|
||||||
|
public:
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Constructors & Destructor */
|
/* Constructors & Destructor */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
@ -45,7 +51,7 @@ namespace SHADE
|
||||||
/* Getter Functions */
|
/* Getter Functions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
[[nodiscard]] const SHTransform* GetParent () const noexcept;
|
[[nodiscard]] bool HasChanged () const noexcept;
|
||||||
|
|
||||||
[[nodiscard]] const SHVec3& GetLocalPosition () const noexcept;
|
[[nodiscard]] const SHVec3& GetLocalPosition () const noexcept;
|
||||||
[[nodiscard]] const SHVec3& GetLocalRotation () const noexcept;
|
[[nodiscard]] const SHVec3& GetLocalRotation () const noexcept;
|
||||||
|
@ -54,7 +60,7 @@ namespace SHADE
|
||||||
[[nodiscard]] const SHVec3& GetWorldRotation () const noexcept;
|
[[nodiscard]] const SHVec3& GetWorldRotation () const noexcept;
|
||||||
[[nodiscard]] const SHVec3& GetWorldScale () const noexcept;
|
[[nodiscard]] const SHVec3& GetWorldScale () const noexcept;
|
||||||
|
|
||||||
[[nodiscard]] SHMatrix GetLocalToWorld () const noexcept;
|
[[nodiscard]] const SHMatrix& GetLocalToWorld () const noexcept;
|
||||||
[[nodiscard]] SHMatrix GetWorldToLocal () const noexcept;
|
[[nodiscard]] SHMatrix GetWorldToLocal () const noexcept;
|
||||||
|
|
||||||
[[nodiscard]] const SHMatrix& GetTRS () const noexcept;
|
[[nodiscard]] const SHMatrix& GetTRS () const noexcept;
|
||||||
|
@ -63,13 +69,13 @@ namespace SHADE
|
||||||
/* Setter Functions */
|
/* Setter Functions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
void SetParent (const SHTransform* parentTransform) noexcept;
|
|
||||||
|
|
||||||
void SetLocalPosition (const SHVec3& newLocalPosition) noexcept;
|
void SetLocalPosition (const SHVec3& newLocalPosition) noexcept;
|
||||||
void SetLocalRotation (const SHVec3& newLocalRotation) noexcept;
|
void SetLocalRotation (const SHVec3& newLocalRotation) noexcept;
|
||||||
|
void SetLocalRotation (float pitch, float yaw, float roll) noexcept;
|
||||||
void SetLocalScale (const SHVec3& newLocalScale) noexcept;
|
void SetLocalScale (const SHVec3& newLocalScale) noexcept;
|
||||||
void SetWorldPosition (const SHVec3& newWorldPosition) noexcept;
|
void SetWorldPosition (const SHVec3& newWorldPosition) noexcept;
|
||||||
void SetWorldRotation (const SHVec3& newWorldRotation) noexcept;
|
void SetWorldRotation (const SHVec3& newWorldRotation) noexcept;
|
||||||
|
void SetWorldRotation (float pitch, float yaw, float roll) noexcept;
|
||||||
void SetWorldScale (const SHVec3& newWorldScale) noexcept;
|
void SetWorldScale (const SHVec3& newWorldScale) noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -79,10 +85,7 @@ namespace SHADE
|
||||||
|
|
||||||
enum class UpdateCommandType
|
enum class UpdateCommandType
|
||||||
{
|
{
|
||||||
LOCAL_POSITION
|
WORLD_POSITION
|
||||||
, LOCAL_ROTATION
|
|
||||||
, LOCAL_SCALE
|
|
||||||
, WORLD_POSITION
|
|
||||||
, WORLD_ROTATION
|
, WORLD_ROTATION
|
||||||
, WORLD_SCALE
|
, WORLD_SCALE
|
||||||
};
|
};
|
||||||
|
@ -104,11 +107,12 @@ namespace SHADE
|
||||||
/* Data Members */
|
/* Data Members */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
const SHTransform* parent;
|
bool dirty;
|
||||||
SHTransform local;
|
|
||||||
SHTransform world;
|
|
||||||
|
|
||||||
UpdateQueue updateQueue;
|
SHTransform local; // Local TRS holds Local To World Transform
|
||||||
|
SHTransform world;
|
||||||
|
|
||||||
|
UpdateQueue updateQueue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,121 @@
|
||||||
|
/****************************************************************************************
|
||||||
|
* \file SHTransformSystem.cpp
|
||||||
|
* \author Diren D Bharwani, diren.dbharwani, 390002520
|
||||||
|
* \brief Implementation for the Transform System
|
||||||
|
*
|
||||||
|
* \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
#include <SHpch.h>
|
||||||
|
|
||||||
|
// Primary Header
|
||||||
|
#include "SHTransformSystem.h"
|
||||||
|
|
||||||
|
// Project Headers
|
||||||
|
#include "Scene/SHSceneManager.h"
|
||||||
|
#include "ECS_Base/Managers/SHComponentManager.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Constructors & Destructor Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
SHTransformSystem::SHTransformSystem()
|
||||||
|
: SHSystemRoutine { "Transform Routine", false }
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Public Function Member Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void SHTransformSystem::Execute(double dt) noexcept
|
||||||
|
{
|
||||||
|
// Get the current scene graph to traverse and update
|
||||||
|
auto& sceneGraph = SHSceneManager::GetCurrentSceneGraph();
|
||||||
|
UpdateEntity(sceneGraph.GetRoot());
|
||||||
|
|
||||||
|
// Clear all dirty flags
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Private Function Member Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void SHTransformSystem::UpdateEntity(const SHSceneNode* node)
|
||||||
|
{
|
||||||
|
const auto* NODE_TRANSFORM = SHComponentManager::GetComponent_s<SHTransformComponent>(node->GetEntityID());
|
||||||
|
const bool HAS_PARENT_CHANGED = NODE_TRANSFORM && NODE_TRANSFORM->dirty;
|
||||||
|
|
||||||
|
for (const auto* child : node->GetChildren())
|
||||||
|
{
|
||||||
|
const bool HAS_TRANSFORM = SHComponentManager::HasComponent<SHTransformComponent>(child->GetEntityID());
|
||||||
|
if (!HAS_TRANSFORM)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
auto* childTransform = SHComponentManager::GetComponent<SHTransformComponent>(child->GetEntityID());
|
||||||
|
|
||||||
|
if (childTransform->dirty || HAS_PARENT_CHANGED)
|
||||||
|
UpdateTransform(*childTransform, NODE_TRANSFORM);
|
||||||
|
|
||||||
|
UpdateEntity(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHTransformSystem::UpdateTransform(SHTransformComponent& tf, const SHTransformComponent* parent)
|
||||||
|
{
|
||||||
|
SHMatrix localToWorld = SHMatrix::Identity;
|
||||||
|
SHMatrix worldToLocal = SHMatrix::Identity;
|
||||||
|
|
||||||
|
if (parent)
|
||||||
|
{
|
||||||
|
localToWorld = parent->GetTRS();
|
||||||
|
worldToLocal = SHMatrix::Inverse(tf.local.trs);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!tf.updateQueue.empty())
|
||||||
|
{
|
||||||
|
const auto& UPDATE_COMMAND = tf.updateQueue.front();
|
||||||
|
|
||||||
|
switch (UPDATE_COMMAND.type)
|
||||||
|
{
|
||||||
|
case SHTransformComponent::UpdateCommandType::WORLD_POSITION:
|
||||||
|
{
|
||||||
|
tf.local.position = SHVec3::Transform(UPDATE_COMMAND.data, worldToLocal);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SHTransformComponent::UpdateCommandType::WORLD_ROTATION:
|
||||||
|
{
|
||||||
|
tf.local.rotation = tf.world.rotation;
|
||||||
|
if (parent)
|
||||||
|
tf.local.rotation -= parent->GetLocalRotation();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SHTransformComponent::UpdateCommandType::WORLD_SCALE:
|
||||||
|
{
|
||||||
|
tf.local.scale = tf.world.scale;
|
||||||
|
if (parent)
|
||||||
|
tf.local.scale /= parent->GetLocalScale();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: break; // Redundant
|
||||||
|
}
|
||||||
|
|
||||||
|
tf.updateQueue.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
tf.local.trs = localToWorld;
|
||||||
|
|
||||||
|
tf.world.position = SHVec3::Transform(tf.local.position, localToWorld);
|
||||||
|
tf.world.rotation = tf.local.rotation + (parent ? parent->GetLocalRotation() : SHVec3::Zero);
|
||||||
|
tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One);
|
||||||
|
|
||||||
|
tf.world.ComputeTRS();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace SHADE
|
|
@ -0,0 +1,57 @@
|
||||||
|
/****************************************************************************************
|
||||||
|
* \file SHTransformSystem.h
|
||||||
|
* \author Diren D Bharwani, diren.dbharwani, 390002520
|
||||||
|
* \brief Interface for the Transform System
|
||||||
|
*
|
||||||
|
* \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Project Headers
|
||||||
|
#include "SHTransformComponent.h"
|
||||||
|
#include "Scene/SHSceneGraph.h"
|
||||||
|
#include "ECS_Base/System/SHSystemRoutine.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Type Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class SH_API SHTransformSystem : public SHSystemRoutine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Constructors & Destructor */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
SHTransformSystem ();
|
||||||
|
~SHTransformSystem () = default;
|
||||||
|
|
||||||
|
SHTransformSystem (const SHTransformSystem&) = delete;
|
||||||
|
SHTransformSystem (SHTransformSystem&&) = delete;
|
||||||
|
|
||||||
|
SHTransformSystem& operator= (const SHTransformSystem&) = delete;
|
||||||
|
SHTransformSystem& operator= (SHTransformSystem&&) = delete;
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Function Members */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void Execute(double dt) noexcept override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Function Members */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void UpdateEntity (const SHSceneNode* node);
|
||||||
|
static void UpdateTransform(SHTransformComponent& tf, const SHTransformComponent* parent = nullptr);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace SHADE
|
Loading…
Reference in New Issue