Add support for the TAU constant. Fixes #12094.
This commit is contained in:
parent
c1855dcff1
commit
91ca725f9b
11 changed files with 34 additions and 9 deletions
|
@ -39,6 +39,7 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#define Math_PI 3.14159265358979323846
|
#define Math_PI 3.14159265358979323846
|
||||||
|
#define Math_TAU 6.28318530717958647692
|
||||||
#define Math_SQRT12 0.7071067811865475244008443621048490
|
#define Math_SQRT12 0.7071067811865475244008443621048490
|
||||||
#define Math_LN2 0.693147180559945309417
|
#define Math_LN2 0.693147180559945309417
|
||||||
#define Math_INF INFINITY
|
#define Math_INF INFINITY
|
||||||
|
|
|
@ -1117,7 +1117,10 @@
|
||||||
</methods>
|
</methods>
|
||||||
<constants>
|
<constants>
|
||||||
<constant name="PI" value="3.141593" enum="">
|
<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>
|
||||||
<constant name="INF" value="inf" enum="">
|
<constant name="INF" value="inf" enum="">
|
||||||
A positive infinity. (For negative infinity, use -INF).
|
A positive infinity. (For negative infinity, use -INF).
|
||||||
|
|
|
@ -42,12 +42,12 @@
|
||||||
<constant name="MATH_CONSTANT_PI" value="1">
|
<constant name="MATH_CONSTANT_PI" value="1">
|
||||||
Pi: [code]3.141593[/code]
|
Pi: [code]3.141593[/code]
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="MATH_CONSTANT_2PI" value="2">
|
<constant name="MATH_CONSTANT_HALF_PI" value="2">
|
||||||
Pi times two: [code]6.283185[/code]
|
|
||||||
</constant>
|
|
||||||
<constant name="MATH_CONSTANT_HALF_PI" value="3">
|
|
||||||
Pi divided by two: [code]1.570796[/code]
|
Pi divided by two: [code]1.570796[/code]
|
||||||
</constant>
|
</constant>
|
||||||
|
<constant name="MATH_CONSTANT_TAU" value="3">
|
||||||
|
Tau: [code]6.283185[/code]
|
||||||
|
</constant>
|
||||||
<constant name="MATH_CONSTANT_E" value="4">
|
<constant name="MATH_CONSTANT_E" value="4">
|
||||||
Natural log: [code]2.718282[/code]
|
Natural log: [code]2.718282[/code]
|
||||||
</constant>
|
</constant>
|
||||||
|
|
|
@ -337,6 +337,11 @@ void GDScriptLanguage::get_public_constants(List<Pair<String, Variant> > *p_cons
|
||||||
pi.second = Math_PI;
|
pi.second = Math_PI;
|
||||||
p_constants->push_back(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;
|
Pair<String, Variant> infinity;
|
||||||
infinity.first = "INF";
|
infinity.first = "INF";
|
||||||
infinity.second = Math_INF;
|
infinity.second = Math_INF;
|
||||||
|
|
|
@ -362,6 +362,13 @@ GDParser::Node *GDParser::_parse_expression(Node *p_parent, bool p_static, bool
|
||||||
constant->value = Math_PI;
|
constant->value = Math_PI;
|
||||||
tokenizer->advance();
|
tokenizer->advance();
|
||||||
expr = constant;
|
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) {
|
} else if (tokenizer->get_token() == GDTokenizer::TK_CONST_INF) {
|
||||||
|
|
||||||
//constant defined by tokenizer
|
//constant defined by tokenizer
|
||||||
|
|
|
@ -1324,6 +1324,7 @@ void GDScriptLanguage::init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_add_global(StaticCString::create("PI"), Math_PI);
|
_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("INF"), Math_INF);
|
||||||
_add_global(StaticCString::create("NAN"), Math_NAN);
|
_add_global(StaticCString::create("NAN"), Math_NAN);
|
||||||
|
|
||||||
|
@ -1700,6 +1701,7 @@ void GDScriptLanguage::get_reserved_words(List<String> *p_words) const {
|
||||||
"bool",
|
"bool",
|
||||||
"null",
|
"null",
|
||||||
"PI",
|
"PI",
|
||||||
|
"TAU",
|
||||||
"INF",
|
"INF",
|
||||||
"NAN",
|
"NAN",
|
||||||
"self",
|
"self",
|
||||||
|
|
|
@ -123,6 +123,7 @@ const char *GDTokenizer::token_names[TK_MAX] = {
|
||||||
"'$'",
|
"'$'",
|
||||||
"'\\n'",
|
"'\\n'",
|
||||||
"PI",
|
"PI",
|
||||||
|
"TAU",
|
||||||
"_",
|
"_",
|
||||||
"INF",
|
"INF",
|
||||||
"NAN",
|
"NAN",
|
||||||
|
@ -217,6 +218,7 @@ static const _kws _keyword_list[] = {
|
||||||
{ GDTokenizer::TK_CF_PASS, "pass" },
|
{ GDTokenizer::TK_CF_PASS, "pass" },
|
||||||
{ GDTokenizer::TK_SELF, "self" },
|
{ GDTokenizer::TK_SELF, "self" },
|
||||||
{ GDTokenizer::TK_CONST_PI, "PI" },
|
{ GDTokenizer::TK_CONST_PI, "PI" },
|
||||||
|
{ GDTokenizer::TK_CONST_TAU, "TAU" },
|
||||||
{ GDTokenizer::TK_WILDCARD, "_" },
|
{ GDTokenizer::TK_WILDCARD, "_" },
|
||||||
{ GDTokenizer::TK_CONST_INF, "INF" },
|
{ GDTokenizer::TK_CONST_INF, "INF" },
|
||||||
{ GDTokenizer::TK_CONST_NAN, "NAN" },
|
{ 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_CF_PASS:
|
||||||
case TK_SELF:
|
case TK_SELF:
|
||||||
case TK_CONST_PI:
|
case TK_CONST_PI:
|
||||||
|
case TK_CONST_TAU:
|
||||||
case TK_WILDCARD:
|
case TK_WILDCARD:
|
||||||
case TK_CONST_INF:
|
case TK_CONST_INF:
|
||||||
case TK_CONST_NAN:
|
case TK_CONST_NAN:
|
||||||
|
|
|
@ -128,6 +128,7 @@ public:
|
||||||
TK_DOLLAR,
|
TK_DOLLAR,
|
||||||
TK_NEWLINE,
|
TK_NEWLINE,
|
||||||
TK_CONST_PI,
|
TK_CONST_PI,
|
||||||
|
TK_CONST_TAU,
|
||||||
TK_WILDCARD,
|
TK_WILDCARD,
|
||||||
TK_CONST_INF,
|
TK_CONST_INF,
|
||||||
TK_CONST_NAN,
|
TK_CONST_NAN,
|
||||||
|
|
|
@ -564,6 +564,9 @@ Error VisualScriptExpression::_get_token(Token &r_token) {
|
||||||
} else if (id == "PI") {
|
} else if (id == "PI") {
|
||||||
r_token.type = TK_CONSTANT;
|
r_token.type = TK_CONSTANT;
|
||||||
r_token.value = Math_PI;
|
r_token.value = Math_PI;
|
||||||
|
} else if (id == "TAU") {
|
||||||
|
r_token.type = TK_CONSTANT;
|
||||||
|
r_token.value = Math_TAU;
|
||||||
} else if (id == "INF") {
|
} else if (id == "INF") {
|
||||||
r_token.type = TK_CONSTANT;
|
r_token.type = TK_CONSTANT;
|
||||||
r_token.value = Math_INF;
|
r_token.value = Math_INF;
|
||||||
|
|
|
@ -1776,8 +1776,8 @@ VisualScriptBasicTypeConstant::VisualScriptBasicTypeConstant() {
|
||||||
const char *VisualScriptMathConstant::const_name[MATH_CONSTANT_MAX] = {
|
const char *VisualScriptMathConstant::const_name[MATH_CONSTANT_MAX] = {
|
||||||
"One",
|
"One",
|
||||||
"PI",
|
"PI",
|
||||||
"PIx2",
|
|
||||||
"PI/2",
|
"PI/2",
|
||||||
|
"TAU",
|
||||||
"E",
|
"E",
|
||||||
"Sqrt2",
|
"Sqrt2",
|
||||||
"INF",
|
"INF",
|
||||||
|
@ -1787,8 +1787,8 @@ const char *VisualScriptMathConstant::const_name[MATH_CONSTANT_MAX] = {
|
||||||
double VisualScriptMathConstant::const_value[MATH_CONSTANT_MAX] = {
|
double VisualScriptMathConstant::const_value[MATH_CONSTANT_MAX] = {
|
||||||
1.0,
|
1.0,
|
||||||
Math_PI,
|
Math_PI,
|
||||||
Math_PI * 2,
|
|
||||||
Math_PI * 0.5,
|
Math_PI * 0.5,
|
||||||
|
Math_TAU,
|
||||||
2.71828182845904523536,
|
2.71828182845904523536,
|
||||||
Math::sqrt(2.0),
|
Math::sqrt(2.0),
|
||||||
Math_INF,
|
Math_INF,
|
||||||
|
@ -1886,8 +1886,8 @@ void VisualScriptMathConstant::_bind_methods() {
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(MATH_CONSTANT_ONE);
|
BIND_ENUM_CONSTANT(MATH_CONSTANT_ONE);
|
||||||
BIND_ENUM_CONSTANT(MATH_CONSTANT_PI);
|
BIND_ENUM_CONSTANT(MATH_CONSTANT_PI);
|
||||||
BIND_ENUM_CONSTANT(MATH_CONSTANT_2PI);
|
|
||||||
BIND_ENUM_CONSTANT(MATH_CONSTANT_HALF_PI);
|
BIND_ENUM_CONSTANT(MATH_CONSTANT_HALF_PI);
|
||||||
|
BIND_ENUM_CONSTANT(MATH_CONSTANT_TAU);
|
||||||
BIND_ENUM_CONSTANT(MATH_CONSTANT_E);
|
BIND_ENUM_CONSTANT(MATH_CONSTANT_E);
|
||||||
BIND_ENUM_CONSTANT(MATH_CONSTANT_SQRT2);
|
BIND_ENUM_CONSTANT(MATH_CONSTANT_SQRT2);
|
||||||
BIND_ENUM_CONSTANT(MATH_CONSTANT_INF);
|
BIND_ENUM_CONSTANT(MATH_CONSTANT_INF);
|
||||||
|
|
|
@ -474,8 +474,8 @@ public:
|
||||||
enum MathConstant {
|
enum MathConstant {
|
||||||
MATH_CONSTANT_ONE,
|
MATH_CONSTANT_ONE,
|
||||||
MATH_CONSTANT_PI,
|
MATH_CONSTANT_PI,
|
||||||
MATH_CONSTANT_2PI,
|
|
||||||
MATH_CONSTANT_HALF_PI,
|
MATH_CONSTANT_HALF_PI,
|
||||||
|
MATH_CONSTANT_TAU,
|
||||||
MATH_CONSTANT_E,
|
MATH_CONSTANT_E,
|
||||||
MATH_CONSTANT_SQRT2,
|
MATH_CONSTANT_SQRT2,
|
||||||
MATH_CONSTANT_INF,
|
MATH_CONSTANT_INF,
|
||||||
|
|
Loading…
Reference in a new issue