mirror of
https://github.com/godotengine/godot.git
synced 2026-01-03 18:11:19 +03:00
Split ceil(), floor() and round() method
This commit is contained in:
@@ -99,18 +99,105 @@ struct VariantUtilityFunctions {
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
static inline int roundi(double x) {
|
||||
return int(Math::round(x));
|
||||
}
|
||||
|
||||
static inline Variant abs(const Variant &x, Callable::CallError &r_error) {
|
||||
r_error.error = Callable::CallError::CALL_OK;
|
||||
switch (x.get_type()) {
|
||||
@@ -1252,17 +1339,24 @@ void Variant::_register_variant_utility_functions() {
|
||||
FUNCBINDR(fmod, 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(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(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(absi, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
||||
|
||||
FUNCBINDVR(sign, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
||||
|
||||
FUNCBINDR(signf, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
||||
FUNCBINDR(signi, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
|
||||
|
||||
@@ -1300,12 +1394,10 @@ void Variant::_register_variant_utility_functions() {
|
||||
FUNCBINDR(wrapf, sarray("value", "min", "max"), Variant::UTILITY_FUNC_TYPE_MATH);
|
||||
|
||||
FUNCBINDVARARG(max, sarray(), 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);
|
||||
|
||||
FUNCBINDVARARG(min, sarray(), 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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user