Add integer posmod and rename default arg names
"posmod" is the integer version of "fposmod". We do not need a "mod" because of the % operator. I changed the default arg names from "x" and "y" to "a" and "b" because they are not coordinates. I also changed pow's arg names to "base" and "exp". Also, I reorganized the code in the VS built-in funcs switch statement.
This commit is contained in:
parent
20a3bb9c48
commit
a60f242982
8 changed files with 128 additions and 111 deletions
|
|
@ -345,45 +345,78 @@
|
|||
<method name="fmod">
|
||||
<return type="float">
|
||||
</return>
|
||||
<argument index="0" name="x" type="float">
|
||||
<argument index="0" name="a" type="float">
|
||||
</argument>
|
||||
<argument index="1" name="y" type="float">
|
||||
<argument index="1" name="b" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the floating-point remainder of [code]x/y[/code].
|
||||
Returns the floating-point remainder of [code]a/b[/code], keeping the sign of [code]a[/code].
|
||||
[codeblock]
|
||||
# Remainder is 1.5
|
||||
var remainder = fmod(7, 5.5)
|
||||
[/codeblock]
|
||||
For the integer remainder operation, use the % operator.
|
||||
</description>
|
||||
</method>
|
||||
<method name="fposmod">
|
||||
<return type="float">
|
||||
</return>
|
||||
<argument index="0" name="x" type="float">
|
||||
<argument index="0" name="a" type="float">
|
||||
</argument>
|
||||
<argument index="1" name="y" type="float">
|
||||
<argument index="1" name="b" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the floating-point remainder of [code]x/y[/code] that wraps equally in positive and negative.
|
||||
Returns the floating-point modulus of [code]a/b[/code] that wraps equally in positive and negative.
|
||||
[codeblock]
|
||||
var i = -10
|
||||
while i < 0:
|
||||
prints(i, fposmod(i, 10))
|
||||
var i = -6
|
||||
while i < 5:
|
||||
prints(i, fposmod(i, 3))
|
||||
i += 1
|
||||
[/codeblock]
|
||||
Produces:
|
||||
[codeblock]
|
||||
-10 10
|
||||
-9 1
|
||||
-8 2
|
||||
-7 3
|
||||
-6 4
|
||||
-5 5
|
||||
-4 6
|
||||
-3 7
|
||||
-2 8
|
||||
-1 9
|
||||
-6 0
|
||||
-5 1
|
||||
-4 2
|
||||
-3 0
|
||||
-2 1
|
||||
-1 2
|
||||
0 0
|
||||
1 1
|
||||
2 2
|
||||
3 0
|
||||
4 1
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
<method name="posmod">
|
||||
<return type="int">
|
||||
</return>
|
||||
<argument index="0" name="a" type="int">
|
||||
</argument>
|
||||
<argument index="1" name="b" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the integer modulus of [code]a/b[/code] that wraps equally in positive and negative.
|
||||
[codeblock]
|
||||
var i = -6
|
||||
while i < 5:
|
||||
prints(i, posmod(i, 3))
|
||||
i += 1
|
||||
[/codeblock]
|
||||
Produces:
|
||||
[codeblock]
|
||||
-6 0
|
||||
-5 1
|
||||
-4 2
|
||||
-3 0
|
||||
-2 1
|
||||
-1 2
|
||||
0 0
|
||||
1 1
|
||||
2 2
|
||||
3 0
|
||||
4 1
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ const char *GDScriptFunctions::get_func_name(Function p_func) {
|
|||
"sqrt",
|
||||
"fmod",
|
||||
"fposmod",
|
||||
"posmod",
|
||||
"floor",
|
||||
"ceil",
|
||||
"round",
|
||||
|
|
@ -243,6 +244,12 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_
|
|||
VALIDATE_ARG_NUM(1);
|
||||
r_ret = Math::fposmod((double)*p_args[0], (double)*p_args[1]);
|
||||
} break;
|
||||
case MATH_POSMOD: {
|
||||
VALIDATE_ARG_COUNT(2);
|
||||
VALIDATE_ARG_NUM(0);
|
||||
VALIDATE_ARG_NUM(1);
|
||||
r_ret = Math::posmod((int)*p_args[0], (int)*p_args[1]);
|
||||
} break;
|
||||
case MATH_FLOOR: {
|
||||
VALIDATE_ARG_COUNT(1);
|
||||
VALIDATE_ARG_NUM(0);
|
||||
|
|
@ -1456,6 +1463,7 @@ bool GDScriptFunctions::is_deterministic(Function p_func) {
|
|||
case MATH_SQRT:
|
||||
case MATH_FMOD:
|
||||
case MATH_FPOSMOD:
|
||||
case MATH_POSMOD:
|
||||
case MATH_FLOOR:
|
||||
case MATH_CEIL:
|
||||
case MATH_ROUND:
|
||||
|
|
@ -1568,15 +1576,20 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
return mi;
|
||||
} break;
|
||||
case MATH_FMOD: {
|
||||
MethodInfo mi("fmod", PropertyInfo(Variant::REAL, "x"), PropertyInfo(Variant::REAL, "y"));
|
||||
MethodInfo mi("fmod", PropertyInfo(Variant::REAL, "a"), PropertyInfo(Variant::REAL, "b"));
|
||||
mi.return_val.type = Variant::REAL;
|
||||
return mi;
|
||||
} break;
|
||||
case MATH_FPOSMOD: {
|
||||
MethodInfo mi("fposmod", PropertyInfo(Variant::REAL, "x"), PropertyInfo(Variant::REAL, "y"));
|
||||
MethodInfo mi("fposmod", PropertyInfo(Variant::REAL, "a"), PropertyInfo(Variant::REAL, "b"));
|
||||
mi.return_val.type = Variant::REAL;
|
||||
return mi;
|
||||
} break;
|
||||
case MATH_POSMOD: {
|
||||
MethodInfo mi("posmod", PropertyInfo(Variant::INT, "a"), PropertyInfo(Variant::INT, "b"));
|
||||
mi.return_val.type = Variant::INT;
|
||||
return mi;
|
||||
} break;
|
||||
case MATH_FLOOR: {
|
||||
MethodInfo mi("floor", PropertyInfo(Variant::REAL, "s"));
|
||||
mi.return_val.type = Variant::REAL;
|
||||
|
|
@ -1603,7 +1616,7 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
return mi;
|
||||
} break;
|
||||
case MATH_POW: {
|
||||
MethodInfo mi("pow", PropertyInfo(Variant::REAL, "x"), PropertyInfo(Variant::REAL, "y"));
|
||||
MethodInfo mi("pow", PropertyInfo(Variant::REAL, "base"), PropertyInfo(Variant::REAL, "exp"));
|
||||
mi.return_val.type = Variant::REAL;
|
||||
return mi;
|
||||
} break;
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ public:
|
|||
MATH_SQRT,
|
||||
MATH_FMOD,
|
||||
MATH_FPOSMOD,
|
||||
MATH_POSMOD,
|
||||
MATH_FLOOR,
|
||||
MATH_CEIL,
|
||||
MATH_ROUND,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue