Merge pull request #481 from Zylann/vec_constants

Added missing constants to Vector2, Vector3, Basis and Quat
pull/500/head
Marc 2021-01-31 20:02:06 +00:00 committed by GitHub
commit e76efdd3ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 80 additions and 0 deletions

View File

@ -13,6 +13,11 @@ class Quat;
class Basis { class Basis {
private: private:
static const Basis IDENTITY;
static const Basis FLIP_X;
static const Basis FLIP_Y;
static const Basis FLIP_Z;
// This helper template is for mimicking the behavior difference between the engine // This helper template is for mimicking the behavior difference between the engine
// and script interfaces that logically script sees matrices as column major, while // and script interfaces that logically script sees matrices as column major, while
// the engine stores them in row major to efficiently take advantage of SIMD // the engine stores them in row major to efficiently take advantage of SIMD

View File

@ -11,6 +11,8 @@ namespace godot {
class Quat { class Quat {
public: public:
static const Quat IDENTITY;
real_t x, y, z, w; real_t x, y, z, w;
real_t length_squared() const; real_t length_squared() const;

View File

@ -10,6 +10,11 @@ namespace godot {
class Transform { class Transform {
public: public:
static const Transform IDENTITY;
static const Transform FLIP_X;
static const Transform FLIP_Y;
static const Transform FLIP_Z;
Basis basis; Basis basis;
Vector3 origin; Vector3 origin;

View File

@ -10,6 +10,10 @@ typedef Vector2 Size2;
struct Rect2; struct Rect2;
struct Transform2D { struct Transform2D {
static const Transform2D IDENTITY;
static const Transform2D FLIP_X;
static const Transform2D FLIP_Y;
// Warning #1: basis of Transform2D is stored differently from Basis. In terms of elements array, the basis matrix looks like "on paper": // Warning #1: basis of Transform2D is stored differently from Basis. In terms of elements array, the basis matrix looks like "on paper":
// M = (elements[0][0] elements[1][0]) // M = (elements[0][0] elements[1][0])
// (elements[0][1] elements[1][1]) // (elements[0][1] elements[1][1])

View File

@ -12,6 +12,21 @@ namespace godot {
class String; class String;
struct Vector2 { struct Vector2 {
enum Axis {
AXIS_X = 0,
AXIS_Y,
AXIS_COUNT
};
static const Vector2 ZERO;
static const Vector2 ONE;
static const Vector2 INF;
// Coordinate system of the 2D engine
static const Vector2 LEFT;
static const Vector2 RIGHT;
static const Vector2 UP;
static const Vector2 DOWN;
union { union {
real_t x; real_t x;

View File

@ -19,8 +19,21 @@ struct Vector3 {
AXIS_X, AXIS_X,
AXIS_Y, AXIS_Y,
AXIS_Z, AXIS_Z,
AXIS_COUNT
}; };
static const Vector3 ZERO;
static const Vector3 ONE;
static const Vector3 INF;
// Coordinate system of the 3D engine
static const Vector3 LEFT;
static const Vector3 RIGHT;
static const Vector3 UP;
static const Vector3 DOWN;
static const Vector3 FORWARD;
static const Vector3 BACK;
union { union {
struct { struct {
real_t x; real_t x;

View File

@ -7,6 +7,11 @@
namespace godot { namespace godot {
const Basis Basis::IDENTITY = Basis();
const Basis Basis::FLIP_X = Basis(-1, 0, 0, 0, 1, 0, 0, 0, 1);
const Basis Basis::FLIP_Y = Basis(1, 0, 0, 0, -1, 0, 0, 0, 1);
const Basis Basis::FLIP_Z = Basis(1, 0, 0, 0, 1, 0, 0, 0, -1);
Basis::Basis(const Vector3 &row0, const Vector3 &row1, const Vector3 &row2) { Basis::Basis(const Vector3 &row0, const Vector3 &row1, const Vector3 &row2) {
elements[0] = row0; elements[0] = row0;
elements[1] = row1; elements[1] = row1;

View File

@ -7,6 +7,8 @@
namespace godot { namespace godot {
const Quat Quat::IDENTITY = Quat();
// set_euler_xyz expects a vector containing the Euler angles in the format // set_euler_xyz expects a vector containing the Euler angles in the format
// (ax,ay,az), where ax is the angle of rotation around x axis, // (ax,ay,az), where ax is the angle of rotation around x axis,
// and similar for other axes. // and similar for other axes.

View File

@ -9,6 +9,11 @@
namespace godot { namespace godot {
const Transform Transform::IDENTITY = Transform();
const Transform Transform::FLIP_X = Transform(-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0);
const Transform Transform::FLIP_Y = Transform(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0);
const Transform Transform::FLIP_Z = Transform(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0);
Transform Transform::inverse_xform(const Transform &t) const { Transform Transform::inverse_xform(const Transform &t) const {
Vector3 v = t.origin - origin; Vector3 v = t.origin - origin;

View File

@ -7,6 +7,10 @@
namespace godot { namespace godot {
const Transform2D Transform2D::IDENTITY;
const Transform2D Transform2D::FLIP_X = Transform2D(-1, 0, 0, 1, 0, 0);
const Transform2D Transform2D::FLIP_Y = Transform2D(1, 0, 0, -1, 0, 0);
Transform2D::Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) { Transform2D::Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) {
elements[0][0] = xx; elements[0][0] = xx;

View File

@ -6,6 +6,15 @@
namespace godot { namespace godot {
const Vector2 Vector2::ZERO;
const Vector2 Vector2::ONE;
const Vector2 Vector2::INF;
const Vector2 Vector2::LEFT = Vector2(-1, 0);
const Vector2 Vector2::RIGHT = Vector2(1, 0);
const Vector2 Vector2::UP = Vector2(0, -1);
const Vector2 Vector2::DOWN = Vector2(0, 1);
bool Vector2::operator==(const Vector2 &p_vec2) const { bool Vector2::operator==(const Vector2 &p_vec2) const {
return x == p_vec2.x && y == p_vec2.y; return x == p_vec2.x && y == p_vec2.y;
} }

View File

@ -8,6 +8,17 @@
namespace godot { namespace godot {
const Vector3 Vector3::ZERO = Vector3();
const Vector3 Vector3::ONE = Vector3();
const Vector3 Vector3::INF = Vector3(INFINITY, INFINITY, INFINITY);
const Vector3 Vector3::LEFT = Vector3(-1, 0, 0);
const Vector3 Vector3::RIGHT = Vector3(1, 0, 0);
const Vector3 Vector3::UP = Vector3(0, 1, 0);
const Vector3 Vector3::DOWN = Vector3(0, -1, 0);
const Vector3 Vector3::FORWARD = Vector3(0, 0, -1);
const Vector3 Vector3::BACK = Vector3(0, 0, 1);
bool Vector3::operator<(const Vector3 &p_v) const { bool Vector3::operator<(const Vector3 &p_v) const {
if (x == p_v.x) { if (x == p_v.x) {
if (y == p_v.y) if (y == p_v.y)