SDLU/include/graphics/drawable/Transformable.hpp
2021-04-23 15:08:51 +02:00

157 lines
3.7 KiB
C++

/**
* @file Transformable.hpp
* @brief Contains information for transformable objects
* @author Lauchmelder23
* @date 23.05.2020
*/
#pragma once
#include "structures/Vector2.hpp"
SDLU_BEGIN
/**
* @brief A class that stores locational information
*
* Stores position, rotation, scale and the origin of an
* object, and provides functions to get/set those values.
* "Origin" is the offset between the position and the top-left
* corner of the object.
*/
class Transformable
{
public:
/**
* @brief Default constructur
*/
Transformable();
/**
* @brief Deconstructor
*/
virtual ~Transformable();
/**
* @brief Returns the position of the object
*
* @return A 2D vector of the position
*/
Vector2f GetPosition();
/**
* @brief Sets a new position
*
* @param[in] position A 2D vector with the new position
*/
void SetPosition(const Vector2f& position);
/**
* @brief Sets a new position
*
* @param[in] x The new x position
* @param[in] y The new y position
*/
void SetPosition(float x, float y);
/**
* @brief Adds to the current position
*
* @param[in] position A 2D movement vector
*/
void Move(const Vector2f& position);
/**
* @brief Adds to the current position
*
* @param[in] x The offset in x direction
* @param[in] y The offset in y direction
*/
void Move(float x, float y);
/**
* @brief Gets the current local origin
*
* @return A 2D vector with the offset
*/
Vector2f GetOrigin();
/**
* @brief Sets a new local origin
*
* @param[in] origin A 2D vector with the new origin
*/
void SetOrigin(const Vector2f& origin);
/**
* @brief Sets a new local origin
*
* @param[in] x The new x component of the origin
* @param[in] y The new y component of the origin
*/
void SetOrigin(float x, float y);
/**
* @brief Gets the current scale of the object
*
* @return A 2D vector with the scale in x- and y-direction
*/
Vector2f GetScale();
/**
* @brief Sets a new scale
*
* @param[in] scale A 2D vector with the new scale
*/
void SetScale(const Vector2f& scale);
/**
* @brief Sets a new scale
*
* @param[in] x The new scale in x direction
* @param[in] y The new scale in y direction
*/
void SetScale(float x, float y);
/**
* @brief Scales the object by some amount
*
* @param[in] scale The amount to scale by in x- and y-direction
*/
void Scale(const Vector2f& scale);
/**
* @brief Scales the object by some amount
*
* @param[in] x The amount to scale by in x direction
* @param[in] y The amount to scale by in y direction
*/
void Scale(float x, float y);
/**
* @brief Gets the current rotation
*
* @return The rotation in degrees
*/
float GetRotation();
/**
* @brief Sets a new rotation
*
* @param[in] angle The new rotation in degrees
*/
void SetRotation(float angle);
/**
* @brief Rotates by some amount
*
* @param[in] angle The angle to rotate by in degrees
*/
void Rotate(float angle);
protected:
Vector2f position; ///< Position of the object
Vector2f origin; ///< Offset of the top-left corner from the position
Vector2f scale; ///< Scale of the object
float rotation; ///< Rotation of the object (in degrees)
};
SDLU_END