#pragma once

using TiltedPhoques::Buffer;

//! Network optimized 2d vector
struct Vector2_NetQuantize : glm::vec2
{
    Vector2_NetQuantize() = default;
    ~Vector2_NetQuantize() = default;

    bool operator==(const Vector2_NetQuantize& acRhs) const noexcept;
    bool operator!=(const Vector2_NetQuantize& acRhs) const noexcept;

    Vector2_NetQuantize& operator=(const glm::vec2& acRhs) noexcept;

    /**
     * Serialize to a buffer.
     * @param aWriter Writer wrapping the buffer.
     */
    void Serialize(Buffer::Writer& aWriter) const noexcept;
    /**
     * Deserialize from a buffer.
     * @param aReader Reader wrapping the buffer.
     */
    void Deserialize(Buffer::Reader& aReader) noexcept;
    /**
     * Packs the vector into a 32 bits representation of the network vector
     */
    [[nodiscard]] uint32_t Pack() const noexcept;
    /**
     * Unpack a 32 bits representation of a network vector
     * @param aValue The 64bits representation of a vector.
     */
    void Unpack(uint32_t aValue) noexcept;
};
