Bomberman-OverlordEngine-x64 / OverlordEngine / Components / TransformComponent.h
TransformComponent.h
Raw
#pragma once

class ControllerComponent;
class RigidBodyComponent;

class TransformComponent : public BaseComponent
{
public:
	TransformComponent();
	~TransformComponent() override = default;

	TransformComponent(const TransformComponent& other) = delete;
	TransformComponent(TransformComponent&& other) noexcept = delete;
	TransformComponent& operator=(const TransformComponent& other) = delete;
	TransformComponent& operator=(TransformComponent&& other) noexcept = delete;


	void Translate(float x, float y, float z);
	void Translate(const XMFLOAT3& position);
	void Translate(const XMVECTOR& position);

	void Rotate(float x, float y, float z, bool degrees = true);
	void Rotate(const XMFLOAT3& rotation, bool degrees = true);
	void Rotate(const XMVECTOR& rotation, bool isQuaternion = true);

	void Scale(float x, float y, float z);
	void Scale(float s);
	void Scale(const XMFLOAT3& scale);

	const XMFLOAT3& GetPosition() const { return m_Position; }
	const XMFLOAT3& GetWorldPosition() const { return m_WorldPosition; }
	const XMFLOAT3& GetScale() const { return m_Scale; }
	const XMFLOAT3& GetWorldScale() const { return m_WorldScale; }
	const XMFLOAT4& GetRotation() const { return m_Rotation; }
	const XMFLOAT4& GetWorldRotation() const { return m_WorldRotation; }
	const XMFLOAT4X4& GetWorld() const { return m_World; }

	const XMFLOAT3& GetForward() const { return m_Forward; }
	const XMFLOAT3& GetUp() const { return m_Up; }
	const XMFLOAT3& GetRight() const { return m_Right; }

	bool IsDirty() const { return m_IsDirty; }
	void SetRigidBodyComponent(RigidBodyComponent* pRigidBody) { m_pRigidBodyComponent = pRigidBody; }
	void SetControllerComponent(ControllerComponent* pController) { m_pControllerComponent = pController; }

protected:

	void Initialize(const SceneContext& sceneContext) override;
	void Update(const SceneContext& sceneContext) override;

	void UpdateTransforms();
	bool CheckConstraints() const;

	bool CheckIfDirty();
	bool m_IsDirty{};

private:

	XMFLOAT3 m_Position{}, m_WorldPosition{};
	XMFLOAT3 m_Scale{}, m_WorldScale{};
	XMFLOAT3 m_Forward{}, m_Up{}, m_Right{};
	XMFLOAT4 m_Rotation{}, m_WorldRotation{};
	XMFLOAT4X4 m_World{};
	TransformChanged m_IsTransformChanged{};

	RigidBodyComponent* m_pRigidBodyComponent{};
	ControllerComponent* m_pControllerComponent{};
};