#pragma once
#include "TransformComponent.h"

namespace Nuake
{
    TransformComponent::TransformComponent()
    {
        GlobalTranslation = Vector3(0, 0, 0);
        Translation = Vector3(0, 0, 0);

        Rotation = Quat(1, 0, 0, 0);
        GlobalRotation = Rotation;

        GlobalScale = Vector3(1, 1, 1);
        Scale = GlobalScale;

        LocalTransform = Matrix4(1);
        GlobalTransform = Matrix4(1);
    }

    void TransformComponent::SetLocalRotation(const Quat& quat)
    {
        Rotation = normalize(quat);
        Dirty = true;
    }

    Quat TransformComponent::GetLocalRotation() const
    {
        return Rotation;
    }

    Quat TransformComponent::GetGlobalRotation() const
    {
        return GlobalRotation;
    }

    void TransformComponent::SetGlobalRotation(const Quat& rotation)
    {
        GlobalRotation = rotation;
        Dirty = true;
    }

    Vector3 TransformComponent::GetLocalPosition() const
    {
        return Translation;
    }

    void TransformComponent::SetLocalPosition(const Vector3& position)
    {
        Translation = position;
        Dirty = true;
    }

    Vector3 TransformComponent::GetGlobalPosition() const
    {
        return GlobalTranslation;
    }

    void TransformComponent::SetGlobalPosition(const Vector3& position)
    {
        GlobalTranslation = position;
    }

    Vector3 TransformComponent::GetLocalScale() const
    {
        return Scale;
    }

    void TransformComponent::SetLocalScale(const Vector3& scale)
    {
        Scale = scale;
        Dirty = true;
    }

    Vector3 TransformComponent::GetGlobalScale() const
    {
        return GlobalScale;
    }

    void TransformComponent::SetGlobalScale(const Vector3& scale)
    {
        GlobalScale = scale;
    }

    Matrix4 TransformComponent::GetGlobalTransform() const
    {
        return GlobalTransform;
    }

    void TransformComponent::SetGlobalTransform(const Matrix4& transform)
    {
        GlobalTransform = transform;
    }

    Matrix4 TransformComponent::GetLocalTransform() const
    {
        return LocalTransform;
    }

    void TransformComponent::SetLocalTransform(const Matrix4& transform)
    {
        LocalTransform = transform;
    }
}
