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>
|
||||
|
||||
#define Math_PI 3.14159265358979323846
|
||||
#define Math_TAU 6.28318530717958647692
|
||||
#define Math_SQRT12 0.7071067811865475244008443621048490
|
||||
#define Math_LN2 0.693147180559945309417
|
||||
#define Math_INF INFINITY
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -128,6 +128,7 @@ public:
|
|||
TK_DOLLAR,
|
||||
TK_NEWLINE,
|
||||
TK_CONST_PI,
|
||||
TK_CONST_TAU,
|
||||
TK_WILDCARD,
|
||||
TK_CONST_INF,
|
||||
TK_CONST_NAN,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue