Explorar o código

Merge pull request #12627 from Goutte/feat-support-tau

Add support for TAU constant.
Rémi Verschelde %!s(int64=7) %!d(string=hai) anos
pai
achega
51ffd45202

+ 1 - 0
core/math/math_funcs.h

@@ -39,6 +39,7 @@
 #include <math.h>
 
 #define Math_PI 3.14159265358979323846
+#define Math_TAU 6.28318530717958647692
 #define Math_SQRT12 0.7071067811865475244008443621048490
 #define Math_LN2 0.693147180559945309417
 #define Math_INF INFINITY

+ 4 - 1
doc/classes/@GDScript.xml

@@ -1117,7 +1117,10 @@
 	</methods>
 	<constants>
 		<constant name="PI" value="3.141593" enum="">
-			Constant that represents how many times the diameter of a circumference fits around its perimeter.
+			Constant that represents how many times the diameter of a circle fits around its perimeter.
+		</constant>
+		<constant name="TAU" value="6.2831853" enum="">
+			The circle constant, the circumference of the unit circle.
 		</constant>
 		<constant name="INF" value="inf" enum="">
 			A positive infinity. (For negative infinity, use -INF).

+ 4 - 4
doc/classes/VisualScriptMathConstant.xml

@@ -42,12 +42,12 @@
 		<constant name="MATH_CONSTANT_PI" value="1">
 			Pi: [code]3.141593[/code]
 		</constant>
-		<constant name="MATH_CONSTANT_2PI" value="2">
-			Pi times two: [code]6.283185[/code]
-		</constant>
-		<constant name="MATH_CONSTANT_HALF_PI" value="3">
+		<constant name="MATH_CONSTANT_HALF_PI" value="2">
 			Pi divided by two: [code]1.570796[/code]
 		</constant>
+		<constant name="MATH_CONSTANT_TAU" value="3">
+			Tau: [code]6.283185[/code]
+		</constant>
 		<constant name="MATH_CONSTANT_E" value="4">
 			Natural log: [code]2.718282[/code]
 		</constant>

+ 5 - 0
modules/gdscript/gd_editor.cpp

@@ -337,6 +337,11 @@ void GDScriptLanguage::get_public_constants(List<Pair<String, Variant> > *p_cons
 	pi.second = Math_PI;
 	p_constants->push_back(pi);
 
+	Pair<String, Variant> tau;
+	tau.first = "TAU";
+	tau.second = Math_TAU;
+	p_constants->push_back(tau);
+
 	Pair<String, Variant> infinity;
 	infinity.first = "INF";
 	infinity.second = Math_INF;

+ 7 - 0
modules/gdscript/gd_parser.cpp

@@ -362,6 +362,13 @@ GDParser::Node *GDParser::_parse_expression(Node *p_parent, bool p_static, bool
 			constant->value = Math_PI;
 			tokenizer->advance();
 			expr = constant;
+		} else if (tokenizer->get_token() == GDTokenizer::TK_CONST_TAU) {
+
+			//constant defined by tokenizer
+			ConstantNode *constant = alloc_node<ConstantNode>();
+			constant->value = Math_TAU;
+			tokenizer->advance();
+			expr = constant;
 		} else if (tokenizer->get_token() == GDTokenizer::TK_CONST_INF) {
 
 			//constant defined by tokenizer

+ 2 - 0
modules/gdscript/gd_script.cpp

@@ -1324,6 +1324,7 @@ void GDScriptLanguage::init() {
 	}
 
 	_add_global(StaticCString::create("PI"), Math_PI);
+	_add_global(StaticCString::create("TAU"), Math_TAU);
 	_add_global(StaticCString::create("INF"), Math_INF);
 	_add_global(StaticCString::create("NAN"), Math_NAN);
 
@@ -1700,6 +1701,7 @@ void GDScriptLanguage::get_reserved_words(List<String> *p_words) const {
 		"bool",
 		"null",
 		"PI",
+		"TAU",
 		"INF",
 		"NAN",
 		"self",

+ 3 - 0
modules/gdscript/gd_tokenizer.cpp

@@ -123,6 +123,7 @@ const char *GDTokenizer::token_names[TK_MAX] = {
 	"'$'",
 	"'\\n'",
 	"PI",
+	"TAU",
 	"_",
 	"INF",
 	"NAN",
@@ -217,6 +218,7 @@ static const _kws _keyword_list[] = {
 	{ GDTokenizer::TK_CF_PASS, "pass" },
 	{ GDTokenizer::TK_SELF, "self" },
 	{ GDTokenizer::TK_CONST_PI, "PI" },
+	{ GDTokenizer::TK_CONST_TAU, "TAU" },
 	{ GDTokenizer::TK_WILDCARD, "_" },
 	{ GDTokenizer::TK_CONST_INF, "INF" },
 	{ GDTokenizer::TK_CONST_NAN, "NAN" },
@@ -280,6 +282,7 @@ bool GDTokenizer::is_token_literal(int p_offset, bool variable_safe) const {
 		case TK_CF_PASS:
 		case TK_SELF:
 		case TK_CONST_PI:
+		case TK_CONST_TAU:
 		case TK_WILDCARD:
 		case TK_CONST_INF:
 		case TK_CONST_NAN:

+ 1 - 0
modules/gdscript/gd_tokenizer.h

@@ -128,6 +128,7 @@ public:
 		TK_DOLLAR,
 		TK_NEWLINE,
 		TK_CONST_PI,
+		TK_CONST_TAU,
 		TK_WILDCARD,
 		TK_CONST_INF,
 		TK_CONST_NAN,

+ 3 - 0
modules/visual_script/visual_script_expression.cpp

@@ -564,6 +564,9 @@ Error VisualScriptExpression::_get_token(Token &r_token) {
 					} else if (id == "PI") {
 						r_token.type = TK_CONSTANT;
 						r_token.value = Math_PI;
+					} else if (id == "TAU") {
+						r_token.type = TK_CONSTANT;
+						r_token.value = Math_TAU;
 					} else if (id == "INF") {
 						r_token.type = TK_CONSTANT;
 						r_token.value = Math_INF;

+ 3 - 3
modules/visual_script/visual_script_nodes.cpp

@@ -1776,8 +1776,8 @@ VisualScriptBasicTypeConstant::VisualScriptBasicTypeConstant() {
 const char *VisualScriptMathConstant::const_name[MATH_CONSTANT_MAX] = {
 	"One",
 	"PI",
-	"PIx2",
 	"PI/2",
+	"TAU",
 	"E",
 	"Sqrt2",
 	"INF",
@@ -1787,8 +1787,8 @@ const char *VisualScriptMathConstant::const_name[MATH_CONSTANT_MAX] = {
 double VisualScriptMathConstant::const_value[MATH_CONSTANT_MAX] = {
 	1.0,
 	Math_PI,
-	Math_PI * 2,
 	Math_PI * 0.5,
+	Math_TAU,
 	2.71828182845904523536,
 	Math::sqrt(2.0),
 	Math_INF,
@@ -1886,8 +1886,8 @@ void VisualScriptMathConstant::_bind_methods() {
 
 	BIND_ENUM_CONSTANT(MATH_CONSTANT_ONE);
 	BIND_ENUM_CONSTANT(MATH_CONSTANT_PI);
-	BIND_ENUM_CONSTANT(MATH_CONSTANT_2PI);
 	BIND_ENUM_CONSTANT(MATH_CONSTANT_HALF_PI);
+	BIND_ENUM_CONSTANT(MATH_CONSTANT_TAU);
 	BIND_ENUM_CONSTANT(MATH_CONSTANT_E);
 	BIND_ENUM_CONSTANT(MATH_CONSTANT_SQRT2);
 	BIND_ENUM_CONSTANT(MATH_CONSTANT_INF);

+ 1 - 1
modules/visual_script/visual_script_nodes.h

@@ -474,8 +474,8 @@ public:
 	enum MathConstant {
 		MATH_CONSTANT_ONE,
 		MATH_CONSTANT_PI,
-		MATH_CONSTANT_2PI,
 		MATH_CONSTANT_HALF_PI,
+		MATH_CONSTANT_TAU,
 		MATH_CONSTANT_E,
 		MATH_CONSTANT_SQRT2,
 		MATH_CONSTANT_INF,