Refactored Variant Operators.
-Using classes to call and a table -For typed code (GDS or GDNative), can obtain functions to call prevalidated or ptr.
This commit is contained in:
parent
391d29f558
commit
f2397809a8
|
@ -98,6 +98,37 @@ bool Array::operator==(const Array &p_array) const {
|
||||||
return _p == p_array._p;
|
return _p == p_array._p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Array::operator!=(const Array &p_array) const {
|
||||||
|
return !operator==(p_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Array::operator<(const Array &p_array) const {
|
||||||
|
int a_len = size();
|
||||||
|
int b_len = p_array.size();
|
||||||
|
|
||||||
|
int min_cmp = MIN(a_len, b_len);
|
||||||
|
|
||||||
|
for (int i = 0; i < min_cmp; i++) {
|
||||||
|
if (operator[](i) < p_array[i]) {
|
||||||
|
return true;
|
||||||
|
} else if (p_array[i] < operator[](i)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return a_len < b_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Array::operator<=(const Array &p_array) const {
|
||||||
|
return !operator>(p_array);
|
||||||
|
}
|
||||||
|
bool Array::operator>(const Array &p_array) const {
|
||||||
|
return p_array < *this;
|
||||||
|
}
|
||||||
|
bool Array::operator>=(const Array &p_array) const {
|
||||||
|
return !operator<(p_array);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t Array::hash() const {
|
uint32_t Array::hash() const {
|
||||||
uint32_t h = hash_djb2_one_32(0);
|
uint32_t h = hash_djb2_one_32(0);
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ public:
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
bool operator==(const Array &p_array) const;
|
bool operator==(const Array &p_array) const;
|
||||||
|
bool operator!=(const Array &p_array) const;
|
||||||
|
|
||||||
uint32_t hash() const;
|
uint32_t hash() const;
|
||||||
void operator=(const Array &p_array);
|
void operator=(const Array &p_array);
|
||||||
|
@ -98,6 +99,11 @@ public:
|
||||||
|
|
||||||
Array slice(int p_begin, int p_end, int p_step = 1, bool p_deep = false) const;
|
Array slice(int p_begin, int p_end, int p_step = 1, bool p_deep = false) const;
|
||||||
|
|
||||||
|
bool operator<(const Array &p_array) const;
|
||||||
|
bool operator<=(const Array &p_array) const;
|
||||||
|
bool operator>(const Array &p_array) const;
|
||||||
|
bool operator>=(const Array &p_array) const;
|
||||||
|
|
||||||
Variant min() const;
|
Variant min() const;
|
||||||
Variant max() const;
|
Variant max() const;
|
||||||
|
|
||||||
|
|
|
@ -493,7 +493,7 @@ Color Color::operator*(const Color &p_color) const {
|
||||||
a * p_color.a);
|
a * p_color.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color Color::operator*(const real_t &rvalue) const {
|
Color Color::operator*(real_t rvalue) const {
|
||||||
return Color(
|
return Color(
|
||||||
r * rvalue,
|
r * rvalue,
|
||||||
g * rvalue,
|
g * rvalue,
|
||||||
|
@ -508,7 +508,7 @@ void Color::operator*=(const Color &p_color) {
|
||||||
a = a * p_color.a;
|
a = a * p_color.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Color::operator*=(const real_t &rvalue) {
|
void Color::operator*=(real_t rvalue) {
|
||||||
r = r * rvalue;
|
r = r * rvalue;
|
||||||
g = g * rvalue;
|
g = g * rvalue;
|
||||||
b = b * rvalue;
|
b = b * rvalue;
|
||||||
|
@ -523,7 +523,7 @@ Color Color::operator/(const Color &p_color) const {
|
||||||
a / p_color.a);
|
a / p_color.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color Color::operator/(const real_t &rvalue) const {
|
Color Color::operator/(real_t rvalue) const {
|
||||||
return Color(
|
return Color(
|
||||||
r / rvalue,
|
r / rvalue,
|
||||||
g / rvalue,
|
g / rvalue,
|
||||||
|
@ -538,7 +538,7 @@ void Color::operator/=(const Color &p_color) {
|
||||||
a = a / p_color.a;
|
a = a / p_color.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Color::operator/=(const real_t &rvalue) {
|
void Color::operator/=(real_t rvalue) {
|
||||||
if (rvalue == 0) {
|
if (rvalue == 0) {
|
||||||
r = 1.0;
|
r = 1.0;
|
||||||
g = 1.0;
|
g = 1.0;
|
||||||
|
|
10
core/color.h
10
core/color.h
|
@ -79,14 +79,14 @@ struct Color {
|
||||||
void operator-=(const Color &p_color);
|
void operator-=(const Color &p_color);
|
||||||
|
|
||||||
Color operator*(const Color &p_color) const;
|
Color operator*(const Color &p_color) const;
|
||||||
Color operator*(const real_t &rvalue) const;
|
Color operator*(real_t rvalue) const;
|
||||||
void operator*=(const Color &p_color);
|
void operator*=(const Color &p_color);
|
||||||
void operator*=(const real_t &rvalue);
|
void operator*=(real_t rvalue);
|
||||||
|
|
||||||
Color operator/(const Color &p_color) const;
|
Color operator/(const Color &p_color) const;
|
||||||
Color operator/(const real_t &rvalue) const;
|
Color operator/(real_t rvalue) const;
|
||||||
void operator/=(const Color &p_color);
|
void operator/=(const Color &p_color);
|
||||||
void operator/=(const real_t &rvalue);
|
void operator/=(real_t rvalue);
|
||||||
|
|
||||||
bool is_equal_approx(const Color &p_color) const;
|
bool is_equal_approx(const Color &p_color) const;
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ bool Color::operator<(const Color &p_color) const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ Color operator*(const real_t &p_real, const Color &p_color) {
|
_FORCE_INLINE_ Color operator*(real_t p_real, const Color &p_color) {
|
||||||
return p_color * p_real;
|
return p_color * p_real;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -638,7 +638,6 @@ void register_global_constants() {
|
||||||
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_NEGATE", Variant::OP_NEGATE);
|
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_NEGATE", Variant::OP_NEGATE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_POSITIVE", Variant::OP_POSITIVE);
|
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_POSITIVE", Variant::OP_POSITIVE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_MODULE", Variant::OP_MODULE);
|
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_MODULE", Variant::OP_MODULE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_STRING_CONCAT", Variant::OP_STRING_CONCAT);
|
|
||||||
//bitwise
|
//bitwise
|
||||||
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_SHIFT_LEFT", Variant::OP_SHIFT_LEFT);
|
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_SHIFT_LEFT", Variant::OP_SHIFT_LEFT);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_SHIFT_RIGHT", Variant::OP_SHIFT_RIGHT);
|
BIND_GLOBAL_ENUM_CONSTANT_CUSTOM("OP_SHIFT_RIGHT", Variant::OP_SHIFT_RIGHT);
|
||||||
|
|
|
@ -91,6 +91,10 @@ public:
|
||||||
return v + ((uv * w) + u.cross(uv)) * ((real_t)2);
|
return v + ((uv * w) + u.cross(uv)) * ((real_t)2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_FORCE_INLINE_ Vector3 xform_inv(const Vector3 &v) const {
|
||||||
|
return inverse().xform(v);
|
||||||
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ void operator+=(const Quat &q);
|
_FORCE_INLINE_ void operator+=(const Quat &q);
|
||||||
_FORCE_INLINE_ void operator-=(const Quat &q);
|
_FORCE_INLINE_ void operator-=(const Quat &q);
|
||||||
_FORCE_INLINE_ void operator*=(const real_t &s);
|
_FORCE_INLINE_ void operator*=(const real_t &s);
|
||||||
|
|
|
@ -233,6 +233,19 @@ void Vector2i::operator/=(const int &rvalue) {
|
||||||
y /= rvalue;
|
y /= rvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector2i Vector2i::operator%(const Vector2i &p_v1) const {
|
||||||
|
return Vector2i(x % p_v1.x, y % p_v1.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2i Vector2i::operator%(const int &rvalue) const {
|
||||||
|
return Vector2i(x % rvalue, y % rvalue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Vector2i::operator%=(const int &rvalue) {
|
||||||
|
x %= rvalue;
|
||||||
|
y %= rvalue;
|
||||||
|
}
|
||||||
|
|
||||||
Vector2i Vector2i::operator-() const {
|
Vector2i Vector2i::operator-() const {
|
||||||
return Vector2i(-x, -y);
|
return Vector2i(-x, -y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -290,11 +290,13 @@ struct Vector2i {
|
||||||
void operator*=(const int &rvalue);
|
void operator*=(const int &rvalue);
|
||||||
|
|
||||||
Vector2i operator/(const Vector2i &p_v1) const;
|
Vector2i operator/(const Vector2i &p_v1) const;
|
||||||
|
|
||||||
Vector2i operator/(const int &rvalue) const;
|
Vector2i operator/(const int &rvalue) const;
|
||||||
|
|
||||||
void operator/=(const int &rvalue);
|
void operator/=(const int &rvalue);
|
||||||
|
|
||||||
|
Vector2i operator%(const Vector2i &p_v1) const;
|
||||||
|
Vector2i operator%(const int &rvalue) const;
|
||||||
|
void operator%=(const int &rvalue);
|
||||||
|
|
||||||
Vector2i operator-() const;
|
Vector2i operator-() const;
|
||||||
bool operator<(const Vector2i &p_vec2) const { return (x == p_vec2.x) ? (y < p_vec2.y) : (x < p_vec2.x); }
|
bool operator<(const Vector2i &p_vec2) const { return (x == p_vec2.x) ? (y < p_vec2.y) : (x < p_vec2.x); }
|
||||||
bool operator>(const Vector2i &p_vec2) const { return (x == p_vec2.x) ? (y > p_vec2.y) : (x > p_vec2.x); }
|
bool operator>(const Vector2i &p_vec2) const { return (x == p_vec2.x) ? (y > p_vec2.y) : (x > p_vec2.x); }
|
||||||
|
|
|
@ -80,11 +80,15 @@ struct Vector3i {
|
||||||
_FORCE_INLINE_ Vector3i operator*(const Vector3i &p_v) const;
|
_FORCE_INLINE_ Vector3i operator*(const Vector3i &p_v) const;
|
||||||
_FORCE_INLINE_ Vector3i &operator/=(const Vector3i &p_v);
|
_FORCE_INLINE_ Vector3i &operator/=(const Vector3i &p_v);
|
||||||
_FORCE_INLINE_ Vector3i operator/(const Vector3i &p_v) const;
|
_FORCE_INLINE_ Vector3i operator/(const Vector3i &p_v) const;
|
||||||
|
_FORCE_INLINE_ Vector3i &operator%=(const Vector3i &p_v);
|
||||||
|
_FORCE_INLINE_ Vector3i operator%(const Vector3i &p_v) const;
|
||||||
|
|
||||||
_FORCE_INLINE_ Vector3i &operator*=(int32_t p_scalar);
|
_FORCE_INLINE_ Vector3i &operator*=(int32_t p_scalar);
|
||||||
_FORCE_INLINE_ Vector3i operator*(int32_t p_scalar) const;
|
_FORCE_INLINE_ Vector3i operator*(int32_t p_scalar) const;
|
||||||
_FORCE_INLINE_ Vector3i &operator/=(int32_t p_scalar);
|
_FORCE_INLINE_ Vector3i &operator/=(int32_t p_scalar);
|
||||||
_FORCE_INLINE_ Vector3i operator/(int32_t p_scalar) const;
|
_FORCE_INLINE_ Vector3i operator/(int32_t p_scalar) const;
|
||||||
|
_FORCE_INLINE_ Vector3i &operator%=(int32_t p_scalar);
|
||||||
|
_FORCE_INLINE_ Vector3i operator%(int32_t p_scalar) const;
|
||||||
|
|
||||||
_FORCE_INLINE_ Vector3i operator-() const;
|
_FORCE_INLINE_ Vector3i operator-() const;
|
||||||
|
|
||||||
|
@ -159,6 +163,17 @@ Vector3i Vector3i::operator/(const Vector3i &p_v) const {
|
||||||
return Vector3i(x / p_v.x, y / p_v.y, z / p_v.z);
|
return Vector3i(x / p_v.x, y / p_v.y, z / p_v.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector3i &Vector3i::operator%=(const Vector3i &p_v) {
|
||||||
|
x %= p_v.x;
|
||||||
|
y %= p_v.y;
|
||||||
|
z %= p_v.z;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3i Vector3i::operator%(const Vector3i &p_v) const {
|
||||||
|
return Vector3i(x % p_v.x, y % p_v.y, z % p_v.z);
|
||||||
|
}
|
||||||
|
|
||||||
Vector3i &Vector3i::operator*=(int32_t p_scalar) {
|
Vector3i &Vector3i::operator*=(int32_t p_scalar) {
|
||||||
x *= p_scalar;
|
x *= p_scalar;
|
||||||
y *= p_scalar;
|
y *= p_scalar;
|
||||||
|
@ -185,6 +200,17 @@ Vector3i Vector3i::operator/(int32_t p_scalar) const {
|
||||||
return Vector3i(x / p_scalar, y / p_scalar, z / p_scalar);
|
return Vector3i(x / p_scalar, y / p_scalar, z / p_scalar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector3i &Vector3i::operator%=(int32_t p_scalar) {
|
||||||
|
x %= p_scalar;
|
||||||
|
y %= p_scalar;
|
||||||
|
z %= p_scalar;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3i Vector3i::operator%(int32_t p_scalar) const {
|
||||||
|
return Vector3i(x % p_scalar, y % p_scalar, z % p_scalar);
|
||||||
|
}
|
||||||
|
|
||||||
Vector3i Vector3i::operator-() const {
|
Vector3i Vector3i::operator-() const {
|
||||||
return Vector3i(-x, -y, -z);
|
return Vector3i(-x, -y, -z);
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,8 @@ extern void register_global_constants();
|
||||||
extern void unregister_global_constants();
|
extern void unregister_global_constants();
|
||||||
extern void register_variant_methods();
|
extern void register_variant_methods();
|
||||||
extern void unregister_variant_methods();
|
extern void unregister_variant_methods();
|
||||||
|
extern void register_variant_operators();
|
||||||
|
extern void unregister_variant_operators();
|
||||||
|
|
||||||
void register_core_types() {
|
void register_core_types() {
|
||||||
//consistency check
|
//consistency check
|
||||||
|
@ -112,6 +114,7 @@ void register_core_types() {
|
||||||
|
|
||||||
register_global_constants();
|
register_global_constants();
|
||||||
register_variant_methods();
|
register_variant_methods();
|
||||||
|
register_variant_operators();
|
||||||
|
|
||||||
CoreStringNames::create();
|
CoreStringNames::create();
|
||||||
|
|
||||||
|
@ -319,6 +322,7 @@ void unregister_core_types() {
|
||||||
ClassDB::cleanup_defaults();
|
ClassDB::cleanup_defaults();
|
||||||
ObjectDB::cleanup();
|
ObjectDB::cleanup();
|
||||||
|
|
||||||
|
unregister_variant_operators();
|
||||||
unregister_variant_methods();
|
unregister_variant_methods();
|
||||||
unregister_global_constants();
|
unregister_global_constants();
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,9 @@ public:
|
||||||
_FORCE_INLINE_ bool operator>(const RID &p_rid) const {
|
_FORCE_INLINE_ bool operator>(const RID &p_rid) const {
|
||||||
return _id > p_rid._id;
|
return _id > p_rid._id;
|
||||||
}
|
}
|
||||||
|
_FORCE_INLINE_ bool operator>=(const RID &p_rid) const {
|
||||||
|
return _id >= p_rid._id;
|
||||||
|
}
|
||||||
_FORCE_INLINE_ bool operator!=(const RID &p_rid) const {
|
_FORCE_INLINE_ bool operator!=(const RID &p_rid) const {
|
||||||
return _id != p_rid._id;
|
return _id != p_rid._id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -377,3 +377,17 @@ StringName StringName::search(const String &p_name) {
|
||||||
StringName::~StringName() {
|
StringName::~StringName() {
|
||||||
unref();
|
unref();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool operator==(const String &p_name, const StringName &p_string_name) {
|
||||||
|
return p_name == p_string_name.operator String();
|
||||||
|
}
|
||||||
|
bool operator!=(const String &p_name, const StringName &p_string_name) {
|
||||||
|
return p_name != p_string_name.operator String();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const char *p_name, const StringName &p_string_name) {
|
||||||
|
return p_name == p_string_name.operator String();
|
||||||
|
}
|
||||||
|
bool operator!=(const char *p_name, const StringName &p_string_name) {
|
||||||
|
return p_name != p_string_name.operator String();
|
||||||
|
}
|
||||||
|
|
|
@ -155,6 +155,11 @@ public:
|
||||||
~StringName();
|
~StringName();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool operator==(const String &p_name, const StringName &p_string_name);
|
||||||
|
bool operator!=(const String &p_name, const StringName &p_string_name);
|
||||||
|
bool operator==(const char *p_name, const StringName &p_string_name);
|
||||||
|
bool operator!=(const char *p_name, const StringName &p_string_name);
|
||||||
|
|
||||||
StringName _scs_create(const char *p_chr);
|
StringName _scs_create(const char *p_chr);
|
||||||
|
|
||||||
#endif // STRING_NAME_H
|
#endif // STRING_NAME_H
|
||||||
|
|
|
@ -637,6 +637,20 @@ bool operator==(const wchar_t *p_chr, const String &p_str) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool operator!=(const char *p_chr, const String &p_str) {
|
||||||
|
return !(p_str == p_chr);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!=(const wchar_t *p_chr, const String &p_str) {
|
||||||
|
#ifdef WINDOWS_ENABLED
|
||||||
|
// wchar_t is 16-bit
|
||||||
|
return !(p_str == String::utf16((const char16_t *)p_chr));
|
||||||
|
#else
|
||||||
|
// wchar_t is 32-bi
|
||||||
|
return !(p_str == String((const char32_t *)p_chr));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
bool String::operator!=(const char *p_str) const {
|
bool String::operator!=(const char *p_str) const {
|
||||||
return (!(*this == p_str));
|
return (!(*this == p_str));
|
||||||
}
|
}
|
||||||
|
@ -654,7 +668,14 @@ bool String::operator!=(const String &p_str) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool String::operator<=(const String &p_str) const {
|
bool String::operator<=(const String &p_str) const {
|
||||||
return (*this < p_str) || (*this == p_str);
|
return !(p_str < *this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool String::operator>(const String &p_str) const {
|
||||||
|
return p_str < *this;
|
||||||
|
}
|
||||||
|
bool String::operator>=(const String &p_str) const {
|
||||||
|
return !(*this < p_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool String::operator<(const char *p_str) const {
|
bool String::operator<(const char *p_str) const {
|
||||||
|
@ -4455,7 +4476,9 @@ String String::sprintf(const Array &values, bool *error) const {
|
||||||
bool left_justified = false;
|
bool left_justified = false;
|
||||||
bool show_sign = false;
|
bool show_sign = false;
|
||||||
|
|
||||||
|
if (error) {
|
||||||
*error = true;
|
*error = true;
|
||||||
|
}
|
||||||
|
|
||||||
for (; *self; self++) {
|
for (; *self; self++) {
|
||||||
const char32_t c = *self;
|
const char32_t c = *self;
|
||||||
|
@ -4716,7 +4739,9 @@ String String::sprintf(const Array &values, bool *error) const {
|
||||||
return "not all arguments converted during string formatting";
|
return "not all arguments converted during string formatting";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (error) {
|
||||||
*error = false;
|
*error = false;
|
||||||
|
}
|
||||||
return formatted;
|
return formatted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -254,6 +254,8 @@ public:
|
||||||
|
|
||||||
bool operator<(const String &p_str) const;
|
bool operator<(const String &p_str) const;
|
||||||
bool operator<=(const String &p_str) const;
|
bool operator<=(const String &p_str) const;
|
||||||
|
bool operator>(const String &p_str) const;
|
||||||
|
bool operator>=(const String &p_str) const;
|
||||||
|
|
||||||
signed char casecmp_to(const String &p_str) const;
|
signed char casecmp_to(const String &p_str) const;
|
||||||
signed char nocasecmp_to(const String &p_str) const;
|
signed char nocasecmp_to(const String &p_str) const;
|
||||||
|
@ -456,6 +458,8 @@ public:
|
||||||
|
|
||||||
bool operator==(const char *p_chr, const String &p_str);
|
bool operator==(const char *p_chr, const String &p_str);
|
||||||
bool operator==(const wchar_t *p_chr, const String &p_str);
|
bool operator==(const wchar_t *p_chr, const String &p_str);
|
||||||
|
bool operator!=(const char *p_chr, const String &p_str);
|
||||||
|
bool operator!=(const wchar_t *p_chr, const String &p_str);
|
||||||
|
|
||||||
String operator+(const char *p_chr, const String &p_str);
|
String operator+(const char *p_chr, const String &p_str);
|
||||||
String operator+(const wchar_t *p_chr, const String &p_str);
|
String operator+(const wchar_t *p_chr, const String &p_str);
|
||||||
|
|
|
@ -381,7 +381,6 @@ public:
|
||||||
OP_NEGATE,
|
OP_NEGATE,
|
||||||
OP_POSITIVE,
|
OP_POSITIVE,
|
||||||
OP_MODULE,
|
OP_MODULE,
|
||||||
OP_STRING_CONCAT,
|
|
||||||
//bitwise
|
//bitwise
|
||||||
OP_SHIFT_LEFT,
|
OP_SHIFT_LEFT,
|
||||||
OP_SHIFT_RIGHT,
|
OP_SHIFT_RIGHT,
|
||||||
|
@ -409,6 +408,14 @@ public:
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Variant::Type get_operator_return_type(Operator p_operator, Type p_type_a, Type p_type_b);
|
||||||
|
typedef void (*ValidatedOperatorEvaluator)(const Variant *left, const Variant *right, Variant *r_ret);
|
||||||
|
static ValidatedOperatorEvaluator get_validated_operator_evaluator(Operator p_operator, Type p_type_a, Type p_type_b);
|
||||||
|
#ifdef PTRCALL_ENABLED
|
||||||
|
typedef void (*PTROperatorEvaluator)(const void *left, const void *right, void *r_ret);
|
||||||
|
static PTROperatorEvaluator get_ptr_operator_evaluator(Operator p_operator, Type p_type_a, Type p_type_b);
|
||||||
|
#endif
|
||||||
|
|
||||||
void zero();
|
void zero();
|
||||||
Variant duplicate(bool deep = false) const;
|
Variant duplicate(bool deep = false) const;
|
||||||
static void blend(const Variant &a, const Variant &b, float c, Variant &r_dst);
|
static void blend(const Variant &a, const Variant &b, float c, Variant &r_dst);
|
||||||
|
|
6532
core/variant_op.cpp
6532
core/variant_op.cpp
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -157,6 +157,32 @@ public:
|
||||||
return slice;
|
return slice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool operator==(const Vector<T> &p_arr) const {
|
||||||
|
int s = size();
|
||||||
|
if (s != p_arr.size()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < s; i++) {
|
||||||
|
if (operator[](i) != p_arr[i]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!=(const Vector<T> &p_arr) const {
|
||||||
|
int s = size();
|
||||||
|
if (s != p_arr.size()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < s; i++) {
|
||||||
|
if (operator[](i) != p_arr[i]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ Vector() {}
|
_FORCE_INLINE_ Vector() {}
|
||||||
_FORCE_INLINE_ Vector(const Vector &p_from) { _cowdata._ref(p_from._cowdata); }
|
_FORCE_INLINE_ Vector(const Vector &p_from) { _cowdata._ref(p_from._cowdata); }
|
||||||
|
|
||||||
|
|
|
@ -471,28 +471,28 @@ void DependencyRemoveDialog::ok_pressed() {
|
||||||
|
|
||||||
// If the file we are deleting for e.g. the main scene, default environment,
|
// If the file we are deleting for e.g. the main scene, default environment,
|
||||||
// or audio bus layout, we must clear its definition in Project Settings.
|
// or audio bus layout, we must clear its definition in Project Settings.
|
||||||
if (files_to_delete[i] == ProjectSettings::get_singleton()->get("application/config/icon")) {
|
if (files_to_delete[i] == String(ProjectSettings::get_singleton()->get("application/config/icon"))) {
|
||||||
ProjectSettings::get_singleton()->set("application/config/icon", "");
|
ProjectSettings::get_singleton()->set("application/config/icon", "");
|
||||||
}
|
}
|
||||||
if (files_to_delete[i] == ProjectSettings::get_singleton()->get("application/run/main_scene")) {
|
if (files_to_delete[i] == String(ProjectSettings::get_singleton()->get("application/run/main_scene"))) {
|
||||||
ProjectSettings::get_singleton()->set("application/run/main_scene", "");
|
ProjectSettings::get_singleton()->set("application/run/main_scene", "");
|
||||||
}
|
}
|
||||||
if (files_to_delete[i] == ProjectSettings::get_singleton()->get("application/boot_splash/image")) {
|
if (files_to_delete[i] == String(ProjectSettings::get_singleton()->get("application/boot_splash/image"))) {
|
||||||
ProjectSettings::get_singleton()->set("application/boot_splash/image", "");
|
ProjectSettings::get_singleton()->set("application/boot_splash/image", "");
|
||||||
}
|
}
|
||||||
if (files_to_delete[i] == ProjectSettings::get_singleton()->get("rendering/environment/default_environment")) {
|
if (files_to_delete[i] == String(ProjectSettings::get_singleton()->get("rendering/environment/default_environment"))) {
|
||||||
ProjectSettings::get_singleton()->set("rendering/environment/default_environment", "");
|
ProjectSettings::get_singleton()->set("rendering/environment/default_environment", "");
|
||||||
}
|
}
|
||||||
if (files_to_delete[i] == ProjectSettings::get_singleton()->get("display/mouse_cursor/custom_image")) {
|
if (files_to_delete[i] == String(ProjectSettings::get_singleton()->get("display/mouse_cursor/custom_image"))) {
|
||||||
ProjectSettings::get_singleton()->set("display/mouse_cursor/custom_image", "");
|
ProjectSettings::get_singleton()->set("display/mouse_cursor/custom_image", "");
|
||||||
}
|
}
|
||||||
if (files_to_delete[i] == ProjectSettings::get_singleton()->get("gui/theme/custom")) {
|
if (files_to_delete[i] == String(ProjectSettings::get_singleton()->get("gui/theme/custom"))) {
|
||||||
ProjectSettings::get_singleton()->set("gui/theme/custom", "");
|
ProjectSettings::get_singleton()->set("gui/theme/custom", "");
|
||||||
}
|
}
|
||||||
if (files_to_delete[i] == ProjectSettings::get_singleton()->get("gui/theme/custom_font")) {
|
if (files_to_delete[i] == String(ProjectSettings::get_singleton()->get("gui/theme/custom_font"))) {
|
||||||
ProjectSettings::get_singleton()->set("gui/theme/custom_font", "");
|
ProjectSettings::get_singleton()->set("gui/theme/custom_font", "");
|
||||||
}
|
}
|
||||||
if (files_to_delete[i] == ProjectSettings::get_singleton()->get("audio/default_bus_layout")) {
|
if (files_to_delete[i] == String(ProjectSettings::get_singleton()->get("audio/default_bus_layout"))) {
|
||||||
ProjectSettings::get_singleton()->set("audio/default_bus_layout", "");
|
ProjectSettings::get_singleton()->set("audio/default_bus_layout", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4687,7 +4687,7 @@ void Node3DEditor::set_state(const Dictionary &p_state) {
|
||||||
}
|
}
|
||||||
int state = EditorNode3DGizmoPlugin::VISIBLE;
|
int state = EditorNode3DGizmoPlugin::VISIBLE;
|
||||||
for (int i = 0; i < keys.size(); i++) {
|
for (int i = 0; i < keys.size(); i++) {
|
||||||
if (gizmo_plugins_by_name.write[j]->get_name() == keys[i]) {
|
if (gizmo_plugins_by_name.write[j]->get_name() == String(keys[i])) {
|
||||||
state = gizmos_status[keys[i]];
|
state = gizmos_status[keys[i]];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2397,7 +2397,7 @@ void ScriptEditor::_editor_settings_changed() {
|
||||||
|
|
||||||
if (current_theme == "") {
|
if (current_theme == "") {
|
||||||
current_theme = EditorSettings::get_singleton()->get("text_editor/theme/color_theme");
|
current_theme = EditorSettings::get_singleton()->get("text_editor/theme/color_theme");
|
||||||
} else if (current_theme != EditorSettings::get_singleton()->get("text_editor/theme/color_theme")) {
|
} else if (current_theme != String(EditorSettings::get_singleton()->get("text_editor/theme/color_theme"))) {
|
||||||
current_theme = EditorSettings::get_singleton()->get("text_editor/theme/color_theme");
|
current_theme = EditorSettings::get_singleton()->get("text_editor/theme/color_theme");
|
||||||
EditorSettings::get_singleton()->load_text_editor_theme();
|
EditorSettings::get_singleton()->load_text_editor_theme();
|
||||||
}
|
}
|
||||||
|
|
|
@ -875,7 +875,8 @@ void TextureRegionEditor::_changed_callback(Object *p_changed, const char *p_pro
|
||||||
if (!is_visible()) {
|
if (!is_visible()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (p_prop == StringName("atlas") || p_prop == StringName("texture") || p_prop == StringName("region")) {
|
String prop = p_prop;
|
||||||
|
if (prop == "atlas" || prop == "texture" || prop == "region") {
|
||||||
_edit_region();
|
_edit_region();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2232,7 +2232,7 @@ bool Main::start() {
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (editor) {
|
if (editor) {
|
||||||
if (game_path != GLOBAL_GET("application/run/main_scene") || !editor_node->has_scenes_in_session()) {
|
if (game_path != String(GLOBAL_GET("application/run/main_scene")) || !editor_node->has_scenes_in_session()) {
|
||||||
Error serr = editor_node->load_scene(local_game_path);
|
Error serr = editor_node->load_scene(local_game_path);
|
||||||
if (serr != OK) {
|
if (serr != OK) {
|
||||||
ERR_PRINT("Failed to load scene");
|
ERR_PRINT("Failed to load scene");
|
||||||
|
|
|
@ -828,7 +828,6 @@ PropertyInfo VisualScriptOperator::get_input_value_port_info(int p_idx) const {
|
||||||
{ Variant::NIL, Variant::NIL }, //OP_NEGATE,
|
{ Variant::NIL, Variant::NIL }, //OP_NEGATE,
|
||||||
{ Variant::NIL, Variant::NIL }, //OP_POSITIVE,
|
{ Variant::NIL, Variant::NIL }, //OP_POSITIVE,
|
||||||
{ Variant::INT, Variant::INT }, //OP_MODULE,
|
{ Variant::INT, Variant::INT }, //OP_MODULE,
|
||||||
{ Variant::STRING, Variant::STRING }, //OP_STRING_CONCAT,
|
|
||||||
//bitwise
|
//bitwise
|
||||||
{ Variant::INT, Variant::INT }, //OP_SHIFT_LEFT,
|
{ Variant::INT, Variant::INT }, //OP_SHIFT_LEFT,
|
||||||
{ Variant::INT, Variant::INT }, //OP_SHIFT_RIGHT,
|
{ Variant::INT, Variant::INT }, //OP_SHIFT_RIGHT,
|
||||||
|
@ -873,7 +872,6 @@ PropertyInfo VisualScriptOperator::get_output_value_port_info(int p_idx) const {
|
||||||
Variant::NIL, //OP_NEGATE,
|
Variant::NIL, //OP_NEGATE,
|
||||||
Variant::NIL, //OP_POSITIVE,
|
Variant::NIL, //OP_POSITIVE,
|
||||||
Variant::INT, //OP_MODULE,
|
Variant::INT, //OP_MODULE,
|
||||||
Variant::STRING, //OP_STRING_CONCAT,
|
|
||||||
//bitwise
|
//bitwise
|
||||||
Variant::INT, //OP_SHIFT_LEFT,
|
Variant::INT, //OP_SHIFT_LEFT,
|
||||||
Variant::INT, //OP_SHIFT_RIGHT,
|
Variant::INT, //OP_SHIFT_RIGHT,
|
||||||
|
@ -3881,7 +3879,6 @@ void register_visual_script_nodes() {
|
||||||
VisualScriptLanguage::singleton->add_register_func("operators/math/negate", create_op_node<Variant::OP_NEGATE>);
|
VisualScriptLanguage::singleton->add_register_func("operators/math/negate", create_op_node<Variant::OP_NEGATE>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("operators/math/positive", create_op_node<Variant::OP_POSITIVE>);
|
VisualScriptLanguage::singleton->add_register_func("operators/math/positive", create_op_node<Variant::OP_POSITIVE>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("operators/math/remainder", create_op_node<Variant::OP_MODULE>);
|
VisualScriptLanguage::singleton->add_register_func("operators/math/remainder", create_op_node<Variant::OP_MODULE>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("operators/math/string_concat", create_op_node<Variant::OP_STRING_CONCAT>);
|
|
||||||
//bitwise
|
//bitwise
|
||||||
VisualScriptLanguage::singleton->add_register_func("operators/bitwise/shift_left", create_op_node<Variant::OP_SHIFT_LEFT>);
|
VisualScriptLanguage::singleton->add_register_func("operators/bitwise/shift_left", create_op_node<Variant::OP_SHIFT_LEFT>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("operators/bitwise/shift_right", create_op_node<Variant::OP_SHIFT_RIGHT>);
|
VisualScriptLanguage::singleton->add_register_func("operators/bitwise/shift_right", create_op_node<Variant::OP_SHIFT_RIGHT>);
|
||||||
|
|
|
@ -381,7 +381,7 @@ TEST_CASE("[Expression] Unusual expressions") {
|
||||||
|
|
||||||
ERR_PRINT_OFF;
|
ERR_PRINT_OFF;
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
expression.parse("$1.00 + €5") == OK,
|
expression.parse("$1.00 + ???5") == OK,
|
||||||
"The expression should parse successfully.");
|
"The expression should parse successfully.");
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
int(expression.execute()) == 0,
|
int(expression.execute()) == 0,
|
||||||
|
@ -410,8 +410,8 @@ TEST_CASE("[Expression] Unusual expressions") {
|
||||||
"The expression should parse successfully.");
|
"The expression should parse successfully.");
|
||||||
ERR_PRINT_OFF;
|
ERR_PRINT_OFF;
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
Math::is_zero_approx(float(expression.execute())),
|
Math::is_inf(float(expression.execute())),
|
||||||
"`-25.4 / 0` should return 0.");
|
"`-25.4 / 0` should return inf.");
|
||||||
ERR_PRINT_ON;
|
ERR_PRINT_ON;
|
||||||
|
|
||||||
CHECK_MESSAGE(
|
CHECK_MESSAGE(
|
||||||
|
|
Loading…
Reference in New Issue