feat(autogen): annotated datatypes
This commit is contained in:
parent
66f7f0bea6
commit
fc1c4a06f1
4 changed files with 62 additions and 57 deletions
|
@ -7,16 +7,21 @@
|
|||
#define def_data(...) clang::annotate("OB::def_data", #__VA_ARGS__)
|
||||
#define def_data_prop(...) clang::annotate("OB::def_data_prop", #__VA_ARGS__)
|
||||
#define def_data_method(...) clang::annotate("OB::def_data_method", #__VA_ARGS__)
|
||||
#define def_data_ctor(...) clang::annotate("OB::def_data_ctor", #__VA_ARGS__)
|
||||
#else
|
||||
#define def_data(...)
|
||||
#define def_data_prop(...)
|
||||
#define def_data_method(...)
|
||||
#define def_data_ctor(...)
|
||||
#define def_data_op(...)
|
||||
#endif
|
||||
|
||||
// Helper macros
|
||||
#define DEF_DATA [[ def_data() ]]
|
||||
#define DEF_DATA_PROP [[ def_data_prop() ]]
|
||||
#define DEF_DATA_METHOD [[ def_data_method() ]]
|
||||
#define DEF_DATA [[ def_data() ]] // Data declaration
|
||||
#define DEF_DATA_PROP [[ def_data_prop() ]] // Property. Getter or field
|
||||
#define DEF_DATA_METHOD [[ def_data_method() ]] // Method
|
||||
#define DEF_DATA_CTOR [[ def_data_ctor() ]] // Constructor (i.e. .new)
|
||||
#define DEF_DATA_OP [[ def_data_op() ]] // Operator (e.g. +, -, *)
|
||||
|
||||
#define AUTOGEN_PREAMBLE_DATA \
|
||||
public: \
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
namespace rp = reactphysics3d;
|
||||
|
||||
namespace Data {
|
||||
class CFrame : Base {
|
||||
class DEF_DATA CFrame : Base {
|
||||
glm::vec3 translation;
|
||||
glm::mat3 rotation;
|
||||
|
||||
|
@ -20,17 +20,17 @@ namespace Data {
|
|||
// CFrame(float x, float y, float z);
|
||||
// CFrame(const glm::vec3&);
|
||||
// CFrame(const rp::Vector3&);
|
||||
CFrame();
|
||||
CFrame(float x, float y, float z, float R00, float R01, float R02, float R10, float R11, float R12, float R20, float R21, float R22);
|
||||
DEF_DATA_CTOR CFrame();
|
||||
DEF_DATA_CTOR CFrame(float x, float y, float z, float R00, float R01, float R02, float R10, float R11, float R12, float R20, float R21, float R22);
|
||||
DEF_DATA_CTOR CFrame(Vector3 , Vector3 lookAt, Vector3 up = Vector3(0, 1, 0));
|
||||
CFrame(const rp::Transform&);
|
||||
CFrame(Vector3 position, glm::quat quat);
|
||||
CFrame(Vector3 position, Vector3 lookAt, Vector3 up = Vector3(0, 1, 0));
|
||||
~CFrame();
|
||||
|
||||
// Same as CFrame(position, position + toward), but makes sure that up and toward are not linearly dependant
|
||||
static CFrame pointToward(Vector3 position, Vector3 toward);
|
||||
|
||||
static const CFrame IDENTITY;
|
||||
DEF_DATA_PROP static const CFrame IDENTITY;
|
||||
static const CFrame YToZ;
|
||||
|
||||
virtual const TypeInfo& GetType() const override;
|
||||
|
@ -45,25 +45,25 @@ namespace Data {
|
|||
operator rp::Transform() const;
|
||||
|
||||
//inline static CFrame identity() { }
|
||||
inline Vector3 Position() const { return translation; }
|
||||
inline CFrame Rotation() const { return CFrame { glm::vec3(0, 0, 0), rotation }; }
|
||||
CFrame Inverse() const;
|
||||
inline float X() const { return translation.x; }
|
||||
inline float Y() const { return translation.y; }
|
||||
inline float Z() const { return translation.z; }
|
||||
DEF_DATA_METHOD inline Vector3 Position() const { return translation; }
|
||||
DEF_DATA_METHOD inline CFrame Rotation() const { return CFrame { glm::vec3(0, 0, 0), rotation }; }
|
||||
DEF_DATA_METHOD CFrame Inverse() const;
|
||||
DEF_DATA_PROP inline float X() const { return translation.x; }
|
||||
DEF_DATA_PROP inline float Y() const { return translation.y; }
|
||||
DEF_DATA_PROP inline float Z() const { return translation.z; }
|
||||
|
||||
inline Vector3 RightVector() { return glm::column(rotation, 0); }
|
||||
inline Vector3 UpVector() { return glm::column(rotation, 1); }
|
||||
inline Vector3 LookVector() { return -glm::column(rotation, 2); }
|
||||
DEF_DATA_PROP inline Vector3 RightVector() { return glm::column(rotation, 0); }
|
||||
DEF_DATA_PROP inline Vector3 UpVector() { return glm::column(rotation, 1); }
|
||||
DEF_DATA_PROP inline Vector3 LookVector() { return -glm::column(rotation, 2); }
|
||||
|
||||
Vector3 ToEulerAnglesXYZ();
|
||||
static CFrame FromEulerAnglesXYZ(Vector3);
|
||||
DEF_DATA_METHOD Vector3 ToEulerAnglesXYZ();
|
||||
DEF_DATA_METHOD static CFrame FromEulerAnglesXYZ(Vector3);
|
||||
|
||||
// Operators
|
||||
Data::CFrame operator *(Data::CFrame) const;
|
||||
Vector3 operator *(Vector3) const;
|
||||
Data::CFrame operator +(Vector3) const;
|
||||
Data::CFrame operator -(Vector3) const;
|
||||
DEF_DATA_OP Data::CFrame operator *(Data::CFrame) const;
|
||||
DEF_DATA_OP Vector3 operator *(Vector3) const;
|
||||
DEF_DATA_OP Data::CFrame operator +(Vector3) const;
|
||||
DEF_DATA_OP Data::CFrame operator -(Vector3) const;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -1,39 +1,38 @@
|
|||
#pragma once
|
||||
|
||||
#include "base.h"
|
||||
#include "datatypes/annotation.h"
|
||||
#include <glm/ext/quaternion_geometric.hpp>
|
||||
#include <glm/ext/vector_float3.hpp>
|
||||
#include <reactphysics3d/reactphysics3d.h>
|
||||
|
||||
namespace rp = reactphysics3d;
|
||||
|
||||
namespace Data {
|
||||
class Color3 : Base {
|
||||
class DEF_DATA Color3 : Base {
|
||||
float r;
|
||||
float g;
|
||||
float b;
|
||||
|
||||
public:
|
||||
Color3(float r, float g, float b);
|
||||
Color3(const glm::vec3&);
|
||||
DEF_DATA_CTOR Color3(float r, float g, float b);
|
||||
DEF_DATA_CTOR Color3(const glm::vec3&);
|
||||
~Color3();
|
||||
|
||||
static Color3 FromHex(std::string hex);
|
||||
DEF_DATA_METHOD static Color3 FromHex(std::string hex);
|
||||
|
||||
virtual const TypeInfo& GetType() const override;
|
||||
static const TypeInfo TYPE;
|
||||
|
||||
virtual const Data::String ToString() const override;
|
||||
std::string ToHex() const;
|
||||
DEF_DATA_METHOD std::string ToHex() const;
|
||||
virtual void Serialize(pugi::xml_node node) const override;
|
||||
virtual void PushLuaValue(lua_State*) const override;
|
||||
static Data::Variant Deserialize(pugi::xml_node node);
|
||||
|
||||
operator glm::vec3() const;
|
||||
|
||||
inline float R() const { return r; }
|
||||
inline float G() const { return g; }
|
||||
inline float B() const { return b; }
|
||||
DEF_DATA_PROP inline float R() const { return r; }
|
||||
DEF_DATA_PROP inline float G() const { return g; }
|
||||
DEF_DATA_PROP inline float B() const { return b; }
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "base.h"
|
||||
#include "datatypes/annotation.h"
|
||||
#include <glm/ext/quaternion_geometric.hpp>
|
||||
#include <glm/ext/vector_float3.hpp>
|
||||
#include <reactphysics3d/reactphysics3d.h>
|
||||
|
@ -8,21 +9,21 @@
|
|||
namespace rp = reactphysics3d;
|
||||
|
||||
namespace Data {
|
||||
class Vector3 : Base {
|
||||
class DEF_DATA Vector3 : Base {
|
||||
glm::vec3 vector;
|
||||
|
||||
public:
|
||||
Vector3();
|
||||
Vector3(float x, float y, float z);
|
||||
Vector3(const glm::vec3&);
|
||||
Vector3(const rp::Vector3&);
|
||||
DEF_DATA_CTOR Vector3();
|
||||
DEF_DATA_CTOR Vector3(float x, float y, float z);
|
||||
DEF_DATA_CTOR Vector3(const glm::vec3&);
|
||||
DEF_DATA_CTOR Vector3(const rp::Vector3&);
|
||||
~Vector3();
|
||||
|
||||
virtual const TypeInfo& GetType() const override;
|
||||
static const TypeInfo TYPE;
|
||||
|
||||
static Data::Vector3 ZERO;
|
||||
static Data::Vector3 ONE;
|
||||
DEF_DATA_PROP static Data::Vector3 ZERO;
|
||||
DEF_DATA_PROP static Data::Vector3 ONE;
|
||||
|
||||
virtual const Data::String ToString() const override;
|
||||
virtual void Serialize(pugi::xml_node node) const override;
|
||||
|
@ -34,28 +35,28 @@ namespace Data {
|
|||
operator glm::vec3() const;
|
||||
operator rp::Vector3() const;
|
||||
|
||||
inline float X() const { return vector.x; }
|
||||
inline float Y() const { return vector.y; }
|
||||
inline float Z() const { return vector.z; }
|
||||
inline float Magnitude() const { return glm::length(vector); }
|
||||
inline Data::Vector3 Unit() const { return glm::normalize(vector); }
|
||||
inline Data::Vector3 Abs() const { return glm::abs(vector); }
|
||||
DEF_DATA_PROP inline float X() const { return vector.x; }
|
||||
DEF_DATA_PROP inline float Y() const { return vector.y; }
|
||||
DEF_DATA_PROP inline float Z() const { return vector.z; }
|
||||
DEF_DATA_METHOD inline float Magnitude() const { return glm::length(vector); }
|
||||
DEF_DATA_METHOD inline Data::Vector3 Unit() const { return glm::normalize(vector); }
|
||||
DEF_DATA_METHOD inline Data::Vector3 Abs() const { return glm::abs(vector); }
|
||||
|
||||
Data::Vector3 Cross(Data::Vector3) const;
|
||||
float Dot(Data::Vector3) const;
|
||||
DEF_DATA_METHOD Data::Vector3 Cross(Data::Vector3) const;
|
||||
DEF_DATA_METHOD float Dot(Data::Vector3) const;
|
||||
|
||||
// Operators
|
||||
Data::Vector3 operator *(float) const;
|
||||
Data::Vector3 operator /(float) const;
|
||||
Data::Vector3 operator *(Data::Vector3) const; // Component-wise
|
||||
Data::Vector3 operator +(Data::Vector3) const;
|
||||
Data::Vector3 operator -(Data::Vector3) const;
|
||||
Data::Vector3 operator -() const;
|
||||
DEF_DATA_OP Data::Vector3 operator *(float) const;
|
||||
DEF_DATA_OP Data::Vector3 operator /(float) const;
|
||||
DEF_DATA_OP Data::Vector3 operator *(Data::Vector3) const; // Component-wise
|
||||
DEF_DATA_OP Data::Vector3 operator +(Data::Vector3) const;
|
||||
DEF_DATA_OP Data::Vector3 operator -(Data::Vector3) const;
|
||||
DEF_DATA_OP Data::Vector3 operator -() const;
|
||||
|
||||
bool operator <(Data::Vector3) const;
|
||||
bool operator >(Data::Vector3) const;
|
||||
DEF_DATA_OP bool operator <(Data::Vector3) const;
|
||||
DEF_DATA_OP bool operator >(Data::Vector3) const;
|
||||
|
||||
bool operator ==(Data::Vector3) const;
|
||||
DEF_DATA_OP bool operator ==(Data::Vector3) const;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue