diff options
author | Saracen <SaracenOne@gmail.com> | 2017-02-06 22:44:22 +0000 |
---|---|---|
committer | Saracen <SaracenOne@gmail.com> | 2017-02-28 21:52:33 +0000 |
commit | 5e938f000136c076f9f35b8332dc7c022687a983 (patch) | |
tree | a8e79b3f4a557ce4097791f5622728c69d22764f | |
parent | 0f8c6dd3822c38b8145f08265abb9eba479f4d15 (diff) |
Inf and NaN support added to GDScript.
-rw-r--r-- | core/math/math_funcs.h | 1 | ||||
-rw-r--r-- | modules/gdscript/gd_editor.cpp | 10 | ||||
-rw-r--r-- | modules/gdscript/gd_parser.cpp | 16 | ||||
-rw-r--r-- | modules/gdscript/gd_script.cpp | 4 | ||||
-rw-r--r-- | modules/gdscript/gd_tokenizer.cpp | 4 | ||||
-rw-r--r-- | modules/gdscript/gd_tokenizer.h | 2 | ||||
-rw-r--r-- | modules/visual_script/visual_script_expression.cpp | 6 | ||||
-rw-r--r-- | modules/visual_script/visual_script_nodes.cpp | 6 | ||||
-rw-r--r-- | modules/visual_script/visual_script_nodes.h | 4 | ||||
-rw-r--r-- | scene/animation/animation_tree_player.cpp | 2 | ||||
-rw-r--r-- | servers/physics/shape_sw.h | 2 |
11 files changed, 53 insertions, 4 deletions
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 51877891e3..da7d534a4e 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 352016b2d2..9dd41847d7 100644 --- a/modules/gdscript/gd_editor.cpp +++ b/modules/gdscript/gd_editor.cpp @@ -323,6 +323,16 @@ void GDScriptLanguage::get_public_constants(List<Pair<String,Variant> > *p_const pi.first="PI"; pi.second=Math_PI; p_constants->push_back(pi); + + Pair<String, Variant> infinity; + infinity.first = "INF"; + infinity.second = Math_INF; + p_constants->push_back(infinity); + + Pair<String, Variant> 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 350f596f71..5147ccd63f 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<ConstantNode>(); + 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<ConstantNode>(); + 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 d4646aa36d..4e72bc39a4 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<String> *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 477a1f1ac8..54b9624e8e 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 5d955ff1ae..1e9eda7947 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 cc3b5f2174..f14aee5d71 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 d1ee5be378..f01284feba 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 7a06fbf5e8..25d07ccb86 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 ed4ec23d54..d7e98ddd2b 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 c8194ad755..55daa5856d 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; |