From e8bb0854663762064db2ebf2eb54aa6d1daeadd4 Mon Sep 17 00:00:00 2001 From: Relintai Date: Thu, 1 Jun 2023 17:02:16 +0200 Subject: [PATCH] Renamed the Math singleton to PMath, as it causes too many issues when dealing with gdnatove / mono. It will also be eventually moved to a module, as it's only useful in some situations. --- core/bind/core_bind.cpp | 154 +++++++++++++++++------------------ core/bind/core_bind.h | 12 +-- core/register_core_types.cpp | 8 +- 3 files changed, 88 insertions(+), 86 deletions(-) diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index 3f20fc2b3..7d309d3d1 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -1617,98 +1617,98 @@ _OS::_OS() { ///////////////////// MATH -_Math *_Math::singleton = nullptr; +PMath *PMath::singleton = nullptr; -_Math *_Math::get_singleton() { +PMath *PMath::get_singleton() { return singleton; } -_Math::_Math() { +PMath::PMath() { singleton = this; } -void _Math::_bind_methods() { - ClassDB::bind_method(D_METHOD("sin", "x"), &_Math::sin); - ClassDB::bind_method(D_METHOD("cos", "x"), &_Math::cos); - ClassDB::bind_method(D_METHOD("tan", "x"), &_Math::tan); - ClassDB::bind_method(D_METHOD("sinh", "x"), &_Math::sinh); - ClassDB::bind_method(D_METHOD("sinc", "x"), &_Math::sinc); - ClassDB::bind_method(D_METHOD("sincn", "x"), &_Math::sincn); - ClassDB::bind_method(D_METHOD("cosh", "x"), &_Math::cosh); - ClassDB::bind_method(D_METHOD("tanh", "x"), &_Math::tanh); - ClassDB::bind_method(D_METHOD("asin", "x"), &_Math::asin); - ClassDB::bind_method(D_METHOD("acos", "x"), &_Math::acos); - ClassDB::bind_method(D_METHOD("atan", "x"), &_Math::atan); - ClassDB::bind_method(D_METHOD("atan2", "y", "x"), &_Math::atan2); +void PMath::_bind_methods() { + ClassDB::bind_method(D_METHOD("sin", "x"), &PMath::sin); + ClassDB::bind_method(D_METHOD("cos", "x"), &PMath::cos); + ClassDB::bind_method(D_METHOD("tan", "x"), &PMath::tan); + ClassDB::bind_method(D_METHOD("sinh", "x"), &PMath::sinh); + ClassDB::bind_method(D_METHOD("sinc", "x"), &PMath::sinc); + ClassDB::bind_method(D_METHOD("sincn", "x"), &PMath::sincn); + ClassDB::bind_method(D_METHOD("cosh", "x"), &PMath::cosh); + ClassDB::bind_method(D_METHOD("tanh", "x"), &PMath::tanh); + ClassDB::bind_method(D_METHOD("asin", "x"), &PMath::asin); + ClassDB::bind_method(D_METHOD("acos", "x"), &PMath::acos); + ClassDB::bind_method(D_METHOD("atan", "x"), &PMath::atan); + ClassDB::bind_method(D_METHOD("atan2", "y", "x"), &PMath::atan2); - ClassDB::bind_method(D_METHOD("sqrt", "x"), &_Math::sqrt); - ClassDB::bind_method(D_METHOD("fmod", "x", "y"), &_Math::fmod); - ClassDB::bind_method(D_METHOD("floor", "x"), &_Math::floor); - ClassDB::bind_method(D_METHOD("floorf_int", "x"), &_Math::floorf_int); - ClassDB::bind_method(D_METHOD("ceil", "x"), &_Math::ceil); - ClassDB::bind_method(D_METHOD("pow", "x", "y"), &_Math::pow); - ClassDB::bind_method(D_METHOD("log", "x"), &_Math::log); - ClassDB::bind_method(D_METHOD("log1p", "x"), &_Math::log1p); - ClassDB::bind_method(D_METHOD("log10", "x"), &_Math::log10); - ClassDB::bind_method(D_METHOD("log2", "x"), &_Math::log2); - ClassDB::bind_method(D_METHOD("exp", "x"), &_Math::exp); - ClassDB::bind_method(D_METHOD("erf", "x"), &_Math::erf); + ClassDB::bind_method(D_METHOD("sqrt", "x"), &PMath::sqrt); + ClassDB::bind_method(D_METHOD("fmod", "x", "y"), &PMath::fmod); + ClassDB::bind_method(D_METHOD("floor", "x"), &PMath::floor); + ClassDB::bind_method(D_METHOD("floorf_int", "x"), &PMath::floorf_int); + ClassDB::bind_method(D_METHOD("ceil", "x"), &PMath::ceil); + ClassDB::bind_method(D_METHOD("pow", "x", "y"), &PMath::pow); + ClassDB::bind_method(D_METHOD("log", "x"), &PMath::log); + ClassDB::bind_method(D_METHOD("log1p", "x"), &PMath::log1p); + ClassDB::bind_method(D_METHOD("log10", "x"), &PMath::log10); + ClassDB::bind_method(D_METHOD("log2", "x"), &PMath::log2); + ClassDB::bind_method(D_METHOD("exp", "x"), &PMath::exp); + ClassDB::bind_method(D_METHOD("erf", "x"), &PMath::erf); - ClassDB::bind_method(D_METHOD("is_nan", "val"), &_Math::is_nan); - ClassDB::bind_method(D_METHOD("is_inf", "val"), &_Math::is_inf); + ClassDB::bind_method(D_METHOD("is_nan", "val"), &PMath::is_nan); + ClassDB::bind_method(D_METHOD("is_inf", "val"), &PMath::is_inf); - ClassDB::bind_method(D_METHOD("abs", "g"), &_Math::abs); - ClassDB::bind_method(D_METHOD("absi", "g"), &_Math::absi); - ClassDB::bind_method(D_METHOD("fposmod", "x", "y"), &_Math::fposmod); - ClassDB::bind_method(D_METHOD("fposmodp", "x", "y"), &_Math::fposmodp); - ClassDB::bind_method(D_METHOD("posmod", "x", "y"), &_Math::posmod); - ClassDB::bind_method(D_METHOD("deg2rad", "y"), &_Math::deg2rad); - ClassDB::bind_method(D_METHOD("rad2deg", "y"), &_Math::rad2deg); + ClassDB::bind_method(D_METHOD("abs", "g"), &PMath::abs); + ClassDB::bind_method(D_METHOD("absi", "g"), &PMath::absi); + ClassDB::bind_method(D_METHOD("fposmod", "x", "y"), &PMath::fposmod); + ClassDB::bind_method(D_METHOD("fposmodp", "x", "y"), &PMath::fposmodp); + ClassDB::bind_method(D_METHOD("posmod", "x", "y"), &PMath::posmod); + ClassDB::bind_method(D_METHOD("deg2rad", "y"), &PMath::deg2rad); + ClassDB::bind_method(D_METHOD("rad2deg", "y"), &PMath::rad2deg); - ClassDB::bind_method(D_METHOD("lerp", "from", "to", "weight"), &_Math::lerp); - ClassDB::bind_method(D_METHOD("lerp_angle", "from", "to", "weight"), &_Math::lerp_angle); - ClassDB::bind_method(D_METHOD("inverse_lerp", "from", "to", "value"), &_Math::inverse_lerp); - ClassDB::bind_method(D_METHOD("range_lerp", "value", "istart", "istop", "ostart", "ostop"), &_Math::range_lerp); - ClassDB::bind_method(D_METHOD("cubic_interpolate", "from", "to", "pre", "post", "weight"), &_Math::cubic_interpolate); - ClassDB::bind_method(D_METHOD("bezier_interpolate", "start", "control_1", "control_2", "end", "t"), &_Math::bezier_interpolate); - ClassDB::bind_method(D_METHOD("smoothstep", "from", "to", "s"), &_Math::smoothstep); - ClassDB::bind_method(D_METHOD("move_toward", "from", "to", "delta"), &_Math::move_toward); + ClassDB::bind_method(D_METHOD("lerp", "from", "to", "weight"), &PMath::lerp); + ClassDB::bind_method(D_METHOD("lerp_angle", "from", "to", "weight"), &PMath::lerp_angle); + ClassDB::bind_method(D_METHOD("inverse_lerp", "from", "to", "value"), &PMath::inverse_lerp); + ClassDB::bind_method(D_METHOD("range_lerp", "value", "istart", "istop", "ostart", "ostop"), &PMath::range_lerp); + ClassDB::bind_method(D_METHOD("cubic_interpolate", "from", "to", "pre", "post", "weight"), &PMath::cubic_interpolate); + ClassDB::bind_method(D_METHOD("bezier_interpolate", "start", "control_1", "control_2", "end", "t"), &PMath::bezier_interpolate); + ClassDB::bind_method(D_METHOD("smoothstep", "from", "to", "s"), &PMath::smoothstep); + ClassDB::bind_method(D_METHOD("move_toward", "from", "to", "delta"), &PMath::move_toward); - ClassDB::bind_method(D_METHOD("linear2db", "linear"), &_Math::linear2db); - ClassDB::bind_method(D_METHOD("db2linear", "db"), &_Math::db2linear); + ClassDB::bind_method(D_METHOD("linear2db", "linear"), &PMath::linear2db); + ClassDB::bind_method(D_METHOD("db2linear", "db"), &PMath::db2linear); - ClassDB::bind_method(D_METHOD("round", "val"), &_Math::round); - ClassDB::bind_method(D_METHOD("wrapi", "value", "min", "max"), &_Math::wrapi); - ClassDB::bind_method(D_METHOD("wrapf", "value", "min", "max"), &_Math::wrapf); - ClassDB::bind_method(D_METHOD("fract", "value"), &_Math::fract); - ClassDB::bind_method(D_METHOD("pingpong", "value", "length"), &_Math::pingpong); - ClassDB::bind_method(D_METHOD("ease", "x", "c"), &_Math::ease); - ClassDB::bind_method(D_METHOD("step_decimals", "step"), &_Math::step_decimals); - ClassDB::bind_method(D_METHOD("range_step_decimals", "step"), &_Math::range_step_decimals); - ClassDB::bind_method(D_METHOD("stepify", "value", "step"), &_Math::stepify); - ClassDB::bind_method(D_METHOD("dectime", "value", "amount", "step"), &_Math::dectime); + ClassDB::bind_method(D_METHOD("round", "val"), &PMath::round); + ClassDB::bind_method(D_METHOD("wrapi", "value", "min", "max"), &PMath::wrapi); + ClassDB::bind_method(D_METHOD("wrapf", "value", "min", "max"), &PMath::wrapf); + ClassDB::bind_method(D_METHOD("fract", "value"), &PMath::fract); + ClassDB::bind_method(D_METHOD("pingpong", "value", "length"), &PMath::pingpong); + ClassDB::bind_method(D_METHOD("ease", "x", "c"), &PMath::ease); + ClassDB::bind_method(D_METHOD("step_decimals", "step"), &PMath::step_decimals); + ClassDB::bind_method(D_METHOD("range_step_decimals", "step"), &PMath::range_step_decimals); + ClassDB::bind_method(D_METHOD("stepify", "value", "step"), &PMath::stepify); + ClassDB::bind_method(D_METHOD("dectime", "value", "amount", "step"), &PMath::dectime); - ClassDB::bind_method(D_METHOD("larger_prime", "val"), &_Math::larger_prime); - ClassDB::bind_method(D_METHOD("seed", "x"), &_Math::seed); - ClassDB::bind_method(D_METHOD("randomize"), &_Math::randomize); - ClassDB::bind_method(D_METHOD("rand"), &_Math::rand); - ClassDB::bind_method(D_METHOD("randd"), &_Math::randd); - ClassDB::bind_method(D_METHOD("randf"), &_Math::randf); - ClassDB::bind_method(D_METHOD("randfn", "mean", "deviation"), &_Math::randfn); - ClassDB::bind_method(D_METHOD("random", "from", "to"), &_Math::random); - ClassDB::bind_method(D_METHOD("randomi", "from", "to"), &_Math::randomi); + ClassDB::bind_method(D_METHOD("larger_prime", "val"), &PMath::larger_prime); + ClassDB::bind_method(D_METHOD("seed", "x"), &PMath::seed); + ClassDB::bind_method(D_METHOD("randomize"), &PMath::randomize); + ClassDB::bind_method(D_METHOD("rand"), &PMath::rand); + ClassDB::bind_method(D_METHOD("randd"), &PMath::randd); + ClassDB::bind_method(D_METHOD("randf"), &PMath::randf); + ClassDB::bind_method(D_METHOD("randfn", "mean", "deviation"), &PMath::randfn); + ClassDB::bind_method(D_METHOD("random", "from", "to"), &PMath::random); + ClassDB::bind_method(D_METHOD("randomi", "from", "to"), &PMath::randomi); - ClassDB::bind_method(D_METHOD("is_equal_approx_ratio", "a", "b", "epsilon", "min_epsilon"), &_Math::is_equal_approx_ratio, CMP_EPSILON, CMP_EPSILON); - ClassDB::bind_method(D_METHOD("is_equal_approx", "a", "b"), &_Math::is_equal_approx); - ClassDB::bind_method(D_METHOD("is_equal_approxt", "a", "b", "tolerance"), &_Math::is_equal_approxt); - ClassDB::bind_method(D_METHOD("is_zero_approx", "s"), &_Math::is_zero_approx); - ClassDB::bind_method(D_METHOD("absd", "g"), &_Math::absd); - ClassDB::bind_method(D_METHOD("fast_ftoi", "a"), &_Math::fast_ftoi); - ClassDB::bind_method(D_METHOD("halfbits_to_floatbits", "h"), &_Math::halfbits_to_floatbits); - ClassDB::bind_method(D_METHOD("half_to_float", "h"), &_Math::half_to_float); - ClassDB::bind_method(D_METHOD("make_half_float", "f"), &_Math::make_half_float); - ClassDB::bind_method(D_METHOD("snap_scalar", "offset", "step", "target"), &_Math::snap_scalar); - ClassDB::bind_method(D_METHOD("snap_scalar_separation", "offset", "step", "target", "separation"), &_Math::snap_scalar_separation); + ClassDB::bind_method(D_METHOD("is_equal_approx_ratio", "a", "b", "epsilon", "min_epsilon"), &PMath::is_equal_approx_ratio, CMP_EPSILON, CMP_EPSILON); + ClassDB::bind_method(D_METHOD("is_equal_approx", "a", "b"), &PMath::is_equal_approx); + ClassDB::bind_method(D_METHOD("is_equal_approxt", "a", "b", "tolerance"), &PMath::is_equal_approxt); + ClassDB::bind_method(D_METHOD("is_zero_approx", "s"), &PMath::is_zero_approx); + ClassDB::bind_method(D_METHOD("absd", "g"), &PMath::absd); + ClassDB::bind_method(D_METHOD("fast_ftoi", "a"), &PMath::fast_ftoi); + ClassDB::bind_method(D_METHOD("halfbits_to_floatbits", "h"), &PMath::halfbits_to_floatbits); + ClassDB::bind_method(D_METHOD("half_to_float", "h"), &PMath::half_to_float); + ClassDB::bind_method(D_METHOD("make_half_float", "f"), &PMath::make_half_float); + ClassDB::bind_method(D_METHOD("snap_scalar", "offset", "step", "target"), &PMath::snap_scalar); + ClassDB::bind_method(D_METHOD("snap_scalar_separation", "offset", "step", "target", "separation"), &PMath::snap_scalar_separation); } ///////////////////// GEOMETRY diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index e3dbdf88f..178190a2e 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -434,8 +434,10 @@ VARIANT_ENUM_CAST(_OS::SystemDir); VARIANT_ENUM_CAST(_OS::ScreenOrientation); VARIANT_ENUM_CAST(_OS::HandleType); -class _Math : public Object { - GDCLASS(_Math, Object); +// TODO Move this to a module + +class PMath : public Object { + GDCLASS(PMath, Object); public: _ALWAYS_INLINE_ real_t sin(real_t p_x) { @@ -725,13 +727,13 @@ public: return Math::snap_scalar_separation(p_offset, p_step, p_target, p_separation); } - static _Math *get_singleton(); + static PMath *get_singleton(); - _Math(); + PMath(); protected: static void _bind_methods(); - static _Math *singleton; + static PMath *singleton; }; class _Geometry : public Object { diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp index 6c618ccea..8514eb815 100644 --- a/core/register_core_types.cpp +++ b/core/register_core_types.cpp @@ -100,7 +100,7 @@ static ThreadPool *thread_pool = NULL; static IP *ip = nullptr; -static _Math *_math = nullptr; +static PMath *_math = nullptr; static _Geometry *_geometry = nullptr; extern Mutex _global_mutex; @@ -230,7 +230,7 @@ void register_core_types() { ip = IP::create(); - _math = memnew(_Math); + _math = memnew(PMath); _geometry = memnew(_Geometry); _resource_loader = memnew(_ResourceLoader); @@ -263,7 +263,7 @@ void register_core_settings() { void register_core_singletons() { ClassDB::register_class(); ClassDB::register_virtual_class(); - ClassDB::register_class<_Math>(); + ClassDB::register_class(); ClassDB::register_class<_Geometry>(); ClassDB::register_class<_ResourceLoader>(); ClassDB::register_class<_ResourceSaver>(); @@ -284,7 +284,7 @@ void register_core_singletons() { Engine::get_singleton()->add_singleton(Engine::Singleton("ProjectSettings", ProjectSettings::get_singleton())); Engine::get_singleton()->add_singleton(Engine::Singleton("IP", IP::get_singleton())); - Engine::get_singleton()->add_singleton(Engine::Singleton("Math", _Math::get_singleton())); + Engine::get_singleton()->add_singleton(Engine::Singleton("PMath", PMath::get_singleton())); Engine::get_singleton()->add_singleton(Engine::Singleton("Geometry", _Geometry::get_singleton())); Engine::get_singleton()->add_singleton(Engine::Singleton("ResourceLoader", _ResourceLoader::get_singleton())); Engine::get_singleton()->add_singleton(Engine::Singleton("ResourceSaver", _ResourceSaver::get_singleton()));