Merge pull request #525 from vnen/update-clang-format

Update clang-format to version 11
pull/400/head
Rémi Verschelde 2021-03-01 16:28:58 +01:00 committed by GitHub
commit 55c0a2ea03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 62 additions and 288 deletions

View File

@ -13,9 +13,9 @@ AlignAfterOpenBracket: DontAlign
AlignTrailingComments: false AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false AllowAllParametersOfDeclarationOnNextLine: false
# AllowShortBlocksOnASingleLine: false # AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: true # AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: true # AllowShortIfStatementsOnASingleLine: false
# AllowShortLoopsOnASingleLine: false # AllowShortLoopsOnASingleLine: false
# AlwaysBreakAfterDefinitionReturnType: None # AlwaysBreakAfterDefinitionReturnType: None
# AlwaysBreakAfterReturnType: None # AlwaysBreakAfterReturnType: None
@ -76,7 +76,7 @@ IndentWidth: 4
# IndentWrappedFunctionNames: false # IndentWrappedFunctionNames: false
# JavaScriptQuotes: Leave # JavaScriptQuotes: Leave
# JavaScriptWrapImports: true # JavaScriptWrapImports: true
# KeepEmptyLinesAtTheStartOfBlocks: true KeepEmptyLinesAtTheStartOfBlocks: false
# MacroBlockBegin: '' # MacroBlockBegin: ''
# MacroBlockEnd: '' # MacroBlockEnd: ''
# MaxEmptyLinesToKeep: 1 # MaxEmptyLinesToKeep: 1
@ -112,10 +112,11 @@ UseTab: Always
--- ---
### C++ specific config ### ### C++ specific config ###
Language: Cpp Language: Cpp
Standard: Cpp03 Standard: Cpp11
--- ---
### ObjC specific config ### ### ObjC specific config ###
Language: ObjC Language: ObjC
Standard: Cpp11
ObjCBlockIndentWidth: 4 ObjCBlockIndentWidth: 4
# ObjCSpaceAfterProperty: false # ObjCSpaceAfterProperty: false
# ObjCSpaceBeforeProtocolList: true # ObjCSpaceBeforeProtocolList: true
@ -123,4 +124,5 @@ ObjCBlockIndentWidth: 4
### Java specific config ### ### Java specific config ###
Language: Java Language: Java
# BreakAfterJavaFieldAnnotations: false # BreakAfterJavaFieldAnnotations: false
JavaImportGroups: ['org.godotengine', 'android', 'androidx', 'com.android', 'com.google', 'java', 'javax']
... ...

View File

@ -147,14 +147,22 @@ jobs:
static-checks: static-checks:
name: Static Checks (clang-format) name: Static Checks (clang-format)
runs-on: ubuntu-16.04 runs-on: ubuntu-20.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v2.3.4 uses: actions/checkout@v2
- name: Make apt sources.list use the default Ubuntu repositories
run: |
sudo rm -f /etc/apt/sources.list.d/*
sudo cp -f misc/ci/sources.list /etc/apt/sources.list
sudo apt-get update
- name: Install dependencies - name: Install dependencies
run: | run: |
sudo apt-get install clang-format-8 sudo apt-get install -qq dos2unix recode clang-format-11
sudo update-alternatives --remove-all clang-format
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-11 100
- name: Style checks via clang-format - name: Style checks via clang-format
run: | run: |

View File

@ -16,12 +16,10 @@ public:
real_t get_area() const; /// get area real_t get_area() const; /// get area
inline bool has_no_area() const { inline bool has_no_area() const {
return (size.x <= CMP_EPSILON || size.y <= CMP_EPSILON || size.z <= CMP_EPSILON); return (size.x <= CMP_EPSILON || size.y <= CMP_EPSILON || size.z <= CMP_EPSILON);
} }
inline bool has_no_surface() const { inline bool has_no_surface() const {
return (size.x <= CMP_EPSILON && size.y <= CMP_EPSILON && size.z <= CMP_EPSILON); return (size.x <= CMP_EPSILON && size.y <= CMP_EPSILON && size.z <= CMP_EPSILON);
} }

View File

@ -14,7 +14,6 @@ using namespace godot;
} // namespace } // namespace
struct CameraMatrix { struct CameraMatrix {
enum Planes { enum Planes {
PLANE_NEAR, PLANE_NEAR,
PLANE_FAR, PLANE_FAR,
@ -84,7 +83,6 @@ struct CameraMatrix {
}; };
Vector3 CameraMatrix::xform(const Vector3 &p_vec3) const { Vector3 CameraMatrix::xform(const Vector3 &p_vec3) const {
Vector3 ret; Vector3 ret;
ret.x = matrix[0][0] * p_vec3.x + matrix[1][0] * p_vec3.y + matrix[2][0] * p_vec3.z + matrix[3][0]; ret.x = matrix[0][0] * p_vec3.x + matrix[1][0] * p_vec3.y + matrix[2][0] * p_vec3.z + matrix[3][0];
ret.y = matrix[0][1] * p_vec3.x + matrix[1][1] * p_vec3.y + matrix[2][1] * p_vec3.z + matrix[3][1]; ret.y = matrix[0][1] * p_vec3.x + matrix[1][1] * p_vec3.y + matrix[2][1] * p_vec3.z + matrix[3][1];

View File

@ -11,12 +11,10 @@
namespace godot { namespace godot {
struct Color { struct Color {
private: private:
// static float _parse_col(const String& p_str, int p_ofs); // static float _parse_col(const String& p_str, int p_ofs);
public: public:
union { union {
struct { struct {
float r; float r;
float g; float g;

View File

@ -321,7 +321,6 @@ void register_method(const char *name, M method_ptr, godot_method_rpc_mode rpc_t
template <class D, class B, class R, class... As> template <class D, class B, class R, class... As>
void register_method_explicit(const char *name, R (B::*method_ptr)(As...), void register_method_explicit(const char *name, R (B::*method_ptr)(As...),
godot_method_rpc_mode rpc_type = GODOT_METHOD_RPC_MODE_DISABLED) { godot_method_rpc_mode rpc_type = GODOT_METHOD_RPC_MODE_DISABLED) {
static_assert(std::is_base_of<B, D>::value, "Explicit class must derive from method class"); static_assert(std::is_base_of<B, D>::value, "Explicit class must derive from method class");
register_method(name, static_cast<R (D::*)(As...)>(method_ptr), rpc_type); register_method(name, static_cast<R (D::*)(As...)>(method_ptr), rpc_type);
} }
@ -394,7 +393,6 @@ void register_property(const char *name, P(T::*var), P default_value,
godot_method_rpc_mode rpc_mode = GODOT_METHOD_RPC_MODE_DISABLED, godot_method_rpc_mode rpc_mode = GODOT_METHOD_RPC_MODE_DISABLED,
godot_property_usage_flags usage = GODOT_PROPERTY_USAGE_DEFAULT, godot_property_usage_flags usage = GODOT_PROPERTY_USAGE_DEFAULT,
godot_property_hint hint = GODOT_PROPERTY_HINT_NONE, String hint_string = "") { godot_property_hint hint = GODOT_PROPERTY_HINT_NONE, String hint_string = "") {
static_assert(T::___CLASS_IS_SCRIPT, "This function must only be used on custom classes"); static_assert(T::___CLASS_IS_SCRIPT, "This function must only be used on custom classes");
Variant def_val = default_value; Variant def_val = default_value;
@ -451,7 +449,6 @@ void register_property(const char *name, void (T::*setter)(P), P (T::*getter)(),
godot_method_rpc_mode rpc_mode = GODOT_METHOD_RPC_MODE_DISABLED, godot_method_rpc_mode rpc_mode = GODOT_METHOD_RPC_MODE_DISABLED,
godot_property_usage_flags usage = GODOT_PROPERTY_USAGE_DEFAULT, godot_property_usage_flags usage = GODOT_PROPERTY_USAGE_DEFAULT,
godot_property_hint hint = GODOT_PROPERTY_HINT_NONE, String hint_string = "") { godot_property_hint hint = GODOT_PROPERTY_HINT_NONE, String hint_string = "") {
static_assert(T::___CLASS_IS_SCRIPT, "This function must only be used on custom classes"); static_assert(T::___CLASS_IS_SCRIPT, "This function must only be used on custom classes");
Variant def_val = default_value; Variant def_val = default_value;
@ -495,7 +492,6 @@ void register_property(const char *name, void (T::*setter)(P), P (T::*getter)()
godot_method_rpc_mode rpc_mode = GODOT_METHOD_RPC_MODE_DISABLED, godot_method_rpc_mode rpc_mode = GODOT_METHOD_RPC_MODE_DISABLED,
godot_property_usage_flags usage = GODOT_PROPERTY_USAGE_DEFAULT, godot_property_usage_flags usage = GODOT_PROPERTY_USAGE_DEFAULT,
godot_property_hint hint = GODOT_PROPERTY_HINT_NONE, String hint_string = "") { godot_property_hint hint = GODOT_PROPERTY_HINT_NONE, String hint_string = "") {
register_property(name, setter, (P(T::*)())getter, default_value, rpc_mode, usage, hint, hint_string); register_property(name, setter, (P(T::*)())getter, default_value, rpc_mode, usage, hint, hint_string);
} }

View File

@ -23,7 +23,6 @@ extern "C" const godot_gdnative_ext_net_3_2_api_struct *net_3_2_api;
extern "C" const void *gdnlib; extern "C" const void *gdnlib;
class Godot { class Godot {
public: public:
static void print(const String &message); static void print(const String &message);
static void print_warning(const String &description, const String &function, const String &file, int line); static void print_warning(const String &description, const String &function, const String &file, int line);

View File

@ -232,7 +232,6 @@ inline double stepify(double p_value, double p_step) {
} }
inline unsigned int next_power_of_2(unsigned int x) { inline unsigned int next_power_of_2(unsigned int x) {
if (x == 0) if (x == 0)
return 0; return 0;

View File

@ -26,7 +26,6 @@ class PoolByteArray {
public: public:
class Read { class Read {
friend class PoolByteArray; friend class PoolByteArray;
godot_pool_byte_array_read_access *_read_access; godot_pool_byte_array_read_access *_read_access;

View File

@ -17,7 +17,6 @@ typedef Vector2 Point2;
struct Transform2D; struct Transform2D;
struct Rect2 { struct Rect2 {
Point2 position; Point2 position;
Size2 size; Size2 size;
@ -48,14 +47,12 @@ struct Rect2 {
bool intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2 *r_position = nullptr, Point2 *r_normal = nullptr) const; bool intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2 *r_position = nullptr, Point2 *r_normal = nullptr) const;
inline bool encloses(const Rect2 &p_rect) const { inline bool encloses(const Rect2 &p_rect) const {
return (p_rect.position.x >= position.x) && (p_rect.position.y >= position.y) && return (p_rect.position.x >= position.x) && (p_rect.position.y >= position.y) &&
((p_rect.position.x + p_rect.size.x) < (position.x + size.x)) && ((p_rect.position.x + p_rect.size.x) < (position.x + size.x)) &&
((p_rect.position.y + p_rect.size.y) < (position.y + size.y)); ((p_rect.position.y + p_rect.size.y) < (position.y + size.y));
} }
inline bool has_no_area() const { inline bool has_no_area() const {
return (size.x <= 0 || size.y <= 0); return (size.x <= 0 || size.y <= 0);
} }
Rect2 clip(const Rect2 &p_rect) const; Rect2 clip(const Rect2 &p_rect) const;
@ -82,7 +79,6 @@ struct Rect2 {
inline bool operator!=(const Rect2 &p_rect) const { return position != p_rect.position || size != p_rect.size; } inline bool operator!=(const Rect2 &p_rect) const { return position != p_rect.position || size != p_rect.size; }
inline Rect2 grow(real_t p_by) const { inline Rect2 grow(real_t p_by) const {
Rect2 g = *this; Rect2 g = *this;
g.position.x -= p_by; g.position.x -= p_by;
g.position.y -= p_by; g.position.y -= p_by;
@ -92,7 +88,6 @@ struct Rect2 {
} }
inline Rect2 expand(const Vector2 &p_vector) const { inline Rect2 expand(const Vector2 &p_vector) const {
Rect2 r = *this; Rect2 r = *this;
r.expand_to(p_vector); r.expand_to(p_vector);
return r; return r;

View File

@ -19,7 +19,6 @@ class Ref {
T *reference = nullptr; T *reference = nullptr;
void ref(const Ref &p_from) { void ref(const Ref &p_from) {
if (p_from.reference == reference) if (p_from.reference == reference)
return; return;
@ -31,7 +30,6 @@ class Ref {
} }
void ref_pointer(T *p_ref) { void ref_pointer(T *p_ref) {
ERR_FAIL_COND(p_ref == nullptr); ERR_FAIL_COND(p_ref == nullptr);
if (p_ref->init_ref()) if (p_ref->init_ref())
@ -40,44 +38,35 @@ class Ref {
public: public:
inline bool operator<(const Ref<T> &p_r) const { inline bool operator<(const Ref<T> &p_r) const {
return reference < p_r.reference; return reference < p_r.reference;
} }
inline bool operator==(const Ref<T> &p_r) const { inline bool operator==(const Ref<T> &p_r) const {
return reference == p_r.reference; return reference == p_r.reference;
} }
inline bool operator!=(const Ref<T> &p_r) const { inline bool operator!=(const Ref<T> &p_r) const {
return reference != p_r.reference; return reference != p_r.reference;
} }
inline T *operator->() { inline T *operator->() {
return reference; return reference;
} }
inline T *operator*() { inline T *operator*() {
return reference; return reference;
} }
inline const T *operator->() const { inline const T *operator->() const {
return reference; return reference;
} }
inline const T *ptr() const { inline const T *ptr() const {
return reference; return reference;
} }
inline T *ptr() { inline T *ptr() {
return reference; return reference;
} }
inline const T *operator*() const { inline const T *operator*() const {
return reference; return reference;
} }
@ -88,7 +77,6 @@ public:
} }
void operator=(const Ref &p_from) { void operator=(const Ref &p_from) {
ref(p_from); ref(p_from);
} }
@ -118,7 +106,6 @@ public:
} }
Ref(const Ref &p_from) { Ref(const Ref &p_from) {
reference = nullptr; reference = nullptr;
ref(p_from); ref(p_from);
} }
@ -138,7 +125,6 @@ public:
} }
Ref(T *p_reference) { Ref(T *p_reference) {
if (p_reference) if (p_reference)
ref_pointer(p_reference); ref_pointer(p_reference);
else else
@ -146,7 +132,6 @@ public:
} }
Ref(const Variant &p_variant) { Ref(const Variant &p_variant) {
reference = nullptr; reference = nullptr;
Object *refb = T::___get_from_variant(p_variant); Object *refb = T::___get_from_variant(p_variant);
if (refb == nullptr) { if (refb == nullptr) {
@ -168,7 +153,6 @@ public:
// mutexes will avoid more crashes? // mutexes will avoid more crashes?
if (reference && reference->unreference()) { if (reference && reference->unreference()) {
//memdelete(reference); //memdelete(reference);
reference->free(); reference->free();
} }
@ -181,12 +165,10 @@ public:
} }
Ref() { Ref() {
reference = nullptr; reference = nullptr;
} }
~Ref() { ~Ref() {
unref(); unref();
} }

View File

@ -14,7 +14,6 @@ class PoolStringArray;
class String; class String;
class CharString { class CharString {
friend class String; friend class String;
godot_char_string _char_string; godot_char_string _char_string;

View File

@ -14,7 +14,6 @@ namespace godot {
class Basis; class Basis;
struct Vector3 { struct Vector3 {
enum Axis { enum Axis {
AXIS_X, AXIS_X,
AXIS_Y, AXIS_Y,
@ -305,7 +304,6 @@ inline Vector3 operator*(real_t p_scalar, const Vector3 &p_vec) {
} }
inline Vector3 vec3_cross(const Vector3 &p_a, const Vector3 &p_b) { inline Vector3 vec3_cross(const Vector3 &p_a, const Vector3 &p_b) {
return p_a.cross(p_b); return p_a.cross(p_b);
} }

4
misc/ci/sources.list Normal file
View File

@ -0,0 +1,4 @@
deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse

View File

@ -7,7 +7,6 @@
namespace godot { namespace godot {
bool AABB::intersects(const AABB &p_aabb) const { bool AABB::intersects(const AABB &p_aabb) const {
if (position.x >= (p_aabb.position.x + p_aabb.size.x)) if (position.x >= (p_aabb.position.x + p_aabb.size.x))
return false; return false;
if ((position.x + size.x) <= p_aabb.position.x) if ((position.x + size.x) <= p_aabb.position.x)
@ -25,7 +24,6 @@ bool AABB::intersects(const AABB &p_aabb) const {
} }
bool AABB::intersects_inclusive(const AABB &p_aabb) const { bool AABB::intersects_inclusive(const AABB &p_aabb) const {
if (position.x > (p_aabb.position.x + p_aabb.size.x)) if (position.x > (p_aabb.position.x + p_aabb.size.x))
return false; return false;
if ((position.x + size.x) < p_aabb.position.x) if ((position.x + size.x) < p_aabb.position.x)
@ -43,7 +41,6 @@ bool AABB::intersects_inclusive(const AABB &p_aabb) const {
} }
bool AABB::encloses(const AABB &p_aabb) const { bool AABB::encloses(const AABB &p_aabb) const {
Vector3 src_min = position; Vector3 src_min = position;
Vector3 src_max = position + size; Vector3 src_max = position + size;
Vector3 dst_min = p_aabb.position; Vector3 dst_min = p_aabb.position;
@ -59,7 +56,6 @@ bool AABB::encloses(const AABB &p_aabb) const {
} }
Vector3 AABB::get_support(const Vector3 &p_normal) const { Vector3 AABB::get_support(const Vector3 &p_normal) const {
Vector3 half_extents = size * 0.5; Vector3 half_extents = size * 0.5;
Vector3 ofs = position + half_extents; Vector3 ofs = position + half_extents;
@ -71,23 +67,29 @@ Vector3 AABB::get_support(const Vector3 &p_normal) const {
} }
Vector3 AABB::get_endpoint(int p_point) const { Vector3 AABB::get_endpoint(int p_point) const {
switch (p_point) { switch (p_point) {
case 0: return Vector3(position.x, position.y, position.z); case 0:
case 1: return Vector3(position.x, position.y, position.z + size.z); return Vector3(position.x, position.y, position.z);
case 2: return Vector3(position.x, position.y + size.y, position.z); case 1:
case 3: return Vector3(position.x, position.y + size.y, position.z + size.z); return Vector3(position.x, position.y, position.z + size.z);
case 4: return Vector3(position.x + size.x, position.y, position.z); case 2:
case 5: return Vector3(position.x + size.x, position.y, position.z + size.z); return Vector3(position.x, position.y + size.y, position.z);
case 6: return Vector3(position.x + size.x, position.y + size.y, position.z); case 3:
case 7: return Vector3(position.x + size.x, position.y + size.y, position.z + size.z); return Vector3(position.x, position.y + size.y, position.z + size.z);
case 4:
return Vector3(position.x + size.x, position.y, position.z);
case 5:
return Vector3(position.x + size.x, position.y, position.z + size.z);
case 6:
return Vector3(position.x + size.x, position.y + size.y, position.z);
case 7:
return Vector3(position.x + size.x, position.y + size.y, position.z + size.z);
}; };
ERR_FAIL_V(Vector3()); ERR_FAIL_V(Vector3());
} }
bool AABB::intersects_convex_shape(const Plane *p_planes, int p_plane_count) const { bool AABB::intersects_convex_shape(const Plane *p_planes, int p_plane_count) const {
Vector3 half_extents = size * 0.5; Vector3 half_extents = size * 0.5;
Vector3 ofs = position + half_extents; Vector3 ofs = position + half_extents;
@ -106,7 +108,6 @@ bool AABB::intersects_convex_shape(const Plane *p_planes, int p_plane_count) con
} }
bool AABB::has_point(const Vector3 &p_point) const { bool AABB::has_point(const Vector3 &p_point) const {
if (p_point.x < position.x) if (p_point.x < position.x)
return false; return false;
if (p_point.y < position.y) if (p_point.y < position.y)
@ -124,7 +125,6 @@ bool AABB::has_point(const Vector3 &p_point) const {
} }
void AABB::expand_to(const Vector3 &p_vector) { void AABB::expand_to(const Vector3 &p_vector) {
Vector3 begin = position; Vector3 begin = position;
Vector3 end = position + size; Vector3 end = position + size;
@ -147,7 +147,6 @@ void AABB::expand_to(const Vector3 &p_vector) {
} }
void AABB::project_range_in_plane(const Plane &p_plane, real_t &r_min, real_t &r_max) const { void AABB::project_range_in_plane(const Plane &p_plane, real_t &r_min, real_t &r_max) const {
Vector3 half_extents(size.x * 0.5, size.y * 0.5, size.z * 0.5); Vector3 half_extents(size.x * 0.5, size.y * 0.5, size.z * 0.5);
Vector3 center(position.x + half_extents.x, position.y + half_extents.y, position.z + half_extents.z); Vector3 center(position.x + half_extents.x, position.y + half_extents.y, position.z + half_extents.z);
@ -158,7 +157,6 @@ void AABB::project_range_in_plane(const Plane &p_plane, real_t &r_min, real_t &r
} }
real_t AABB::get_longest_axis_size() const { real_t AABB::get_longest_axis_size() const {
real_t max_size = size.x; real_t max_size = size.x;
if (size.y > max_size) { if (size.y > max_size) {
@ -173,7 +171,6 @@ real_t AABB::get_longest_axis_size() const {
} }
real_t AABB::get_shortest_axis_size() const { real_t AABB::get_shortest_axis_size() const {
real_t max_size = size.x; real_t max_size = size.x;
if (size.y < max_size) { if (size.y < max_size) {
@ -188,7 +185,6 @@ real_t AABB::get_shortest_axis_size() const {
} }
bool AABB::smits_intersect_ray(const Vector3 &from, const Vector3 &dir, real_t t0, real_t t1) const { bool AABB::smits_intersect_ray(const Vector3 &from, const Vector3 &dir, real_t t0, real_t t1) const {
real_t divx = 1.0 / dir.x; real_t divx = 1.0 / dir.x;
real_t divy = 1.0 / dir.y; real_t divy = 1.0 / dir.y;
real_t divz = 1.0 / dir.z; real_t divz = 1.0 / dir.z;
@ -232,7 +228,6 @@ bool AABB::smits_intersect_ray(const Vector3 &from, const Vector3 &dir, real_t t
} }
void AABB::grow_by(real_t p_amount) { void AABB::grow_by(real_t p_amount) {
position.x -= p_amount; position.x -= p_amount;
position.y -= p_amount; position.y -= p_amount;
position.z -= p_amount; position.z -= p_amount;
@ -242,21 +237,17 @@ void AABB::grow_by(real_t p_amount) {
} }
real_t AABB::get_area() const { real_t AABB::get_area() const {
return size.x * size.y * size.z; return size.x * size.y * size.z;
} }
bool AABB::operator==(const AABB &p_rval) const { bool AABB::operator==(const AABB &p_rval) const {
return ((position == p_rval.position) && (size == p_rval.size)); return ((position == p_rval.position) && (size == p_rval.size));
} }
bool AABB::operator!=(const AABB &p_rval) const { bool AABB::operator!=(const AABB &p_rval) const {
return ((position != p_rval.position) || (size != p_rval.size)); return ((position != p_rval.position) || (size != p_rval.size));
} }
void AABB::merge_with(const AABB &p_aabb) { void AABB::merge_with(const AABB &p_aabb) {
Vector3 beg_1, beg_2; Vector3 beg_1, beg_2;
Vector3 end_1, end_2; Vector3 end_1, end_2;
Vector3 min, max; Vector3 min, max;
@ -279,7 +270,6 @@ void AABB::merge_with(const AABB &p_aabb) {
} }
AABB AABB::intersection(const AABB &p_aabb) const { AABB AABB::intersection(const AABB &p_aabb) const {
Vector3 src_min = position; Vector3 src_min = position;
Vector3 src_max = position + size; Vector3 src_max = position + size;
Vector3 dst_min = p_aabb.position; Vector3 dst_min = p_aabb.position;
@ -290,7 +280,6 @@ AABB AABB::intersection(const AABB &p_aabb) const {
if (src_min.x > dst_max.x || src_max.x < dst_min.x) if (src_min.x > dst_max.x || src_max.x < dst_min.x)
return AABB(); return AABB();
else { else {
min.x = (src_min.x > dst_min.x) ? src_min.x : dst_min.x; min.x = (src_min.x > dst_min.x) ? src_min.x : dst_min.x;
max.x = (src_max.x < dst_max.x) ? src_max.x : dst_max.x; max.x = (src_max.x < dst_max.x) ? src_max.x : dst_max.x;
} }
@ -298,7 +287,6 @@ AABB AABB::intersection(const AABB &p_aabb) const {
if (src_min.y > dst_max.y || src_max.y < dst_min.y) if (src_min.y > dst_max.y || src_max.y < dst_min.y)
return AABB(); return AABB();
else { else {
min.y = (src_min.y > dst_min.y) ? src_min.y : dst_min.y; min.y = (src_min.y > dst_min.y) ? src_min.y : dst_min.y;
max.y = (src_max.y < dst_max.y) ? src_max.y : dst_max.y; max.y = (src_max.y < dst_max.y) ? src_max.y : dst_max.y;
} }
@ -306,7 +294,6 @@ AABB AABB::intersection(const AABB &p_aabb) const {
if (src_min.z > dst_max.z || src_max.z < dst_min.z) if (src_min.z > dst_max.z || src_max.z < dst_min.z)
return AABB(); return AABB();
else { else {
min.z = (src_min.z > dst_min.z) ? src_min.z : dst_min.z; min.z = (src_min.z > dst_min.z) ? src_min.z : dst_min.z;
max.z = (src_max.z < dst_max.z) ? src_max.z : dst_max.z; max.z = (src_max.z < dst_max.z) ? src_max.z : dst_max.z;
} }
@ -315,7 +302,6 @@ AABB AABB::intersection(const AABB &p_aabb) const {
} }
bool AABB::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *r_clip, Vector3 *r_normal) const { bool AABB::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *r_clip, Vector3 *r_normal) const {
Vector3 c1, c2; Vector3 c1, c2;
Vector3 end = position + size; Vector3 end = position + size;
real_t near = -1e20; real_t near = -1e20;
@ -358,7 +344,6 @@ bool AABB::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *
} }
bool AABB::intersects_segment(const Vector3 &p_from, const Vector3 &p_to, Vector3 *r_clip, Vector3 *r_normal) const { bool AABB::intersects_segment(const Vector3 &p_from, const Vector3 &p_to, Vector3 *r_clip, Vector3 *r_normal) const {
real_t min = 0, max = 1; real_t min = 0, max = 1;
int axis = 0; int axis = 0;
real_t sign = 0; real_t sign = 0;
@ -372,7 +357,6 @@ bool AABB::intersects_segment(const Vector3 &p_from, const Vector3 &p_to, Vector
real_t csign; real_t csign;
if (seg_from < seg_to) { if (seg_from < seg_to) {
if (seg_from > box_end || seg_to < box_begin) if (seg_from > box_end || seg_to < box_begin)
return false; return false;
real_t length = seg_to - seg_from; real_t length = seg_to - seg_from;
@ -381,7 +365,6 @@ bool AABB::intersects_segment(const Vector3 &p_from, const Vector3 &p_to, Vector
csign = -1.0; csign = -1.0;
} else { } else {
if (seg_to > box_end || seg_from < box_begin) if (seg_to > box_end || seg_from < box_begin)
return false; return false;
real_t length = seg_to - seg_from; real_t length = seg_to - seg_from;
@ -416,7 +399,6 @@ bool AABB::intersects_segment(const Vector3 &p_from, const Vector3 &p_to, Vector
} }
bool AABB::intersects_plane(const Plane &p_plane) const { bool AABB::intersects_plane(const Plane &p_plane) const {
Vector3 points[8] = { Vector3 points[8] = {
Vector3(position.x, position.y, position.z), Vector3(position.x, position.y, position.z),
Vector3(position.x, position.y, position.z + size.z), Vector3(position.x, position.y, position.z + size.z),
@ -432,7 +414,6 @@ bool AABB::intersects_plane(const Plane &p_plane) const {
bool under = false; bool under = false;
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
if (p_plane.distance_to(points[i]) > 0) if (p_plane.distance_to(points[i]) > 0)
over = true; over = true;
else else
@ -443,7 +424,6 @@ bool AABB::intersects_plane(const Plane &p_plane) const {
} }
Vector3 AABB::get_longest_axis() const { Vector3 AABB::get_longest_axis() const {
Vector3 axis(1, 0, 0); Vector3 axis(1, 0, 0);
real_t max_size = size.x; real_t max_size = size.x;
@ -460,7 +440,6 @@ Vector3 AABB::get_longest_axis() const {
return axis; return axis;
} }
int AABB::get_longest_axis_index() const { int AABB::get_longest_axis_index() const {
int axis = 0; int axis = 0;
real_t max_size = size.x; real_t max_size = size.x;
@ -478,7 +457,6 @@ int AABB::get_longest_axis_index() const {
} }
Vector3 AABB::get_shortest_axis() const { Vector3 AABB::get_shortest_axis() const {
Vector3 axis(1, 0, 0); Vector3 axis(1, 0, 0);
real_t max_size = size.x; real_t max_size = size.x;
@ -495,7 +473,6 @@ Vector3 AABB::get_shortest_axis() const {
return axis; return axis;
} }
int AABB::get_shortest_axis_index() const { int AABB::get_shortest_axis_index() const {
int axis = 0; int axis = 0;
real_t max_size = size.x; real_t max_size = size.x;
@ -513,7 +490,6 @@ int AABB::get_shortest_axis_index() const {
} }
AABB AABB::merge(const AABB &p_with) const { AABB AABB::merge(const AABB &p_with) const {
AABB aabb = *this; AABB aabb = *this;
aabb.merge_with(p_with); aabb.merge_with(p_with);
return aabb; return aabb;
@ -524,24 +500,19 @@ AABB AABB::expand(const Vector3 &p_vector) const {
return aabb; return aabb;
} }
AABB AABB::grow(real_t p_by) const { AABB AABB::grow(real_t p_by) const {
AABB aabb = *this; AABB aabb = *this;
aabb.grow_by(p_by); aabb.grow_by(p_by);
return aabb; return aabb;
} }
void AABB::get_edge(int p_edge, Vector3 &r_from, Vector3 &r_to) const { void AABB::get_edge(int p_edge, Vector3 &r_from, Vector3 &r_to) const {
ERR_FAIL_INDEX(p_edge, 12); ERR_FAIL_INDEX(p_edge, 12);
switch (p_edge) { switch (p_edge) {
case 0: { case 0: {
r_from = Vector3(position.x + size.x, position.y, position.z); r_from = Vector3(position.x + size.x, position.y, position.z);
r_to = Vector3(position.x, position.y, position.z); r_to = Vector3(position.x, position.y, position.z);
} break; } break;
case 1: { case 1: {
r_from = Vector3(position.x + size.x, position.y, position.z + size.z); r_from = Vector3(position.x + size.x, position.y, position.z + size.z);
r_to = Vector3(position.x + size.x, position.y, position.z); r_to = Vector3(position.x + size.x, position.y, position.z);
} break; } break;
@ -551,18 +522,15 @@ void AABB::get_edge(int p_edge, Vector3 &r_from, Vector3 &r_to) const {
} break; } break;
case 3: { case 3: {
r_from = Vector3(position.x, position.y, position.z); r_from = Vector3(position.x, position.y, position.z);
r_to = Vector3(position.x, position.y, position.z + size.z); r_to = Vector3(position.x, position.y, position.z + size.z);
} break; } break;
case 4: { case 4: {
r_from = Vector3(position.x, position.y + size.y, position.z); r_from = Vector3(position.x, position.y + size.y, position.z);
r_to = Vector3(position.x + size.x, position.y + size.y, position.z); r_to = Vector3(position.x + size.x, position.y + size.y, position.z);
} break; } break;
case 5: { case 5: {
r_from = Vector3(position.x + size.x, position.y + size.y, position.z); r_from = Vector3(position.x + size.x, position.y + size.y, position.z);
r_to = Vector3(position.x + size.x, position.y + size.y, position.z + size.z); r_to = Vector3(position.x + size.x, position.y + size.y, position.z + size.z);
} break; } break;
@ -572,31 +540,26 @@ void AABB::get_edge(int p_edge, Vector3 &r_from, Vector3 &r_to) const {
} break; } break;
case 7: { case 7: {
r_from = Vector3(position.x, position.y + size.y, position.z + size.z); r_from = Vector3(position.x, position.y + size.y, position.z + size.z);
r_to = Vector3(position.x, position.y + size.y, position.z); r_to = Vector3(position.x, position.y + size.y, position.z);
} break; } break;
case 8: { case 8: {
r_from = Vector3(position.x, position.y, position.z + size.z); r_from = Vector3(position.x, position.y, position.z + size.z);
r_to = Vector3(position.x, position.y + size.y, position.z + size.z); r_to = Vector3(position.x, position.y + size.y, position.z + size.z);
} break; } break;
case 9: { case 9: {
r_from = Vector3(position.x, position.y, position.z); r_from = Vector3(position.x, position.y, position.z);
r_to = Vector3(position.x, position.y + size.y, position.z); r_to = Vector3(position.x, position.y + size.y, position.z);
} break; } break;
case 10: { case 10: {
r_from = Vector3(position.x + size.x, position.y, position.z); r_from = Vector3(position.x + size.x, position.y, position.z);
r_to = Vector3(position.x + size.x, position.y + size.y, position.z); r_to = Vector3(position.x + size.x, position.y + size.y, position.z);
} break; } break;
case 11: { case 11: {
r_from = Vector3(position.x + size.x, position.y, position.z + size.z); r_from = Vector3(position.x + size.x, position.y, position.z + size.z);
r_to = Vector3(position.x + size.x, position.y + size.y, position.z + size.z); r_to = Vector3(position.x + size.x, position.y + size.y, position.z + size.z);
@ -605,7 +568,6 @@ void AABB::get_edge(int p_edge, Vector3 &r_from, Vector3 &r_to) const {
} }
AABB::operator String() const { AABB::operator String() const {
return String() + position + " - " + size; return String() + position + " - " + size;
} }

View File

@ -19,12 +19,10 @@ Basis::Basis(const Vector3 &row0, const Vector3 &row1, const Vector3 &row2) {
} }
Basis::Basis(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz) { Basis::Basis(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz) {
set(xx, xy, xz, yx, yy, yz, zx, zy, zz); set(xx, xy, xz, yx, yy, yz, zx, zy, zz);
} }
Basis::Basis() { Basis::Basis() {
elements[0][0] = 1; elements[0][0] = 1;
elements[0][1] = 0; elements[0][1] = 0;
elements[0][2] = 0; elements[0][2] = 0;
@ -58,7 +56,6 @@ void Basis::invert() {
#undef cofac #undef cofac
bool Basis::isequal_approx(const Basis &a, const Basis &b) const { bool Basis::isequal_approx(const Basis &a, const Basis &b) const {
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) { for (int j = 0; j < 3; j++) {
if ((::fabs(a.elements[i][j] - b.elements[i][j]) < CMP_EPSILON) == false) if ((::fabs(a.elements[i][j] - b.elements[i][j]) < CMP_EPSILON) == false)
@ -174,7 +171,6 @@ Basis Basis::slerp(Basis b, float t) const {
// the angles in the decomposition R = X(a1).Y(a2).Z(a3) where Z(a) rotates // the angles in the decomposition R = X(a1).Y(a2).Z(a3) where Z(a) rotates
// around the z-axis by a and so on. // around the z-axis by a and so on.
Vector3 Basis::get_euler_xyz() const { Vector3 Basis::get_euler_xyz() const {
// Euler angles in XYZ convention. // Euler angles in XYZ convention.
// See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix // See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
// //
@ -218,7 +214,6 @@ Vector3 Basis::get_euler_xyz() const {
// and similar for other axes. // and similar for other axes.
// The current implementation uses XYZ convention (Z is the first rotation). // The current implementation uses XYZ convention (Z is the first rotation).
void Basis::set_euler_xyz(const Vector3 &p_euler) { void Basis::set_euler_xyz(const Vector3 &p_euler) {
real_t c, s; real_t c, s;
c = ::cos(p_euler.x); c = ::cos(p_euler.x);
@ -241,7 +236,6 @@ void Basis::set_euler_xyz(const Vector3 &p_euler) {
// as in first-Z, then-X, last-Y. The angles for X, Y, and Z rotations are returned // as in first-Z, then-X, last-Y. The angles for X, Y, and Z rotations are returned
// as the x, y, and z components of a Vector3 respectively. // as the x, y, and z components of a Vector3 respectively.
Vector3 Basis::get_euler_yxz() const { Vector3 Basis::get_euler_yxz() const {
// Euler angles in YXZ convention. // Euler angles in YXZ convention.
// See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix // See https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
// //
@ -287,7 +281,6 @@ Vector3 Basis::get_euler_yxz() const {
// and similar for other axes. // and similar for other axes.
// The current implementation uses YXZ convention (Z is the first rotation). // The current implementation uses YXZ convention (Z is the first rotation).
void Basis::set_euler_yxz(const Vector3 &p_euler) { void Basis::set_euler_yxz(const Vector3 &p_euler) {
real_t c, s; real_t c, s;
c = ::cos(p_euler.x); c = ::cos(p_euler.x);
@ -333,7 +326,6 @@ bool Basis::operator!=(const Basis &p_matrix) const {
} }
Vector3 Basis::xform(const Vector3 &p_vector) const { Vector3 Basis::xform(const Vector3 &p_vector) const {
return Vector3( return Vector3(
elements[0].dot(p_vector), elements[0].dot(p_vector),
elements[1].dot(p_vector), elements[1].dot(p_vector),
@ -341,7 +333,6 @@ Vector3 Basis::xform(const Vector3 &p_vector) const {
} }
Vector3 Basis::xform_inv(const Vector3 &p_vector) const { Vector3 Basis::xform_inv(const Vector3 &p_vector) const {
return Vector3( return Vector3(
(elements[0][0] * p_vector.x) + (elements[1][0] * p_vector.y) + (elements[2][0] * p_vector.z), (elements[0][0] * p_vector.x) + (elements[1][0] * p_vector.y) + (elements[2][0] * p_vector.z),
(elements[0][1] * p_vector.x) + (elements[1][1] * p_vector.y) + (elements[2][1] * p_vector.z), (elements[0][1] * p_vector.x) + (elements[1][1] * p_vector.y) + (elements[2][1] * p_vector.z),
@ -362,42 +353,36 @@ Basis Basis::operator*(const Basis &p_matrix) const {
} }
void Basis::operator+=(const Basis &p_matrix) { void Basis::operator+=(const Basis &p_matrix) {
elements[0] += p_matrix.elements[0]; elements[0] += p_matrix.elements[0];
elements[1] += p_matrix.elements[1]; elements[1] += p_matrix.elements[1];
elements[2] += p_matrix.elements[2]; elements[2] += p_matrix.elements[2];
} }
Basis Basis::operator+(const Basis &p_matrix) const { Basis Basis::operator+(const Basis &p_matrix) const {
Basis ret(*this); Basis ret(*this);
ret += p_matrix; ret += p_matrix;
return ret; return ret;
} }
void Basis::operator-=(const Basis &p_matrix) { void Basis::operator-=(const Basis &p_matrix) {
elements[0] -= p_matrix.elements[0]; elements[0] -= p_matrix.elements[0];
elements[1] -= p_matrix.elements[1]; elements[1] -= p_matrix.elements[1];
elements[2] -= p_matrix.elements[2]; elements[2] -= p_matrix.elements[2];
} }
Basis Basis::operator-(const Basis &p_matrix) const { Basis Basis::operator-(const Basis &p_matrix) const {
Basis ret(*this); Basis ret(*this);
ret -= p_matrix; ret -= p_matrix;
return ret; return ret;
} }
void Basis::operator*=(real_t p_val) { void Basis::operator*=(real_t p_val) {
elements[0] *= p_val; elements[0] *= p_val;
elements[1] *= p_val; elements[1] *= p_val;
elements[2] *= p_val; elements[2] *= p_val;
} }
Basis Basis::operator*(real_t p_val) const { Basis Basis::operator*(real_t p_val) const {
Basis ret(*this); Basis ret(*this);
ret *= p_val; ret *= p_val;
return ret; return ret;
@ -406,9 +391,7 @@ Basis Basis::operator*(real_t p_val) const {
Basis::operator String() const { Basis::operator String() const {
String s; String s;
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) { for (int j = 0; j < 3; j++) {
if (i != 0 || j != 0) if (i != 0 || j != 0)
s += ", "; s += ", ";
@ -421,7 +404,6 @@ Basis::operator String() const {
/* create / set */ /* create / set */
void Basis::set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz) { void Basis::set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz) {
elements[0][0] = xx; elements[0][0] = xx;
elements[0][1] = xy; elements[0][1] = xy;
elements[0][2] = xz; elements[0][2] = xz;
@ -433,12 +415,10 @@ void Basis::set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz
elements[2][2] = zz; elements[2][2] = zz;
} }
Vector3 Basis::get_column(int i) const { Vector3 Basis::get_column(int i) const {
return Vector3(elements[0][i], elements[1][i], elements[2][i]); return Vector3(elements[0][i], elements[1][i], elements[2][i]);
} }
Vector3 Basis::get_row(int i) const { Vector3 Basis::get_row(int i) const {
return Vector3(elements[i][0], elements[i][1], elements[i][2]); return Vector3(elements[i][0], elements[i][1], elements[i][2]);
} }
Vector3 Basis::get_main_diagonal() const { Vector3 Basis::get_main_diagonal() const {
@ -593,7 +573,6 @@ int Basis::get_orthogonal_index() const {
Basis orth = *this; Basis orth = *this;
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) { for (int j = 0; j < 3; j++) {
real_t v = orth[i][j]; real_t v = orth[i][j];
if (v > 0.5) if (v > 0.5)
v = 1.0; v = 1.0;
@ -607,7 +586,6 @@ int Basis::get_orthogonal_index() const {
} }
for (int i = 0; i < 24; i++) { for (int i = 0; i < 24; i++) {
if (_ortho_bases[i] == orth) if (_ortho_bases[i] == orth)
return i; return i;
} }
@ -616,7 +594,6 @@ int Basis::get_orthogonal_index() const {
} }
void Basis::set_orthogonal_index(int p_index) { void Basis::set_orthogonal_index(int p_index) {
//there only exist 24 orthogonal bases in r3 //there only exist 24 orthogonal bases in r3
ERR_FAIL_COND(p_index >= 24); ERR_FAIL_COND(p_index >= 24);
@ -624,7 +601,6 @@ void Basis::set_orthogonal_index(int p_index) {
} }
Basis::Basis(const Vector3 &p_euler) { Basis::Basis(const Vector3 &p_euler) {
set_euler(p_euler); set_euler(p_euler);
} }
@ -635,7 +611,6 @@ Basis::Basis(const Vector3 &p_euler) {
namespace godot { namespace godot {
Basis::Basis(const Quat &p_quat) { Basis::Basis(const Quat &p_quat) {
real_t d = p_quat.length_squared(); real_t d = p_quat.length_squared();
real_t s = 2.0 / d; real_t s = 2.0 / d;
real_t xs = p_quat.x * s, ys = p_quat.y * s, zs = p_quat.z * s; real_t xs = p_quat.x * s, ys = p_quat.y * s, zs = p_quat.z * s;

View File

@ -31,29 +31,22 @@
#include "CameraMatrix.hpp" #include "CameraMatrix.hpp"
void CameraMatrix::set_identity() { void CameraMatrix::set_identity() {
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) { for (int j = 0; j < 4; j++) {
matrix[i][j] = (i == j) ? 1 : 0; matrix[i][j] = (i == j) ? 1 : 0;
} }
} }
} }
void CameraMatrix::set_zero() { void CameraMatrix::set_zero() {
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) { for (int j = 0; j < 4; j++) {
matrix[i][j] = 0; matrix[i][j] = 0;
} }
} }
} }
Plane CameraMatrix::xform4(const Plane &p_vec4) const { Plane CameraMatrix::xform4(const Plane &p_vec4) const {
Plane ret; Plane ret;
ret.normal.x = matrix[0][0] * p_vec4.normal.x + matrix[1][0] * p_vec4.normal.y + matrix[2][0] * p_vec4.normal.z + matrix[3][0] * p_vec4.d; ret.normal.x = matrix[0][0] * p_vec4.normal.x + matrix[1][0] * p_vec4.normal.y + matrix[2][0] * p_vec4.normal.z + matrix[3][0] * p_vec4.d;
@ -64,7 +57,6 @@ Plane CameraMatrix::xform4(const Plane &p_vec4) const {
} }
void CameraMatrix::set_perspective(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov) { void CameraMatrix::set_perspective(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov) {
if (p_flip_fov) { if (p_flip_fov) {
p_fovy_degrees = get_fovy(p_fovy_degrees, 1.0 / p_aspect); p_fovy_degrees = get_fovy(p_fovy_degrees, 1.0 / p_aspect);
} }
@ -157,7 +149,6 @@ void CameraMatrix::set_for_hmd(int p_eye, real_t p_aspect, real_t p_intraocular_
}; };
void CameraMatrix::set_orthogonal(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_znear, real_t p_zfar) { void CameraMatrix::set_orthogonal(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_znear, real_t p_zfar) {
set_identity(); set_identity();
matrix[0][0] = 2.0 / (p_right - p_left); matrix[0][0] = 2.0 / (p_right - p_left);
@ -170,7 +161,6 @@ void CameraMatrix::set_orthogonal(real_t p_left, real_t p_right, real_t p_bottom
} }
void CameraMatrix::set_orthogonal(real_t p_size, real_t p_aspect, real_t p_znear, real_t p_zfar, bool p_flip_fov) { void CameraMatrix::set_orthogonal(real_t p_size, real_t p_aspect, real_t p_znear, real_t p_zfar, bool p_flip_fov) {
if (!p_flip_fov) { if (!p_flip_fov) {
p_size *= p_aspect; p_size *= p_aspect;
} }
@ -179,7 +169,6 @@ void CameraMatrix::set_orthogonal(real_t p_size, real_t p_aspect, real_t p_znear
} }
void CameraMatrix::set_frustum(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_near, real_t p_far) { void CameraMatrix::set_frustum(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_near, real_t p_far) {
ERR_FAIL_COND(p_right <= p_left); ERR_FAIL_COND(p_right <= p_left);
ERR_FAIL_COND(p_top <= p_bottom); ERR_FAIL_COND(p_top <= p_bottom);
ERR_FAIL_COND(p_far <= p_near); ERR_FAIL_COND(p_far <= p_near);
@ -220,7 +209,6 @@ void CameraMatrix::set_frustum(real_t p_size, real_t p_aspect, Vector2 p_offset,
} }
real_t CameraMatrix::get_z_far() const { real_t CameraMatrix::get_z_far() const {
const real_t *matrix = (const real_t *)this->matrix; const real_t *matrix = (const real_t *)this->matrix;
Plane new_plane = Plane(matrix[3] - matrix[2], Plane new_plane = Plane(matrix[3] - matrix[2],
matrix[7] - matrix[6], matrix[7] - matrix[6],
@ -233,7 +221,6 @@ real_t CameraMatrix::get_z_far() const {
return new_plane.d; return new_plane.d;
} }
real_t CameraMatrix::get_z_near() const { real_t CameraMatrix::get_z_near() const {
const real_t *matrix = (const real_t *)this->matrix; const real_t *matrix = (const real_t *)this->matrix;
Plane new_plane = Plane(matrix[3] + matrix[2], Plane new_plane = Plane(matrix[3] + matrix[2],
matrix[7] + matrix[6], matrix[7] + matrix[6],
@ -245,7 +232,6 @@ real_t CameraMatrix::get_z_near() const {
} }
Vector2 CameraMatrix::get_viewport_half_extents() const { Vector2 CameraMatrix::get_viewport_half_extents() const {
const real_t *matrix = (const real_t *)this->matrix; const real_t *matrix = (const real_t *)this->matrix;
///////--- Near Plane ---/////// ///////--- Near Plane ---///////
Plane near_plane = Plane(matrix[3] + matrix[2], Plane near_plane = Plane(matrix[3] + matrix[2],
@ -274,7 +260,6 @@ Vector2 CameraMatrix::get_viewport_half_extents() const {
} }
bool CameraMatrix::get_endpoints(const Transform &p_transform, Vector3 *p_8points) const { bool CameraMatrix::get_endpoints(const Transform &p_transform, Vector3 *p_8points) const {
std::vector<Plane> planes = get_projection_planes(Transform()); std::vector<Plane> planes = get_projection_planes(Transform());
const Planes intersections[8][3] = { const Planes intersections[8][3] = {
{ PLANE_FAR, PLANE_LEFT, PLANE_TOP }, { PLANE_FAR, PLANE_LEFT, PLANE_TOP },
@ -288,7 +273,6 @@ bool CameraMatrix::get_endpoints(const Transform &p_transform, Vector3 *p_8point
}; };
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
Vector3 point; Vector3 point;
bool res = planes[intersections[i][0]].intersect_3(planes[intersections[i][1]], planes[intersections[i][2]], &point); bool res = planes[intersections[i][0]].intersect_3(planes[intersections[i][1]], planes[intersections[i][2]], &point);
ERR_FAIL_COND_V(!res, false); ERR_FAIL_COND_V(!res, false);
@ -299,7 +283,6 @@ bool CameraMatrix::get_endpoints(const Transform &p_transform, Vector3 *p_8point
} }
std::vector<Plane> CameraMatrix::get_projection_planes(const Transform &p_transform) const { std::vector<Plane> CameraMatrix::get_projection_planes(const Transform &p_transform) const {
/** Fast Plane Extraction from combined modelview/projection matrices. /** Fast Plane Extraction from combined modelview/projection matrices.
* References: * References:
* https://web.archive.org/web/20011221205252/http://www.markmorley.com/opengl/frustumculling.html * https://web.archive.org/web/20011221205252/http://www.markmorley.com/opengl/frustumculling.html
@ -382,14 +365,12 @@ std::vector<Plane> CameraMatrix::get_projection_planes(const Transform &p_transf
} }
CameraMatrix CameraMatrix::inverse() const { CameraMatrix CameraMatrix::inverse() const {
CameraMatrix cm = *this; CameraMatrix cm = *this;
cm.invert(); cm.invert();
return cm; return cm;
} }
void CameraMatrix::invert() { void CameraMatrix::invert() {
int i, j, k; int i, j, k;
int pvt_i[4], pvt_j[4]; /* Locations of pivot matrix */ int pvt_i[4], pvt_j[4]; /* Locations of pivot matrix */
real_t pvt_val; /* Value of current pivot element */ real_t pvt_val; /* Value of current pivot element */
@ -440,20 +421,23 @@ void CameraMatrix::invert() {
/** Divide column by minus pivot value **/ /** Divide column by minus pivot value **/
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
if (i != k) matrix[i][k] /= (-pvt_val); if (i != k)
matrix[i][k] /= (-pvt_val);
} }
/** Reduce the matrix **/ /** Reduce the matrix **/
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
hold = matrix[i][k]; hold = matrix[i][k];
for (j = 0; j < 4; j++) { for (j = 0; j < 4; j++) {
if (i != k && j != k) matrix[i][j] += hold * matrix[k][j]; if (i != k && j != k)
matrix[i][j] += hold * matrix[k][j];
} }
} }
/** Divide row by pivot **/ /** Divide row by pivot **/
for (j = 0; j < 4; j++) { for (j = 0; j < 4; j++) {
if (j != k) matrix[k][j] /= pvt_val; if (j != k)
matrix[k][j] /= pvt_val;
} }
/** Replace pivot by reciprocal (at last we can touch it). **/ /** Replace pivot by reciprocal (at last we can touch it). **/
@ -483,12 +467,10 @@ void CameraMatrix::invert() {
} }
CameraMatrix::CameraMatrix() { CameraMatrix::CameraMatrix() {
set_identity(); set_identity();
} }
CameraMatrix CameraMatrix::operator*(const CameraMatrix &p_matrix) const { CameraMatrix CameraMatrix::operator*(const CameraMatrix &p_matrix) const {
CameraMatrix new_matrix; CameraMatrix new_matrix;
for (int j = 0; j < 4; j++) { for (int j = 0; j < 4; j++) {
@ -504,7 +486,6 @@ CameraMatrix CameraMatrix::operator*(const CameraMatrix &p_matrix) const {
} }
void CameraMatrix::set_light_bias() { void CameraMatrix::set_light_bias() {
real_t *m = &matrix[0][0]; real_t *m = &matrix[0][0];
m[0] = 0.5; m[0] = 0.5;
@ -526,7 +507,6 @@ void CameraMatrix::set_light_bias() {
} }
void CameraMatrix::set_light_atlas_rect(const Rect2 &p_rect) { void CameraMatrix::set_light_atlas_rect(const Rect2 &p_rect) {
real_t *m = &matrix[0][0]; real_t *m = &matrix[0][0];
m[0] = p_rect.size.width; m[0] = p_rect.size.width;
@ -548,7 +528,6 @@ void CameraMatrix::set_light_atlas_rect(const Rect2 &p_rect) {
} }
CameraMatrix::operator String() const { CameraMatrix::operator String() const {
String str; String str;
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++) for (int j = 0; j < 4; j++)
@ -558,20 +537,17 @@ CameraMatrix::operator String() const {
} }
real_t CameraMatrix::get_aspect() const { real_t CameraMatrix::get_aspect() const {
Vector2 vp_he = get_viewport_half_extents(); Vector2 vp_he = get_viewport_half_extents();
return vp_he.x / vp_he.y; return vp_he.x / vp_he.y;
} }
int CameraMatrix::get_pixels_per_meter(int p_for_pixel_width) const { int CameraMatrix::get_pixels_per_meter(int p_for_pixel_width) const {
Vector3 result = xform(Vector3(1, 0, -1)); Vector3 result = xform(Vector3(1, 0, -1));
return int((result.x * 0.5 + 0.5) * p_for_pixel_width); return int((result.x * 0.5 + 0.5) * p_for_pixel_width);
} }
bool CameraMatrix::is_orthogonal() const { bool CameraMatrix::is_orthogonal() const {
return matrix[3][3] == 1.0; return matrix[3][3] == 1.0;
} }
@ -599,7 +575,6 @@ real_t CameraMatrix::get_fov() const {
} }
void CameraMatrix::make_scale(const Vector3 &p_scale) { void CameraMatrix::make_scale(const Vector3 &p_scale) {
set_identity(); set_identity();
matrix[0][0] = p_scale.x; matrix[0][0] = p_scale.x;
matrix[1][1] = p_scale.y; matrix[1][1] = p_scale.y;
@ -607,7 +582,6 @@ void CameraMatrix::make_scale(const Vector3 &p_scale) {
} }
void CameraMatrix::scale_translate_to_fit(const AABB &p_aabb) { void CameraMatrix::scale_translate_to_fit(const AABB &p_aabb) {
Vector3 min = p_aabb.position; Vector3 min = p_aabb.position;
Vector3 max = p_aabb.position + p_aabb.size; Vector3 max = p_aabb.position + p_aabb.size;
@ -633,7 +607,6 @@ void CameraMatrix::scale_translate_to_fit(const AABB &p_aabb) {
} }
CameraMatrix::operator Transform() const { CameraMatrix::operator Transform() const {
Transform tr; Transform tr;
const real_t *m = &matrix[0][0]; const real_t *m = &matrix[0][0];
@ -657,7 +630,6 @@ CameraMatrix::operator Transform() const {
} }
CameraMatrix::CameraMatrix(const Transform &p_transform) { CameraMatrix::CameraMatrix(const Transform &p_transform) {
const Transform &tr = p_transform; const Transform &tr = p_transform;
real_t *m = &matrix[0][0]; real_t *m = &matrix[0][0];

View File

@ -13,11 +13,9 @@ namespace godot {
static String _to_hex(float p_val); static String _to_hex(float p_val);
static float _parse_col(const String &p_str, int p_ofs) { static float _parse_col(const String &p_str, int p_ofs) {
int ig = 0; int ig = 0;
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
int c = (int)(wchar_t)p_str[i + p_ofs]; int c = (int)(wchar_t)p_str[i + p_ofs];
int v = 0; int v = 0;
@ -43,7 +41,6 @@ static float _parse_col(const String &p_str, int p_ofs) {
} }
uint32_t Color::to_32() const { uint32_t Color::to_32() const {
uint32_t c = (uint8_t)(a * 255); uint32_t c = (uint8_t)(a * 255);
c <<= 8; c <<= 8;
c |= (uint8_t)(r * 255); c |= (uint8_t)(r * 255);
@ -148,7 +145,6 @@ uint8_t Color::get_a8() const {
} }
float Color::get_h() const { float Color::get_h() const {
float min = MIN(r, g); float min = MIN(r, g);
min = MIN(min, b); min = MIN(min, b);
float max = MAX(r, g); float max = MAX(r, g);
@ -334,7 +330,6 @@ Color Color::contrasted() const {
} }
Color Color::linear_interpolate(const Color &p_b, float p_t) const { Color Color::linear_interpolate(const Color &p_b, float p_t) const {
Color res = *this; Color res = *this;
res.r += (p_t * (p_b.r - r)); res.r += (p_t * (p_b.r - r));
@ -346,7 +341,6 @@ Color Color::linear_interpolate(const Color &p_b, float p_t) const {
} }
Color Color::blend(const Color &p_over) const { Color Color::blend(const Color &p_over) const {
Color res; Color res;
float sa = 1.0 - p_over.a; float sa = 1.0 - p_over.a;
res.a = a * sa + p_over.a; res.a = a * sa + p_over.a;
@ -361,7 +355,6 @@ Color Color::blend(const Color &p_over) const {
} }
Color Color::to_linear() const { Color Color::to_linear() const {
return Color( return Color(
r < 0.04045 ? r * (1.0 / 12.92) : ::pow((r + 0.055) * (1.0 / (1 + 0.055)), 2.4), r < 0.04045 ? r * (1.0 / 12.92) : ::pow((r + 0.055) * (1.0 / (1 + 0.055)), 2.4),
g < 0.04045 ? g * (1.0 / 12.92) : ::pow((g + 0.055) * (1.0 / (1 + 0.055)), 2.4), g < 0.04045 ? g * (1.0 / 12.92) : ::pow((g + 0.055) * (1.0 / (1 + 0.055)), 2.4),
@ -477,13 +470,11 @@ bool Color::html_is_valid(const String &p_color) {
#define CLAMP(m_a, m_min, m_max) (((m_a) < (m_min)) ? (m_min) : (((m_a) > (m_max)) ? m_max : m_a)) #define CLAMP(m_a, m_min, m_max) (((m_a) < (m_min)) ? (m_min) : (((m_a) > (m_max)) ? m_max : m_a))
#endif #endif
static String _to_hex(float p_val) { static String _to_hex(float p_val) {
int v = p_val * 255; int v = p_val * 255;
v = CLAMP(v, 0, 255); v = CLAMP(v, 0, 255);
String ret; String ret;
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
wchar_t c[2] = { 0, 0 }; wchar_t c[2] = { 0, 0 };
int lv = v & 0xF; int lv = v & 0xF;
if (lv < 10) if (lv < 10)
@ -514,7 +505,6 @@ Color::operator String() const {
} }
bool Color::operator<(const Color &p_color) const { bool Color::operator<(const Color &p_color) const {
if (r == p_color.r) { if (r == p_color.r) {
if (g == p_color.g) { if (g == p_color.g) {
if (b == p_color.b) { if (b == p_color.b) {
@ -528,7 +518,6 @@ bool Color::operator<(const Color &p_color) const {
} }
Color Color::operator+(const Color &p_color) const { Color Color::operator+(const Color &p_color) const {
return Color( return Color(
r + p_color.r, r + p_color.r,
g + p_color.g, g + p_color.g,
@ -537,7 +526,6 @@ Color Color::operator+(const Color &p_color) const {
} }
void Color::operator+=(const Color &p_color) { void Color::operator+=(const Color &p_color) {
r = r + p_color.r; r = r + p_color.r;
g = g + p_color.g; g = g + p_color.g;
b = b + p_color.b; b = b + p_color.b;
@ -545,7 +533,6 @@ void Color::operator+=(const Color &p_color) {
} }
Color Color::operator-(const Color &p_color) const { Color Color::operator-(const Color &p_color) const {
return Color( return Color(
r - p_color.r, r - p_color.r,
g - p_color.g, g - p_color.g,
@ -554,7 +541,6 @@ Color Color::operator-(const Color &p_color) const {
} }
void Color::operator-=(const Color &p_color) { void Color::operator-=(const Color &p_color) {
r = r - p_color.r; r = r - p_color.r;
g = g - p_color.g; g = g - p_color.g;
b = b - p_color.b; b = b - p_color.b;
@ -562,7 +548,6 @@ void Color::operator-=(const Color &p_color) {
} }
Color Color::operator*(const Color &p_color) const { Color Color::operator*(const Color &p_color) const {
return Color( return Color(
r * p_color.r, r * p_color.r,
g * p_color.g, g * p_color.g,
@ -571,7 +556,6 @@ Color Color::operator*(const Color &p_color) const {
} }
Color Color::operator*(const real_t &rvalue) const { Color Color::operator*(const real_t &rvalue) const {
return Color( return Color(
r * rvalue, r * rvalue,
g * rvalue, g * rvalue,
@ -580,7 +564,6 @@ Color Color::operator*(const real_t &rvalue) const {
} }
void Color::operator*=(const Color &p_color) { void Color::operator*=(const Color &p_color) {
r = r * p_color.r; r = r * p_color.r;
g = g * p_color.g; g = g * p_color.g;
b = b * p_color.b; b = b * p_color.b;
@ -588,7 +571,6 @@ void Color::operator*=(const Color &p_color) {
} }
void Color::operator*=(const real_t &rvalue) { void Color::operator*=(const real_t &rvalue) {
r = r * rvalue; r = r * rvalue;
g = g * rvalue; g = g * rvalue;
b = b * rvalue; b = b * rvalue;
@ -596,7 +578,6 @@ void Color::operator*=(const real_t &rvalue) {
} }
Color Color::operator/(const Color &p_color) const { Color Color::operator/(const Color &p_color) const {
return Color( return Color(
r / p_color.r, r / p_color.r,
g / p_color.g, g / p_color.g,
@ -605,7 +586,6 @@ Color Color::operator/(const Color &p_color) const {
} }
Color Color::operator/(const real_t &rvalue) const { Color Color::operator/(const real_t &rvalue) const {
return Color( return Color(
r / rvalue, r / rvalue,
g / rvalue, g / rvalue,
@ -614,7 +594,6 @@ Color Color::operator/(const real_t &rvalue) const {
} }
void Color::operator/=(const Color &p_color) { void Color::operator/=(const Color &p_color) {
r = r / p_color.r; r = r / p_color.r;
g = g / p_color.g; g = g / p_color.g;
b = b / p_color.b; b = b / p_color.b;
@ -622,7 +601,6 @@ void Color::operator/=(const Color &p_color) {
} }
void Color::operator/=(const real_t &rvalue) { void Color::operator/=(const real_t &rvalue) {
if (rvalue == 0) { if (rvalue == 0) {
r = 1.0; r = 1.0;
g = 1.0; g = 1.0;
@ -637,7 +615,6 @@ void Color::operator/=(const real_t &rvalue) {
} }
Color Color::operator-() const { Color Color::operator-() const {
return Color( return Color(
1.0 - r, 1.0 - r,
1.0 - g, 1.0 - g,

View File

@ -55,9 +55,12 @@ void Godot::print_warning(const String &description, const String &function, con
godot::api->godot_print_warning(c_desc, c_func, c_file, line); godot::api->godot_print_warning(c_desc, c_func, c_file, line);
}; };
if (c_desc != nullptr) godot::api->godot_free(c_desc); if (c_desc != nullptr)
if (c_func != nullptr) godot::api->godot_free(c_func); godot::api->godot_free(c_desc);
if (c_file != nullptr) godot::api->godot_free(c_file); if (c_func != nullptr)
godot::api->godot_free(c_func);
if (c_file != nullptr)
godot::api->godot_free(c_file);
} }
void Godot::print_error(const String &description, const String &function, const String &file, int line) { void Godot::print_error(const String &description, const String &function, const String &file, int line) {
@ -71,9 +74,12 @@ void Godot::print_error(const String &description, const String &function, const
godot::api->godot_print_error(c_desc, c_func, c_file, line); godot::api->godot_print_error(c_desc, c_func, c_file, line);
}; };
if (c_desc != nullptr) godot::api->godot_free(c_desc); if (c_desc != nullptr)
if (c_func != nullptr) godot::api->godot_free(c_func); godot::api->godot_free(c_desc);
if (c_file != nullptr) godot::api->godot_free(c_file); if (c_func != nullptr)
godot::api->godot_free(c_func);
if (c_file != nullptr)
godot::api->godot_free(c_file);
} }
void ___register_types(); void ___register_types();
@ -136,7 +142,8 @@ void Godot::gdnative_init(godot_gdnative_init_options *options) {
} }
} break; } break;
default: break; default:
break;
} }
} }

View File

@ -10,12 +10,10 @@ void Plane::set_normal(const Vector3 &p_normal) {
} }
Vector3 Plane::project(const Vector3 &p_point) const { Vector3 Plane::project(const Vector3 &p_point) const {
return p_point - normal * distance_to(p_point); return p_point - normal * distance_to(p_point);
} }
void Plane::normalize() { void Plane::normalize() {
real_t l = normal.length(); real_t l = normal.length();
if (l == 0) { if (l == 0) {
*this = Plane(0, 0, 0, 0); *this = Plane(0, 0, 0, 0);
@ -26,19 +24,16 @@ void Plane::normalize() {
} }
Plane Plane::normalized() const { Plane Plane::normalized() const {
Plane p = *this; Plane p = *this;
p.normalize(); p.normalize();
return p; return p;
} }
Vector3 Plane::get_any_point() const { Vector3 Plane::get_any_point() const {
return get_normal() * d; return get_normal() * d;
} }
Vector3 Plane::get_any_perpendicular_normal() const { Vector3 Plane::get_any_perpendicular_normal() const {
static const Vector3 p1 = Vector3(1, 0, 0); static const Vector3 p1 = Vector3(1, 0, 0);
static const Vector3 p2 = Vector3(0, 1, 0); static const Vector3 p2 = Vector3(0, 1, 0);
Vector3 p; Vector3 p;
@ -57,7 +52,6 @@ Vector3 Plane::get_any_perpendicular_normal() const {
/* intersections */ /* intersections */
bool Plane::intersect_3(const Plane &p_plane1, const Plane &p_plane2, Vector3 *r_result) const { bool Plane::intersect_3(const Plane &p_plane1, const Plane &p_plane2, Vector3 *r_result) const {
const Plane &p_plane0 = *this; const Plane &p_plane0 = *this;
Vector3 normal0 = p_plane0.normal; Vector3 normal0 = p_plane0.normal;
Vector3 normal1 = p_plane1.normal; Vector3 normal1 = p_plane1.normal;
@ -79,13 +73,11 @@ bool Plane::intersect_3(const Plane &p_plane1, const Plane &p_plane2, Vector3 *r
} }
bool Plane::intersects_ray(Vector3 p_from, Vector3 p_dir, Vector3 *p_intersection) const { bool Plane::intersects_ray(Vector3 p_from, Vector3 p_dir, Vector3 *p_intersection) const {
Vector3 segment = p_dir; Vector3 segment = p_dir;
real_t den = normal.dot(segment); real_t den = normal.dot(segment);
//printf("den is %i\n",den); //printf("den is %i\n",den);
if (::fabs(den) <= CMP_EPSILON) { if (::fabs(den) <= CMP_EPSILON) {
return false; return false;
} }
@ -104,13 +96,11 @@ bool Plane::intersects_ray(Vector3 p_from, Vector3 p_dir, Vector3 *p_intersectio
} }
bool Plane::intersects_segment(Vector3 p_begin, Vector3 p_end, Vector3 *p_intersection) const { bool Plane::intersects_segment(Vector3 p_begin, Vector3 p_end, Vector3 *p_intersection) const {
Vector3 segment = p_begin - p_end; Vector3 segment = p_begin - p_end;
real_t den = normal.dot(segment); real_t den = normal.dot(segment);
//printf("den is %i\n",den); //printf("den is %i\n",den);
if (::fabs(den) <= CMP_EPSILON) { if (::fabs(den) <= CMP_EPSILON) {
return false; return false;
} }
@ -118,7 +108,6 @@ bool Plane::intersects_segment(Vector3 p_begin, Vector3 p_end, Vector3 *p_inters
//printf("dist is %i\n",dist); //printf("dist is %i\n",dist);
if (dist < -CMP_EPSILON || dist > (1.0 + CMP_EPSILON)) { if (dist < -CMP_EPSILON || dist > (1.0 + CMP_EPSILON)) {
return false; return false;
} }
@ -131,47 +120,39 @@ bool Plane::intersects_segment(Vector3 p_begin, Vector3 p_end, Vector3 *p_inters
/* misc */ /* misc */
bool Plane::is_almost_like(const Plane &p_plane) const { bool Plane::is_almost_like(const Plane &p_plane) const {
return (normal.dot(p_plane.normal) > _PLANE_EQ_DOT_EPSILON && ::fabs(d - p_plane.d) < _PLANE_EQ_D_EPSILON); return (normal.dot(p_plane.normal) > _PLANE_EQ_DOT_EPSILON && ::fabs(d - p_plane.d) < _PLANE_EQ_D_EPSILON);
} }
Plane::operator String() const { Plane::operator String() const {
// return normal.operator String() + ", " + rtos(d); // return normal.operator String() + ", " + rtos(d);
return String(); // @Todo return String(); // @Todo
} }
bool Plane::is_point_over(const Vector3 &p_point) const { bool Plane::is_point_over(const Vector3 &p_point) const {
return (normal.dot(p_point) > d); return (normal.dot(p_point) > d);
} }
real_t Plane::distance_to(const Vector3 &p_point) const { real_t Plane::distance_to(const Vector3 &p_point) const {
return (normal.dot(p_point) - d); return (normal.dot(p_point) - d);
} }
bool Plane::has_point(const Vector3 &p_point, real_t _epsilon) const { bool Plane::has_point(const Vector3 &p_point, real_t _epsilon) const {
real_t dist = normal.dot(p_point) - d; real_t dist = normal.dot(p_point) - d;
dist = ::fabs(dist); dist = ::fabs(dist);
return (dist <= _epsilon); return (dist <= _epsilon);
} }
Plane::Plane(const Vector3 &p_normal, real_t p_d) { Plane::Plane(const Vector3 &p_normal, real_t p_d) {
normal = p_normal; normal = p_normal;
d = p_d; d = p_d;
} }
Plane::Plane(const Vector3 &p_point, const Vector3 &p_normal) { Plane::Plane(const Vector3 &p_point, const Vector3 &p_normal) {
normal = p_normal; normal = p_normal;
d = p_normal.dot(p_point); d = p_normal.dot(p_point);
} }
Plane::Plane(const Vector3 &p_point1, const Vector3 &p_point2, const Vector3 &p_point3, ClockDirection p_dir) { Plane::Plane(const Vector3 &p_point1, const Vector3 &p_point2, const Vector3 &p_point3, ClockDirection p_dir) {
if (p_dir == CLOCKWISE) if (p_dir == CLOCKWISE)
normal = (p_point1 - p_point3).cross(p_point1 - p_point2); normal = (p_point1 - p_point3).cross(p_point1 - p_point2);
else else
@ -182,12 +163,10 @@ Plane::Plane(const Vector3 &p_point1, const Vector3 &p_point2, const Vector3 &p_
} }
bool Plane::operator==(const Plane &p_plane) const { bool Plane::operator==(const Plane &p_plane) const {
return normal == p_plane.normal && d == p_plane.d; return normal == p_plane.normal && d == p_plane.d;
} }
bool Plane::operator!=(const Plane &p_plane) const { bool Plane::operator!=(const Plane &p_plane) const {
return normal != p_plane.normal || d != p_plane.d; return normal != p_plane.normal || d != p_plane.d;
} }

View File

@ -100,7 +100,6 @@ Quat Quat::inverse() const {
} }
Quat Quat::slerp(const Quat &q, const real_t &t) const { Quat Quat::slerp(const Quat &q, const real_t &t) const {
Quat to1; Quat to1;
real_t omega, cosom, sinom, scale0, scale1; real_t omega, cosom, sinom, scale0, scale1;
@ -144,12 +143,12 @@ Quat Quat::slerp(const Quat &q, const real_t &t) const {
} }
Quat Quat::slerpni(const Quat &q, const real_t &t) const { Quat Quat::slerpni(const Quat &q, const real_t &t) const {
const Quat &from = *this; const Quat &from = *this;
real_t dot = from.dot(q); real_t dot = from.dot(q);
if (::fabs(dot) > 0.9999) return from; if (::fabs(dot) > 0.9999)
return from;
real_t theta = ::acos(dot), real_t theta = ::acos(dot),
sinT = 1.0 / ::sin(theta), sinT = 1.0 / ::sin(theta),
@ -200,7 +199,6 @@ Quat Quat::operator*(const Vector3 &v) const {
} }
Vector3 Quat::xform(const Vector3 &v) const { Vector3 Quat::xform(const Vector3 &v) const {
Quat q = *this * v; Quat q = *this * v;
q *= this->inverse(); q *= this->inverse();
return Vector3(q.x, q.y, q.z); return Vector3(q.x, q.y, q.z);
@ -234,7 +232,6 @@ Quat::Quat(const Vector3 &v0, const Vector3 &v1) // shortest arc
z = 0; z = 0;
w = 0; w = 0;
} else { } else {
real_t s = ::sqrt((1.0 + d) * 2.0); real_t s = ::sqrt((1.0 + d) * 2.0);
real_t rs = 1.0 / s; real_t rs = 1.0 / s;
@ -282,7 +279,6 @@ void Quat::operator*=(const real_t &s) {
} }
void Quat::operator/=(const real_t &s) { void Quat::operator/=(const real_t &s) {
*this *= 1.0 / s; *this *= 1.0 / s;
} }

View File

@ -16,7 +16,6 @@ namespace godot {
#endif #endif
real_t Rect2::distance_to(const Vector2 &p_point) const { real_t Rect2::distance_to(const Vector2 &p_point) const {
real_t dist = 1e20; real_t dist = 1e20;
if (p_point.x < position.x) { if (p_point.x < position.x) {
@ -77,7 +76,6 @@ Rect2::operator String() const {
} }
bool Rect2::intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2 *r_position, Point2 *r_normal) const { bool Rect2::intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2 *r_position, Point2 *r_normal) const {
real_t min = 0, max = 1; real_t min = 0, max = 1;
int axis = 0; int axis = 0;
real_t sign = 0; real_t sign = 0;
@ -91,7 +89,6 @@ bool Rect2::intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2
real_t csign; real_t csign;
if (seg_from < seg_to) { if (seg_from < seg_to) {
if (seg_from > box_end || seg_to < box_begin) if (seg_from > box_end || seg_to < box_begin)
return false; return false;
real_t length = seg_to - seg_from; real_t length = seg_to - seg_from;
@ -100,7 +97,6 @@ bool Rect2::intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2
csign = -1.0; csign = -1.0;
} else { } else {
if (seg_to > box_end || seg_from < box_begin) if (seg_to > box_end || seg_from < box_begin)
return false; return false;
real_t length = seg_to - seg_from; real_t length = seg_to - seg_from;
@ -135,7 +131,6 @@ bool Rect2::intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2
} }
bool Rect2::intersects_transformed(const Transform2D &p_xform, const Rect2 &p_rect) const { bool Rect2::intersects_transformed(const Transform2D &p_xform, const Rect2 &p_rect) const {
//SAT intersection between local and transformed rect2 //SAT intersection between local and transformed rect2
Vector2 xf_points[4] = { Vector2 xf_points[4] = {

View File

@ -141,7 +141,6 @@ const wchar_t *String::unicode_str() const {
} }
char *String::alloc_c_string() const { char *String::alloc_c_string() const {
godot_char_string contents = godot::api->godot_string_utf8(&_godot_string); godot_char_string contents = godot::api->godot_string_utf8(&_godot_string);
int length = godot::api->godot_char_string_length(&contents); int length = godot::api->godot_char_string_length(&contents);
@ -166,7 +165,6 @@ CharString String::utf8() const {
} }
CharString String::ascii(bool p_extended) const { CharString String::ascii(bool p_extended) const {
CharString ret; CharString ret;
if (p_extended) if (p_extended)

View File

@ -22,14 +22,12 @@ bool is_type_known(size_t type_tag) {
} }
void register_global_type(const char *name, size_t type_tag, size_t base_type_tag) { void register_global_type(const char *name, size_t type_tag, size_t base_type_tag) {
godot::nativescript_1_1_api->godot_nativescript_set_global_type_tag(godot::_RegisterState::language_index, name, (const void *)type_tag); godot::nativescript_1_1_api->godot_nativescript_set_global_type_tag(godot::_RegisterState::language_index, name, (const void *)type_tag);
register_type(type_tag, base_type_tag); register_type(type_tag, base_type_tag);
} }
bool is_type_compatible(size_t ask_tag, size_t have_tag) { bool is_type_compatible(size_t ask_tag, size_t have_tag) {
if (have_tag == 0) if (have_tag == 0)
return false; return false;

View File

@ -15,14 +15,12 @@ const Transform Transform::FLIP_Y = Transform(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0,
const Transform Transform::FLIP_Z = 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;
return Transform(basis.transpose_xform(t.basis), return Transform(basis.transpose_xform(t.basis),
basis.xform(v)); basis.xform(v));
} }
void Transform::set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz, real_t tx, real_t ty, real_t tz) { void Transform::set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz, real_t tx, real_t ty, real_t tz) {
basis.elements[0][0] = xx; basis.elements[0][0] = xx;
basis.elements[0][1] = xy; basis.elements[0][1] = xy;
basis.elements[0][2] = xz; basis.elements[0][2] = xz;
@ -38,14 +36,12 @@ void Transform::set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_
} }
Vector3 Transform::xform(const Vector3 &p_vector) const { Vector3 Transform::xform(const Vector3 &p_vector) const {
return Vector3( return Vector3(
basis.elements[0].dot(p_vector) + origin.x, basis.elements[0].dot(p_vector) + origin.x,
basis.elements[1].dot(p_vector) + origin.y, basis.elements[1].dot(p_vector) + origin.y,
basis.elements[2].dot(p_vector) + origin.z); basis.elements[2].dot(p_vector) + origin.z);
} }
Vector3 Transform::xform_inv(const Vector3 &p_vector) const { Vector3 Transform::xform_inv(const Vector3 &p_vector) const {
Vector3 v = p_vector - origin; Vector3 v = p_vector - origin;
return Vector3( return Vector3(
@ -55,7 +51,6 @@ Vector3 Transform::xform_inv(const Vector3 &p_vector) const {
} }
Plane Transform::xform(const Plane &p_plane) const { Plane Transform::xform(const Plane &p_plane) const {
Vector3 point = p_plane.normal * p_plane.d; Vector3 point = p_plane.normal * p_plane.d;
Vector3 point_dir = point + p_plane.normal; Vector3 point_dir = point + p_plane.normal;
point = xform(point); point = xform(point);
@ -68,7 +63,6 @@ Plane Transform::xform(const Plane &p_plane) const {
return Plane(normal, d); return Plane(normal, d);
} }
Plane Transform::xform_inv(const Plane &p_plane) const { Plane Transform::xform_inv(const Plane &p_plane) const {
Vector3 point = p_plane.normal * p_plane.d; Vector3 point = p_plane.normal * p_plane.d;
Vector3 point_dir = point + p_plane.normal; Vector3 point_dir = point + p_plane.normal;
point = xform_inv(point); point = xform_inv(point);
@ -100,7 +94,6 @@ AABB Transform::xform(const AABB &p_aabb) const {
return new_aabb; return new_aabb;
} }
AABB Transform::xform_inv(const AABB &p_aabb) const { AABB Transform::xform_inv(const AABB &p_aabb) const {
/* define vertices */ /* define vertices */
Vector3 vertices[8] = { Vector3 vertices[8] = {
Vector3(p_aabb.position.x + p_aabb.size.x, p_aabb.position.y + p_aabb.size.y, p_aabb.position.z + p_aabb.size.z), Vector3(p_aabb.position.x + p_aabb.size.x, p_aabb.position.y + p_aabb.size.y, p_aabb.position.z + p_aabb.size.z),
@ -118,7 +111,6 @@ AABB Transform::xform_inv(const AABB &p_aabb) const {
ret.position = xform_inv(vertices[0]); ret.position = xform_inv(vertices[0]);
for (int i = 1; i < 8; i++) { for (int i = 1; i < 8; i++) {
ret.expand_to(xform_inv(vertices[i])); ret.expand_to(xform_inv(vertices[i]));
} }
@ -126,20 +118,17 @@ AABB Transform::xform_inv(const AABB &p_aabb) const {
} }
void Transform::affine_invert() { void Transform::affine_invert() {
basis.invert(); basis.invert();
origin = basis.xform(-origin); origin = basis.xform(-origin);
} }
Transform Transform::affine_inverse() const { Transform Transform::affine_inverse() const {
Transform ret = *this; Transform ret = *this;
ret.affine_invert(); ret.affine_invert();
return ret; return ret;
} }
void Transform::invert() { void Transform::invert() {
basis.transpose(); basis.transpose();
origin = basis.xform(-origin); origin = basis.xform(-origin);
} }
@ -153,29 +142,24 @@ Transform Transform::inverse() const {
} }
void Transform::rotate(const Vector3 &p_axis, real_t p_phi) { void Transform::rotate(const Vector3 &p_axis, real_t p_phi) {
*this = rotated(p_axis, p_phi); *this = rotated(p_axis, p_phi);
} }
Transform Transform::rotated(const Vector3 &p_axis, real_t p_phi) const { Transform Transform::rotated(const Vector3 &p_axis, real_t p_phi) const {
return Transform(Basis(p_axis, p_phi), Vector3()) * (*this); return Transform(Basis(p_axis, p_phi), Vector3()) * (*this);
} }
void Transform::rotate_basis(const Vector3 &p_axis, real_t p_phi) { void Transform::rotate_basis(const Vector3 &p_axis, real_t p_phi) {
basis.rotate(p_axis, p_phi); basis.rotate(p_axis, p_phi);
} }
Transform Transform::looking_at(const Vector3 &p_target, const Vector3 &p_up) const { Transform Transform::looking_at(const Vector3 &p_target, const Vector3 &p_up) const {
Transform t = *this; Transform t = *this;
t.set_look_at(origin, p_target, p_up); t.set_look_at(origin, p_target, p_up);
return t; return t;
} }
void Transform::set_look_at(const Vector3 &p_eye, const Vector3 &p_target, const Vector3 &p_up) { void Transform::set_look_at(const Vector3 &p_eye, const Vector3 &p_target, const Vector3 &p_up) {
// Reference: MESA source code // Reference: MESA source code
Vector3 v_x, v_y, v_z; Vector3 v_x, v_y, v_z;
@ -203,7 +187,6 @@ void Transform::set_look_at(const Vector3 &p_eye, const Vector3 &p_target, const
} }
Transform Transform::interpolate_with(const Transform &p_transform, real_t p_c) const { Transform Transform::interpolate_with(const Transform &p_transform, real_t p_c) const {
/* not sure if very "efficient" but good enough? */ /* not sure if very "efficient" but good enough? */
Vector3 src_scale = basis.get_scale(); Vector3 src_scale = basis.get_scale();
@ -223,20 +206,17 @@ Transform Transform::interpolate_with(const Transform &p_transform, real_t p_c)
} }
void Transform::scale(const Vector3 &p_scale) { void Transform::scale(const Vector3 &p_scale) {
basis.scale(p_scale); basis.scale(p_scale);
origin *= p_scale; origin *= p_scale;
} }
Transform Transform::scaled(const Vector3 &p_scale) const { Transform Transform::scaled(const Vector3 &p_scale) const {
Transform t = *this; Transform t = *this;
t.scale(p_scale); t.scale(p_scale);
return t; return t;
} }
void Transform::scale_basis(const Vector3 &p_scale) { void Transform::scale_basis(const Vector3 &p_scale) {
basis.scale(p_scale); basis.scale(p_scale);
} }
@ -244,60 +224,50 @@ void Transform::translate(real_t p_tx, real_t p_ty, real_t p_tz) {
translate(Vector3(p_tx, p_ty, p_tz)); translate(Vector3(p_tx, p_ty, p_tz));
} }
void Transform::translate(const Vector3 &p_translation) { void Transform::translate(const Vector3 &p_translation) {
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
origin[i] += basis.elements[i].dot(p_translation); origin[i] += basis.elements[i].dot(p_translation);
} }
} }
Transform Transform::translated(const Vector3 &p_translation) const { Transform Transform::translated(const Vector3 &p_translation) const {
Transform t = *this; Transform t = *this;
t.translate(p_translation); t.translate(p_translation);
return t; return t;
} }
void Transform::orthonormalize() { void Transform::orthonormalize() {
basis.orthonormalize(); basis.orthonormalize();
} }
Transform Transform::orthonormalized() const { Transform Transform::orthonormalized() const {
Transform _copy = *this; Transform _copy = *this;
_copy.orthonormalize(); _copy.orthonormalize();
return _copy; return _copy;
} }
bool Transform::operator==(const Transform &p_transform) const { bool Transform::operator==(const Transform &p_transform) const {
return (basis == p_transform.basis && origin == p_transform.origin); return (basis == p_transform.basis && origin == p_transform.origin);
} }
bool Transform::operator!=(const Transform &p_transform) const { bool Transform::operator!=(const Transform &p_transform) const {
return (basis != p_transform.basis || origin != p_transform.origin); return (basis != p_transform.basis || origin != p_transform.origin);
} }
void Transform::operator*=(const Transform &p_transform) { void Transform::operator*=(const Transform &p_transform) {
origin = xform(p_transform.origin); origin = xform(p_transform.origin);
basis *= p_transform.basis; basis *= p_transform.basis;
} }
Transform Transform::operator*(const Transform &p_transform) const { Transform Transform::operator*(const Transform &p_transform) const {
Transform t = *this; Transform t = *this;
t *= p_transform; t *= p_transform;
return t; return t;
} }
Transform::operator String() const { Transform::operator String() const {
return basis.operator String() + " - " + origin.operator String(); return basis.operator String() + " - " + origin.operator String();
} }
Transform::Transform(const Basis &p_basis, const Vector3 &p_origin) { Transform::Transform(const Basis &p_basis, const Vector3 &p_origin) {
basis = p_basis; basis = p_basis;
origin = p_origin; origin = p_origin;
} }

View File

@ -12,7 +12,6 @@ const Transform2D Transform2D::FLIP_X = Transform2D(-1, 0, 0, 1, 0, 0);
const Transform2D Transform2D::FLIP_Y = 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;
elements[0][1] = xy; elements[0][1] = xy;
elements[1][0] = yx; elements[1][0] = yx;
@ -22,28 +21,24 @@ Transform2D::Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox,
} }
Vector2 Transform2D::basis_xform(const Vector2 &v) const { Vector2 Transform2D::basis_xform(const Vector2 &v) const {
return Vector2( return Vector2(
tdotx(v), tdotx(v),
tdoty(v)); tdoty(v));
} }
Vector2 Transform2D::basis_xform_inv(const Vector2 &v) const { Vector2 Transform2D::basis_xform_inv(const Vector2 &v) const {
return Vector2( return Vector2(
elements[0].dot(v), elements[0].dot(v),
elements[1].dot(v)); elements[1].dot(v));
} }
Vector2 Transform2D::xform(const Vector2 &v) const { Vector2 Transform2D::xform(const Vector2 &v) const {
return Vector2( return Vector2(
tdotx(v), tdotx(v),
tdoty(v)) + tdoty(v)) +
elements[2]; elements[2];
} }
Vector2 Transform2D::xform_inv(const Vector2 &p_vec) const { Vector2 Transform2D::xform_inv(const Vector2 &p_vec) const {
Vector2 v = p_vec - elements[2]; Vector2 v = p_vec - elements[2];
return Vector2( return Vector2(
@ -51,7 +46,6 @@ Vector2 Transform2D::xform_inv(const Vector2 &p_vec) const {
elements[1].dot(v)); elements[1].dot(v));
} }
Rect2 Transform2D::xform(const Rect2 &p_rect) const { Rect2 Transform2D::xform(const Rect2 &p_rect) const {
Vector2 x = elements[0] * p_rect.size.x; Vector2 x = elements[0] * p_rect.size.x;
Vector2 y = elements[1] * p_rect.size.y; Vector2 y = elements[1] * p_rect.size.y;
Vector2 position = xform(p_rect.position); Vector2 position = xform(p_rect.position);
@ -65,7 +59,6 @@ Rect2 Transform2D::xform(const Rect2 &p_rect) const {
} }
void Transform2D::set_rotation_and_scale(real_t p_rot, const Size2 &p_scale) { void Transform2D::set_rotation_and_scale(real_t p_rot, const Size2 &p_scale) {
elements[0][0] = ::cos(p_rot) * p_scale.x; elements[0][0] = ::cos(p_rot) * p_scale.x;
elements[1][1] = ::cos(p_rot) * p_scale.y; elements[1][1] = ::cos(p_rot) * p_scale.y;
elements[1][0] = -::sin(p_rot) * p_scale.y; elements[1][0] = -::sin(p_rot) * p_scale.y;
@ -73,7 +66,6 @@ void Transform2D::set_rotation_and_scale(real_t p_rot, const Size2 &p_scale) {
} }
Rect2 Transform2D::xform_inv(const Rect2 &p_rect) const { Rect2 Transform2D::xform_inv(const Rect2 &p_rect) const {
Vector2 ends[4] = { Vector2 ends[4] = {
xform_inv(p_rect.position), xform_inv(p_rect.position),
xform_inv(Vector2(p_rect.position.x, p_rect.position.y + p_rect.size.y)), xform_inv(Vector2(p_rect.position.x, p_rect.position.y + p_rect.size.y)),
@ -98,14 +90,12 @@ void Transform2D::invert() {
} }
Transform2D Transform2D::inverse() const { Transform2D Transform2D::inverse() const {
Transform2D inv = *this; Transform2D inv = *this;
inv.invert(); inv.invert();
return inv; return inv;
} }
void Transform2D::affine_invert() { void Transform2D::affine_invert() {
real_t det = basis_determinant(); real_t det = basis_determinant();
ERR_FAIL_COND(det == 0); ERR_FAIL_COND(det == 0);
real_t idet = 1.0 / det; real_t idet = 1.0 / det;
@ -118,7 +108,6 @@ void Transform2D::affine_invert() {
} }
Transform2D Transform2D::affine_inverse() const { Transform2D Transform2D::affine_inverse() const {
Transform2D inv = *this; Transform2D inv = *this;
inv.affine_invert(); inv.affine_invert();
return inv; return inv;
@ -138,7 +127,6 @@ real_t Transform2D::get_rotation() const {
} }
void Transform2D::set_rotation(real_t p_rot) { void Transform2D::set_rotation(real_t p_rot) {
real_t cr = ::cos(p_rot); real_t cr = ::cos(p_rot);
real_t sr = ::sin(p_rot); real_t sr = ::sin(p_rot);
elements[0][0] = cr; elements[0][0] = cr;
@ -148,7 +136,6 @@ void Transform2D::set_rotation(real_t p_rot) {
} }
Transform2D::Transform2D(real_t p_rot, const Vector2 &p_position) { Transform2D::Transform2D(real_t p_rot, const Vector2 &p_position) {
real_t cr = ::cos(p_rot); real_t cr = ::cos(p_rot);
real_t sr = ::sin(p_rot); real_t sr = ::sin(p_rot);
elements[0][0] = cr; elements[0][0] = cr;
@ -168,23 +155,19 @@ void Transform2D::scale(const Size2 &p_scale) {
elements[2] *= p_scale; elements[2] *= p_scale;
} }
void Transform2D::scale_basis(const Size2 &p_scale) { void Transform2D::scale_basis(const Size2 &p_scale) {
elements[0][0] *= p_scale.x; elements[0][0] *= p_scale.x;
elements[0][1] *= p_scale.y; elements[0][1] *= p_scale.y;
elements[1][0] *= p_scale.x; elements[1][0] *= p_scale.x;
elements[1][1] *= p_scale.y; elements[1][1] *= p_scale.y;
} }
void Transform2D::translate(real_t p_tx, real_t p_ty) { void Transform2D::translate(real_t p_tx, real_t p_ty) {
translate(Vector2(p_tx, p_ty)); translate(Vector2(p_tx, p_ty));
} }
void Transform2D::translate(const Vector2 &p_translation) { void Transform2D::translate(const Vector2 &p_translation) {
elements[2] += basis_xform(p_translation); elements[2] += basis_xform(p_translation);
} }
void Transform2D::orthonormalize() { void Transform2D::orthonormalize() {
// Gram-Schmidt Process // Gram-Schmidt Process
Vector2 x = elements[0]; Vector2 x = elements[0];
@ -198,14 +181,12 @@ void Transform2D::orthonormalize() {
elements[1] = y; elements[1] = y;
} }
Transform2D Transform2D::orthonormalized() const { Transform2D Transform2D::orthonormalized() const {
Transform2D on = *this; Transform2D on = *this;
on.orthonormalize(); on.orthonormalize();
return on; return on;
} }
bool Transform2D::operator==(const Transform2D &p_transform) const { bool Transform2D::operator==(const Transform2D &p_transform) const {
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
if (elements[i] != p_transform.elements[i]) if (elements[i] != p_transform.elements[i])
return false; return false;
@ -215,7 +196,6 @@ bool Transform2D::operator==(const Transform2D &p_transform) const {
} }
bool Transform2D::operator!=(const Transform2D &p_transform) const { bool Transform2D::operator!=(const Transform2D &p_transform) const {
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
if (elements[i] != p_transform.elements[i]) if (elements[i] != p_transform.elements[i])
return true; return true;
@ -225,7 +205,6 @@ bool Transform2D::operator!=(const Transform2D &p_transform) const {
} }
void Transform2D::operator*=(const Transform2D &p_transform) { void Transform2D::operator*=(const Transform2D &p_transform) {
elements[2] = xform(p_transform.elements[2]); elements[2] = xform(p_transform.elements[2]);
real_t x0, x1, y0, y1; real_t x0, x1, y0, y1;
@ -242,54 +221,46 @@ void Transform2D::operator*=(const Transform2D &p_transform) {
} }
Transform2D Transform2D::operator*(const Transform2D &p_transform) const { Transform2D Transform2D::operator*(const Transform2D &p_transform) const {
Transform2D t = *this; Transform2D t = *this;
t *= p_transform; t *= p_transform;
return t; return t;
} }
Transform2D Transform2D::scaled(const Size2 &p_scale) const { Transform2D Transform2D::scaled(const Size2 &p_scale) const {
Transform2D copy = *this; Transform2D copy = *this;
copy.scale(p_scale); copy.scale(p_scale);
return copy; return copy;
} }
Transform2D Transform2D::basis_scaled(const Size2 &p_scale) const { Transform2D Transform2D::basis_scaled(const Size2 &p_scale) const {
Transform2D copy = *this; Transform2D copy = *this;
copy.scale_basis(p_scale); copy.scale_basis(p_scale);
return copy; return copy;
} }
Transform2D Transform2D::untranslated() const { Transform2D Transform2D::untranslated() const {
Transform2D copy = *this; Transform2D copy = *this;
copy.elements[2] = Vector2(); copy.elements[2] = Vector2();
return copy; return copy;
} }
Transform2D Transform2D::translated(const Vector2 &p_offset) const { Transform2D Transform2D::translated(const Vector2 &p_offset) const {
Transform2D copy = *this; Transform2D copy = *this;
copy.translate(p_offset); copy.translate(p_offset);
return copy; return copy;
} }
Transform2D Transform2D::rotated(real_t p_phi) const { Transform2D Transform2D::rotated(real_t p_phi) const {
Transform2D copy = *this; Transform2D copy = *this;
copy.rotate(p_phi); copy.rotate(p_phi);
return copy; return copy;
} }
real_t Transform2D::basis_determinant() const { real_t Transform2D::basis_determinant() const {
return elements[0].x * elements[1].y - elements[0].y * elements[1].x; return elements[0].x * elements[1].y - elements[0].y * elements[1].x;
} }
Transform2D Transform2D::interpolate_with(const Transform2D &p_transform, real_t p_c) const { Transform2D Transform2D::interpolate_with(const Transform2D &p_transform, real_t p_c) const {
//extract parameters //extract parameters
Vector2 p1 = get_origin(); Vector2 p1 = get_origin();
Vector2 p2 = p_transform.get_origin(); Vector2 p2 = p_transform.get_origin();
@ -325,7 +296,6 @@ Transform2D Transform2D::interpolate_with(const Transform2D &p_transform, real_t
} }
Transform2D::operator String() const { Transform2D::operator String() const {
return String(String() + elements[0] + ", " + elements[1] + ", " + elements[2]); return String(String() + elements[0] + ", " + elements[1] + ", " + elements[2]);
} }