Program Listing for File TransformComponent.cpp

Return to documentation for file (Source\Math\Src\TransformComponent.cpp)

#include "Math/TransformComponent.h"


namespace Azura {
namespace Math {

TransformComponent::TransformComponent() : m_transform(Matrix4f::Identity()) {
}

TransformComponent::TransformComponent(const Matrix4f& transform) : m_transform(transform) {
}

TransformComponent TransformComponent::FromTranslationVector(const Vector3f& translation) {

  return TransformComponent(Matrix4f::FromTranslationVector(translation));
}

void TransformComponent::SetStepSize(float value) {
  m_stepSize = value;
}

void TransformComponent::OnKeyEvent(KeyEvent keyEvent) {
  if (keyEvent.m_internalType == KeyEventType::KeyPress) {
    if (m_forwardKey == keyEvent.m_key)
    {
      m_moveForwardFactor = 1;
    }

    if (m_backwardKey == keyEvent.m_key)
    {
      m_moveForwardFactor = -1;
    }

    if (m_leftKey == keyEvent.m_key)
    {
      m_moveRightFactor = 1;
    }

    if (m_rightKey == keyEvent.m_key)
    {
      m_moveRightFactor = -1;
    }

    if (m_upKey == keyEvent.m_key)
    {
      m_moveUpFactor = 1;
    }

    if (m_downKey == keyEvent.m_key)
    {
      m_moveUpFactor = -1;
    }

  } else if (keyEvent.m_internalType == KeyEventType::KeyRelease) {
    if (m_forwardKey == keyEvent.m_key)
    {
      m_moveForwardFactor = 0;
    }

    if (m_backwardKey == keyEvent.m_key)
    {
      m_moveForwardFactor = 0;
    }

    if (m_leftKey == keyEvent.m_key)
    {
      m_moveRightFactor = 0;
    }

    if (m_rightKey == keyEvent.m_key)
    {
      m_moveRightFactor = 0;
    }

    if (m_upKey == keyEvent.m_key)
    {
      m_moveUpFactor = 0;
    }

    if (m_downKey == keyEvent.m_key)
    {
      m_moveUpFactor = 0;
    }
  }
}

void TransformComponent::Update(float timeDelta) {
  const float distance = m_stepSize * m_sensitivity * timeDelta;

  Vector4f translation = Vector4f(0, 0, 0, 1);

  if (m_moveForwardFactor != 0) {
    translation += Vector4f(0, 0, m_moveForwardFactor * distance, 0);
  }

  if (m_moveRightFactor != 0) {
    translation += Vector4f(m_moveRightFactor * distance, 0, 0, 0);
  }

  if (m_moveUpFactor != 0) {
    translation += Vector4f(0, m_moveUpFactor * distance, 0, 0);
  }

  m_transform = Matrix4f::FromTranslationVector(translation.xyz());
}

void TransformComponent::SetUpKey(KeyboardKey key) {
  m_upKey = key;
}

void TransformComponent::SetDownKey(KeyboardKey key) {
  m_downKey = key;
}

void TransformComponent::SetLeftKey(KeyboardKey key) {
  m_leftKey = key;
}

void TransformComponent::SetRightKey(KeyboardKey key) {
  m_rightKey = key;
}

void TransformComponent::SetForwardKey(KeyboardKey key) {
  m_forwardKey = key;
}

void TransformComponent::SetBackwardKey(KeyboardKey key) {
  m_backwardKey = key;
}

const Matrix4f& TransformComponent::GetTransform() const {
  return m_transform;
}
} // namespace Math
} // namespace Azura