init commit

This commit is contained in:
Alex Lardner
2026-07-04 19:08:19 -07:00
parent 40dc51d21a
commit d7890c9808
106 changed files with 13653 additions and 0 deletions
+308
View File
@@ -0,0 +1,308 @@
#ifndef RAYLIB_CPP_INCLUDE_VECTOR4_HPP_
#define RAYLIB_CPP_INCLUDE_VECTOR4_HPP_
#ifndef RAYLIB_CPP_NO_MATH
#include <cmath>
#include <utility>
#endif
#include <string>
#include "./raylib-cpp-utils.hpp"
#include "./raylib.hpp"
#include "./raymath.hpp"
namespace raylib {
class Quaternion : public ::Quaternion {};
/**
* Vector4 type
*/
class Vector4 : public ::Vector4 {
public:
constexpr Vector4(const ::Vector4& vec) : ::Vector4{vec.x, vec.y, vec.z, vec.w} {}
explicit constexpr Vector4(const raylib::Quaternion quat) : ::Vector4{quat.x, quat.y, quat.z, quat.w} {}
explicit constexpr Vector4(const float x = 0, const float y = 0, const float z = 0, const float w = 0) : ::Vector4{x, y, z, w} {}
explicit constexpr Vector4(const ::Rectangle rectangle) : ::Vector4{rectangle.x, rectangle.y, rectangle.width, rectangle.height} {}
explicit Vector4(const ::Color color) { set(ColorNormalize(color)); }
GETTERSETTER(float, X, x)
GETTERSETTER(float, Y, y)
GETTERSETTER(float, Z, z)
GETTERSETTER(float, W, w)
Vector4& operator=(const ::Vector4& vector4) {
set(vector4);
return *this;
}
/*
* An exact value by value equality comparison.
* Due to floating point inaccuracies consider using Equals instead.
*/
constexpr bool operator==(const ::Vector4& other) const {
return x == other.x && y == other.y && z == other.z && w == other.w;
}
/*
* An exact value by value inequality comparison.
* Due to floating point inaccuracies consider using Equals instead.
*/
constexpr bool operator!=(const ::Vector4& other) const { return !(*this == other); }
RLCPP_NODISCARD constexpr ::Rectangle ToRectangle() const { return {x, y, z, w}; }
constexpr operator ::Rectangle() const { return {x, y, z, w}; }
RLCPP_NODISCARD std::string ToString() const { return ::TextFormat("Vector4(%f, %f, %f, %f)", x, y, z, w); }
operator std::string() const { return ToString(); }
#ifndef RAYLIB_CPP_NO_MATH
static Vector4 Zero() { return ::Vector4Zero(); }
static Vector4 One() { return ::Vector4One(); }
/**
* Add two vectors
*/
RLCPP_NODISCARD Vector4 Add(const ::Vector4& vector4) const { return ::Vector4Add(*this, vector4); }
/**
* Add two vectors
*/
Vector4 operator+(const ::Vector4& vector4) const { return ::Vector4Add(*this, vector4); }
Vector4& operator+=(const ::Vector4& vector4) {
set(::Vector4Add(*this, vector4));
return *this;
}
/**
* Add vector and float value
*/
RLCPP_NODISCARD Vector4 Add(const float value) const {
return ::Vector4AddValue(*this, value);
}
/**
* Add vector and float value
*/
Vector4 operator+(const float value) const {
return ::Vector4AddValue(*this, value);
}
/**
* Add vector and float value
*/
Vector4& operator+=(const float value) {
set(::Vector4AddValue(*this, value));
return *this;
}
/**
* Add vector and float value
*/
friend Vector4 operator+(const float lhs, const Vector4& rhs) { return rhs + lhs; }
/**
* Subtract two vectors.
*/
RLCPP_NODISCARD Vector4 Subtract(const ::Vector4& vector4) const { return ::Vector4Subtract(*this, vector4); }
/**
* Subtract two vectors.
*/
Vector4 operator-(const ::Vector4& vector4) const { return ::Vector4Subtract(*this, vector4); }
Vector4& operator-=(const ::Vector4& vector4) {
set(::Vector4Subtract(*this, vector4));
return *this;
}
/**
* Subtract vector by float value
*/
RLCPP_NODISCARD Vector4 Subtract(const float value) const {
return ::Vector4SubtractValue(*this, value);
}
/**
* Subtract vector by float value
*/
Vector4 operator-(const float value) const {
return ::Vector4SubtractValue(*this, value);
}
/**
* Subtract vector by float value
*/
Vector4& operator-=(const float value) {
set(::Vector4SubtractValue(*this, value));
return *this;
}
/**
* Subtract vector by float value
*/
friend Vector4 operator-(const float lhs, const Vector4& rhs) { return rhs - lhs; }
/**
* Negate provided vector
*/
RLCPP_NODISCARD Vector4 Negate() const { return ::Vector4Negate(*this); }
/**
* Negate provided vector
*/
Vector4 operator-() const { return ::Vector4Negate(*this); }
/**
* Multiply vector by vector
*/
RLCPP_NODISCARD Vector4 Multiply(const ::Vector4& other) const { return ::Vector4Multiply(*this, other); }
/**
* Multiply vector by vector
*/
Vector4 operator*(const ::Vector4& other) const { return ::Vector4Multiply(*this, other); }
/**
* Multiply vector by vector
*/
Vector4& operator*=(const ::Vector4& other) {
set(::Vector4Multiply(*this, other));
return *this;
}
/**
* Scale vector components by value (multiply)
*/
RLCPP_NODISCARD Vector4 Scale(const float scale) const { return ::Vector4Scale(*this, scale); }
/**
* Scale vector components by value (multiply)
*/
Vector4 operator*(const float scale) const { return ::Vector4Scale(*this, scale); }
/**
* Scale vector components by value (multiply)
*/
Vector4& operator*=(const float scale) {
set(::Vector4Scale(*this, scale));
return *this;
}
/**
* Scale vector components by value (multiply)
*/
friend Vector4 operator*(const float lhs, const Vector4& rhs) { return rhs * lhs; }
/**
* Divide vector by vector
*/
RLCPP_NODISCARD Vector4 Divide(const ::Vector4& vector4) const { return ::Vector4Divide(*this, vector4); }
/**
* Divide vector by vector
*/
Vector4 operator/(const ::Vector4& vector4) const { return ::Vector4Divide(*this, vector4); }
/**
* Divide vector by vector
*/
Vector4& operator/=(const ::Vector4& vector4) {
set(::Vector4Divide(*this, vector4));
return *this;
}
/**
* Divide vector components by value
*/
RLCPP_NODISCARD constexpr Vector4 Divide(const float div) const { return ::Vector4{x / div, y / div, z / div, w / div}; }
/**
* Divide vector components by value
*/
Vector4 operator/(const float div) const { return Divide(div); }
/**
* Divide vector components by value
*/
Vector4& operator/=(const float div) {
x /= div;
y /= div;
z /= div;
w /= div;
return *this;
}
/**
* Divide vector components by value
*/
constexpr friend Vector4 operator/(const float lhs, const Vector4& rhs) {
return Vector4{
lhs / rhs.x,
lhs / rhs.y,
lhs / rhs.z,
lhs / rhs.w
};
}
RLCPP_NODISCARD float Length() const { return ::Vector4Length(*this); }
RLCPP_NODISCARD float LengthSqr() const { return ::Vector4LengthSqr(*this); }
RLCPP_NODISCARD float DotProduct(const ::Vector4& v2) const { return ::Vector4DotProduct(*this, v2); }
RLCPP_NODISCARD float Distance(const ::Vector4& v2) const { return ::Vector4Distance(*this, v2); }
RLCPP_NODISCARD float DistanceSqr(const ::Vector4& v2) const { return ::Vector4DistanceSqr(*this, v2); }
RLCPP_NODISCARD Vector4 Normalize() const { return ::Vector4Normalize(*this); }
RLCPP_NODISCARD Vector4 Min(const ::Vector4& v2) const { return ::Vector4Min(*this, v2); }
RLCPP_NODISCARD Vector4 Max(const ::Vector4& v2) const { return ::Vector4Max(*this, v2); }
RLCPP_NODISCARD Vector4 Lerp(const ::Vector4& v2, const float amount) const { return ::Vector4Lerp(*this, v2, amount); }
RLCPP_NODISCARD Vector4 MoveTowards(const ::Vector4& target, const float maxDistance) const { return ::Vector4MoveTowards(*this, target, maxDistance); }
RLCPP_NODISCARD Vector4 Invert() const { return ::Vector4Invert(*this); }
/*
* Check whether two given vectors are almost equal
*/
RLCPP_NODISCARD bool Equals(const ::Vector4& other) const {
return static_cast<bool>(::Vector4Equals(*this, other));
}
#endif
RLCPP_NODISCARD Color ColorFromNormalized() const { return ::ColorFromNormalized(*this); }
operator Color() const { return ColorFromNormalized(); }
protected:
void set(const ::Vector4& vec4) {
x = vec4.x;
y = vec4.y;
z = vec4.z;
w = vec4.w;
}
};
} // namespace raylib
using RVector4 = raylib::Vector4;
#endif // RAYLIB_CPP_INCLUDE_VECTOR4_HPP_