diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 51877891e357..da7d534a4e0b 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -39,6 +39,7 @@ #define Math_PI 3.14159265358979323846 #define Math_SQRT12 0.7071067811865475244008443621048490 #define Math_LN2 0.693147180559945309417 +#define Math_INF INFINITY #define Math_NAN NAN class Math { diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp index 352016b2d2fd..9dd41847d742 100644 --- a/modules/gdscript/gd_editor.cpp +++ b/modules/gdscript/gd_editor.cpp @@ -323,6 +323,16 @@ void GDScriptLanguage::get_public_constants(List > *p_const pi.first="PI"; pi.second=Math_PI; p_constants->push_back(pi); + + Pair infinity; + infinity.first = "INF"; + infinity.second = Math_INF; + p_constants->push_back(infinity); + + Pair nan; + nan.first = "NAN"; + nan.second = Math_NAN; + p_constants->push_back(nan); } String GDScriptLanguage::make_function(const String& p_class,const String& p_name,const PoolStringArray& p_args) const { diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp index 350f596f7182..5147ccd63fa2 100644 --- a/modules/gdscript/gd_parser.cpp +++ b/modules/gdscript/gd_parser.cpp @@ -375,6 +375,22 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_ constant->value=Math_PI; tokenizer->advance(); expr=constant; + } + else if (tokenizer->get_token() == GDTokenizer::TK_CONST_INF) { + + //constant defined by tokenizer + ConstantNode *constant = alloc_node(); + constant->value = Math_INF; + tokenizer->advance(); + expr = constant; + } + else if (tokenizer->get_token() == GDTokenizer::TK_CONST_NAN) { + + //constant defined by tokenizer + ConstantNode *constant = alloc_node(); + constant->value = Math_NAN; + tokenizer->advance(); + expr = constant; } else if (tokenizer->get_token()==GDTokenizer::TK_PR_PRELOAD) { //constant defined by tokenizer diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp index d4646aa36d50..4e72bc39a4da 100644 --- a/modules/gdscript/gd_script.cpp +++ b/modules/gdscript/gd_script.cpp @@ -1517,6 +1517,8 @@ void GDScriptLanguage::init() { } _add_global(StaticCString::create("PI"),Math_PI); + _add_global(StaticCString::create("INF"),Math_INF); + _add_global(StaticCString::create("NAN"),Math_NAN); //populate native classes @@ -1909,6 +1911,8 @@ void GDScriptLanguage::get_reserved_words(List *p_words) const { "bool", "null", "PI", + "INF", + "NAN", "self", "true", // functions diff --git a/modules/gdscript/gd_tokenizer.cpp b/modules/gdscript/gd_tokenizer.cpp index 477a1f1ac817..54b9624e8ea5 100644 --- a/modules/gdscript/gd_tokenizer.cpp +++ b/modules/gdscript/gd_tokenizer.cpp @@ -120,6 +120,8 @@ const char* GDTokenizer::token_names[TK_MAX]={ "'\\n'", "PI", "_", +"INF", +"NAN", "Error", "EOF", "Cursor"}; @@ -901,6 +903,8 @@ void GDTokenizerText::_advance() { {TK_SELF,"self"}, {TK_CONST_PI,"PI"}, {TK_WILDCARD,"_"}, + {TK_CONST_INF,"INF"}, + {TK_CONST_NAN,"NAN"}, {TK_ERROR,NULL} }; diff --git a/modules/gdscript/gd_tokenizer.h b/modules/gdscript/gd_tokenizer.h index 5d955ff1aea7..1e9eda7947aa 100644 --- a/modules/gdscript/gd_tokenizer.h +++ b/modules/gdscript/gd_tokenizer.h @@ -128,6 +128,8 @@ public: TK_NEWLINE, TK_CONST_PI, TK_WILDCARD, + TK_CONST_INF, + TK_CONST_NAN, TK_ERROR, TK_EOF, TK_CURSOR, //used for code completion diff --git a/modules/visual_script/visual_script_expression.cpp b/modules/visual_script/visual_script_expression.cpp index cc3b5f217488..f14aee5d71c8 100644 --- a/modules/visual_script/visual_script_expression.cpp +++ b/modules/visual_script/visual_script_expression.cpp @@ -558,6 +558,12 @@ Error VisualScriptExpression::_get_token(Token& r_token) { } else if (id=="PI") { r_token.type=TK_CONSTANT; r_token.value=Math_PI; + } else if (id == "INF") { + r_token.type = TK_CONSTANT; + r_token.value = Math_INF; + } else if (id == "NAN") { + r_token.type = TK_CONSTANT; + r_token.value = Math_NAN; } else if (id=="not") { r_token.type=TK_OP_NOT; } else if (id=="or") { diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp index d1ee5be37855..f01284feba88 100644 --- a/modules/visual_script/visual_script_nodes.cpp +++ b/modules/visual_script/visual_script_nodes.cpp @@ -1738,6 +1738,8 @@ const char* VisualScriptMathConstant::const_name[MATH_CONSTANT_MAX]={ "PI/2", "E", "Sqrt2", + "INF", + "NAN" }; double VisualScriptMathConstant::const_value[MATH_CONSTANT_MAX]={ @@ -1746,7 +1748,9 @@ double VisualScriptMathConstant::const_value[MATH_CONSTANT_MAX]={ Math_PI*2, Math_PI*0.5, 2.71828182845904523536, - Math::sqrt(2.0) + Math::sqrt(2.0), + Math_INF, + Math_NAN }; diff --git a/modules/visual_script/visual_script_nodes.h b/modules/visual_script/visual_script_nodes.h index 7a06fbf5e868..25d07ccb865c 100644 --- a/modules/visual_script/visual_script_nodes.h +++ b/modules/visual_script/visual_script_nodes.h @@ -467,7 +467,9 @@ public: MATH_CONSTANT_HALF_PI, MATH_CONSTANT_E, MATH_CONSTANT_SQRT2, - MATH_CONSTANT_MAX, + MATH_CONSTANT_INF, + MATH_CONSTANT_NAN, + MATH_CONSTANT_MAX }; private: diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index ed4ec23d54de..d7e98ddd2b7a 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -711,7 +711,7 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode else rem = _process_node(tsn->inputs[0].node,r_prev_anim,p_time*tsn->scale,false,p_fallback_weight,p_weights); if (tsn->scale == 0) - return INFINITY; + return Math_INF; else return rem / tsn->scale; diff --git a/servers/physics/shape_sw.h b/servers/physics/shape_sw.h index c8194ad75524..55daa5856d69 100644 --- a/servers/physics/shape_sw.h +++ b/servers/physics/shape_sw.h @@ -130,7 +130,7 @@ public: Plane get_plane() const; - virtual real_t get_area() const { return INFINITY; } + virtual real_t get_area() const { return Math_INF; } virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_PLANE; } virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; virtual Vector3 get_support(const Vector3& p_normal) const;