1#ifndef RAYLIB_CPP_INCLUDE_VECTOR4_HPP_
2#define RAYLIB_CPP_INCLUDE_VECTOR4_HPP_
4#ifndef RAYLIB_CPP_NO_MATH
11#include "./raylib-cpp-utils.hpp"
12#include "./raylib.hpp"
13#include "./raymath.hpp"
14#include "./raylib-cpp-utils.hpp"
15#include "./RadiansDegrees.hpp"
23 Vector4(const ::Vector4& vec) : ::Vector4{vec.x, vec.y, vec.z, vec.w} {}
25 Vector4(
float x,
float y,
float z,
float w) : ::Vector4{x, y, z, w} {}
26 Vector4(
float x,
float y,
float z) : ::Vector4{x, y, z, 0} {}
27 Vector4(
float x,
float y) : ::Vector4{x, y, 0, 0} {}
28 Vector4(
float x) : ::Vector4{x, 0, 0, 0} {}
29 Vector4() : ::Vector4{0, 0, 0, 0} {}
30 Vector4(::Rectangle rectangle) : ::Vector4{rectangle.x, rectangle.y, rectangle.width, rectangle.height} {}
32 Vector4(::Color color) { set(ColorNormalize(color)); }
34 GETTERSETTER(
float, X, x)
35 GETTERSETTER(
float, Y, y)
36 GETTERSETTER(
float, Z, z)
37 GETTERSETTER(
float, W, w)
44 bool operator==(const ::Vector4& other)
const {
45 return x == other.x && y == other.y && z == other.z && w == other.w;
48 bool operator!=(const ::Vector4& other)
const {
return !(*
this == other); }
50 [[nodiscard]] ::Rectangle ToRectangle()
const {
return {x, y, z, w}; }
52 operator ::Rectangle()
const {
return {x, y, z, w}; }
54 [[nodiscard]] std::string ToString()
const {
return TextFormat(
"Vector4(%f, %f, %f, %f)", x, y, z, w); }
56 operator std::string()
const {
return ToString(); }
58#ifndef RAYLIB_CPP_NO_MATH
59 [[nodiscard]] Vector4 Multiply(const ::Vector4& vector4)
const {
return QuaternionMultiply(*
this, vector4); }
61 Vector4 operator*(const ::Vector4& vector4)
const {
return QuaternionMultiply(*
this, vector4); }
63 [[nodiscard]] Vector4 Lerp(const ::Vector4& vector4,
float amount)
const {
return QuaternionLerp(*
this, vector4, amount); }
65 [[nodiscard]] Vector4 Nlerp(const ::Vector4& vector4,
float amount)
const {
return QuaternionNlerp(*
this, vector4, amount); }
67 [[nodiscard]] Vector4 Slerp(const ::Vector4& vector4,
float amount)
const {
return QuaternionSlerp(*
this, vector4, amount); }
69 [[nodiscard]] Matrix ToMatrix()
const {
return QuaternionToMatrix(*
this); }
71 [[nodiscard]]
float Length()
const {
return QuaternionLength(*
this); }
73 [[nodiscard]] Vector4 Normalize()
const {
return QuaternionNormalize(*
this); }
75 [[nodiscard]] Vector4 Invert()
const {
return QuaternionInvert(*
this); }
77 void ToAxisAngle(::Vector3 *outAxis,
float *outAngle)
const {
78 QuaternionToAxisAngle(*
this, outAxis, outAngle);
80 void ToAxisAngle(::Vector3 *outAxis, Radian *outAngle)
const {
92 QuaternionToAxisAngle(*
this, &outAxis, &outAngle);
94 return std::pair<Vector3, Radian>(outAxis, outAngle);
97 [[nodiscard]]
Vector4 Transform(const ::Matrix& matrix)
const { return ::QuaternionTransform(*
this, matrix); }
99 static Vector4 Identity() { return ::QuaternionIdentity(); }
101 static Vector4 FromVector3ToVector3(const ::Vector3& from, const ::Vector3& to) {
102 return ::QuaternionFromVector3ToVector3(from, to);
105 static Vector4 FromMatrix(const ::Matrix& matrix) { return ::QuaternionFromMatrix(matrix); }
107 static Vector4 FromAxisAngle(const ::Vector3& axis,
const Radian angle) {
108 return ::QuaternionFromAxisAngle(axis, angle);
111 static Vector4 FromEuler(
const Degree pitch,
const Degree yaw,
const Degree roll) {
112 return ::QuaternionFromEuler(pitch, yaw, roll);
115 static Vector4 FromEuler(const ::Vector3& vector3) {
116 return ::QuaternionFromEuler(vector3.x, vector3.y, vector3.z);
119 [[nodiscard]] Vector3 ToEuler()
const { return ::QuaternionToEuler(*
this); }
122 [[nodiscard]] Color ColorFromNormalized()
const { return ::ColorFromNormalized(*
this); }
124 operator Color()
const {
return ColorFromNormalized(); }
126 void set(const ::Vector4& vec4) {
135using Quaternion = Vector4;
Matrix type (OpenGL style 4x4 - right handed, column major)
std::pair< Vector3, Radian > ToAxisAngle() const
Get the rotation angle and axis for a given quaternion.
All raylib-cpp classes and functions appear in the raylib namespace.