8#include "BigEndian.hpp"
10namespace rtype::protocol {
24 static_cast<float>(std::numeric_limits<std::uint16_t>::max()) /
34 if (!std::isfinite(position))
41 return static_cast<std::uint16_t
>(
60 constexpr float turn = 2.0f * std::numbers::pi_v<float>;
62 if (!std::isfinite(radians))
65 float turns = std::fmod(radians, turn) / turn;
69 return static_cast<std::uint16_t
>(std::lround(turns * 65536.0f) & 0xFFFF);
78 return static_cast<float>(encoded.
get()) / 65536.0f * 2.0f *
79 std::numbers::pi_v<float>;
float decodePosition(be16 encoded)
Decodes a position encoded by encodePosition().
Definition Position.hpp:50
constexpr float MIN_POSITION
Smallest position that can be encoded, in pixels.
Definition Position.hpp:21
float decodeRotation(be16 encoded)
Decodes an angle encoded by encodeRotation().
Definition Position.hpp:77
constexpr float MAX_POSITION
Largest position that can be encoded, in pixels.
Definition Position.hpp:23
constexpr float POSITION_OFFSET
Offset added before encoding so that negative positions fit.
Definition Position.hpp:19
be16 encodePosition(float position)
Encodes a position as a 16-bit fixed point value.
Definition Position.hpp:33
constexpr float POSITION_SCALE
Number of encoded steps per pixel, giving a 0.25 pixel resolution.
Definition Position.hpp:17
be16 encodeRotation(float radians)
Encodes an angle as a fraction of a full turn on 16 bits.
Definition Position.hpp:59
constexpr T get() const
Returns the value in host byte order.
Definition BigEndian.hpp:76