|
@@ -99,18 +99,105 @@ struct VariantUtilityFunctions {
|
|
return Math::posmod(b, r);
|
|
return Math::posmod(b, r);
|
|
}
|
|
}
|
|
|
|
|
|
- static inline double floor(double x) {
|
|
|
|
|
|
+ static inline Variant floor(Variant x, Callable::CallError &r_error) {
|
|
|
|
+ r_error.error = Callable::CallError::CALL_OK;
|
|
|
|
+ switch (x.get_type()) {
|
|
|
|
+ case Variant::INT: {
|
|
|
|
+ return VariantInternalAccessor<int64_t>::get(&x);
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::FLOAT: {
|
|
|
|
+ return Math::floor(VariantInternalAccessor<double>::get(&x));
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR2: {
|
|
|
|
+ return VariantInternalAccessor<Vector2>::get(&x).floor();
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR3: {
|
|
|
|
+ return VariantInternalAccessor<Vector3>::get(&x).floor();
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR4: {
|
|
|
|
+ return VariantInternalAccessor<Vector4>::get(&x).floor();
|
|
|
|
+ } break;
|
|
|
|
+ default: {
|
|
|
|
+ r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
|
|
|
|
+ return Variant();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static inline double floorf(double x) {
|
|
return Math::floor(x);
|
|
return Math::floor(x);
|
|
}
|
|
}
|
|
|
|
|
|
- static inline double ceil(double x) {
|
|
|
|
|
|
+ static inline int floori(double x) {
|
|
|
|
+ return int(x);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static inline Variant ceil(Variant x, Callable::CallError &r_error) {
|
|
|
|
+ r_error.error = Callable::CallError::CALL_OK;
|
|
|
|
+ switch (x.get_type()) {
|
|
|
|
+ case Variant::INT: {
|
|
|
|
+ return VariantInternalAccessor<int64_t>::get(&x);
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::FLOAT: {
|
|
|
|
+ return Math::ceil(VariantInternalAccessor<double>::get(&x));
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR2: {
|
|
|
|
+ return VariantInternalAccessor<Vector2>::get(&x).ceil();
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR3: {
|
|
|
|
+ return VariantInternalAccessor<Vector3>::get(&x).ceil();
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR4: {
|
|
|
|
+ return VariantInternalAccessor<Vector4>::get(&x).ceil();
|
|
|
|
+ } break;
|
|
|
|
+ default: {
|
|
|
|
+ r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
|
|
|
|
+ return Variant();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static inline double ceilf(double x) {
|
|
return Math::ceil(x);
|
|
return Math::ceil(x);
|
|
}
|
|
}
|
|
|
|
|
|
- static inline double round(double x) {
|
|
|
|
|
|
+ static inline int ceili(double x) {
|
|
|
|
+ return int(Math::ceil(x));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static inline Variant round(Variant x, Callable::CallError &r_error) {
|
|
|
|
+ r_error.error = Callable::CallError::CALL_OK;
|
|
|
|
+ switch (x.get_type()) {
|
|
|
|
+ case Variant::INT: {
|
|
|
|
+ return VariantInternalAccessor<int64_t>::get(&x);
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::FLOAT: {
|
|
|
|
+ return Math::round(VariantInternalAccessor<double>::get(&x));
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR2: {
|
|
|
|
+ return VariantInternalAccessor<Vector2>::get(&x).round();
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR3: {
|
|
|
|
+ return VariantInternalAccessor<Vector3>::get(&x).round();
|
|
|
|
+ } break;
|
|
|
|
+ case Variant::VECTOR4: {
|
|
|
|
+ return VariantInternalAccessor<Vector4>::get(&x).round();
|
|
|
|
+ } break;
|
|
|
|
+ default: {
|
|
|
|
+ r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
|
|
|
|
+ return Variant();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static inline double roundf(double x) {
|
|
return Math::round(x);
|
|
return Math::round(x);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ static inline int roundi(double x) {
|
|
|
|
+ return int(Math::round(x));
|
|
|
|
+ }
|
|
|
|
+
|
|
static inline Variant abs(const Variant &x, Callable::CallError &r_error) {
|
|
static inline Variant abs(const Variant &x, Callable::CallError &r_error) {
|
|
r_error.error = Callable::CallError::CALL_OK;
|
|
r_error.error = Callable::CallError::CALL_OK;
|
|
switch (x.get_type()) {
|
|
switch (x.get_type()) {
|
|
@@ -1289,12 +1376,20 @@ void Variant::_register_variant_utility_functions() {
|
|
FUNCBINDR(fmod, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(fmod, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(fposmod, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(fposmod, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(posmod, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(posmod, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
- FUNCBINDR(floor, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
- FUNCBINDR(ceil, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
- FUNCBINDR(round, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
|
|
|
|
- FUNCBINDVR(abs, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
|
|
+ FUNCBINDVR(floor, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
+ FUNCBINDR(floorf, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
+ FUNCBINDR(floori, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
+
|
|
|
|
+ FUNCBINDVR(ceil, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
+ FUNCBINDR(ceilf, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
+ FUNCBINDR(ceili, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
|
|
|
|
+ FUNCBINDVR(round, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
+ FUNCBINDR(roundf, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
+ FUNCBINDR(roundi, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
+
|
|
|
|
+ FUNCBINDVR(abs, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(absf, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(absf, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(absi, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(absi, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
|
|
@@ -1337,12 +1432,10 @@ void Variant::_register_variant_utility_functions() {
|
|
FUNCBINDR(wrapf, sarray("value", "min", "max"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(wrapf, sarray("value", "min", "max"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
|
|
FUNCBINDVARARG(max, sarray(), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDVARARG(max, sarray(), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
-
|
|
|
|
FUNCBINDR(maxi, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(maxi, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(maxf, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(maxf, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
|
|
FUNCBINDVARARG(min, sarray(), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDVARARG(min, sarray(), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
-
|
|
|
|
FUNCBINDR(mini, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(mini, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(minf, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
FUNCBINDR(minf, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
|
|
|
|
|