mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
Additional Fix for sqr, max, and min Functions Focusing on Improved Performance and Documentation Support (#529)
Co-authored-by: js <js@archlinux.local>
This commit is contained in:
parent
59aada62d7
commit
a47bc97011
8 changed files with 391 additions and 338 deletions
|
|
@ -5070,34 +5070,6 @@ function get_pos_from_transform_mtx(dest, objMtx, camMtx)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param a integer
|
||||
--- @param b integer
|
||||
--- @return integer
|
||||
function max(a, b)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param a number
|
||||
--- @param b number
|
||||
--- @return number
|
||||
function maxf(a, b)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param a integer
|
||||
--- @param b integer
|
||||
--- @return integer
|
||||
function min(a, b)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param a number
|
||||
--- @param b number
|
||||
--- @return number
|
||||
function minf(a, b)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param dest Mat4
|
||||
--- @param upDir Vec3f
|
||||
--- @param pos Vec3f
|
||||
|
|
@ -5228,18 +5200,6 @@ function spline_get_weights(m, result, t, c)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param x integer
|
||||
--- @return integer
|
||||
function sqr(x)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param x number
|
||||
--- @return number
|
||||
function sqrf(x)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param dest Vec3f
|
||||
--- @param a Vec3f
|
||||
--- @return void*
|
||||
|
|
@ -8245,6 +8205,34 @@ function hypotf(a, b)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param a integer
|
||||
--- @param b integer
|
||||
--- @return integer
|
||||
function max(a, b)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param a number
|
||||
--- @param b number
|
||||
--- @return number
|
||||
function maxf(a, b)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param a integer
|
||||
--- @param b integer
|
||||
--- @return integer
|
||||
function min(a, b)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param a number
|
||||
--- @param b number
|
||||
--- @return number
|
||||
function minf(a, b)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param radiansAngle number
|
||||
--- @return integer
|
||||
function radians_to_sm64(radiansAngle)
|
||||
|
|
@ -8263,6 +8251,18 @@ function sm64_to_radians(sm64Angle)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param x integer
|
||||
--- @return integer
|
||||
function sqr(x)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param x number
|
||||
--- @return number
|
||||
function sqrf(x)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param actFlags integer
|
||||
--- @return integer
|
||||
function allocate_mario_action(actFlags)
|
||||
|
|
@ -9209,6 +9209,12 @@ function obj_get_surface_from_index(o, index)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param surfaceType integer
|
||||
--- @return boolean
|
||||
function surface_has_force(surfaceType)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @class Pointer_integer
|
||||
--- @class Pointer_BehaviorScript
|
||||
--- @class Pointer_number
|
||||
|
|
|
|||
|
|
@ -185,90 +185,6 @@
|
|||
|
||||
<br />
|
||||
|
||||
## [max](#max)
|
||||
|
||||
### Lua Example
|
||||
`local integerValue = max(a, b)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| a | `integer` |
|
||||
| b | `integer` |
|
||||
|
||||
### Returns
|
||||
- `integer`
|
||||
|
||||
### C Prototype
|
||||
`s16 max(s16 a, s16 b);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [maxf](#maxf)
|
||||
|
||||
### Lua Example
|
||||
`local numberValue = maxf(a, b)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| a | `number` |
|
||||
| b | `number` |
|
||||
|
||||
### Returns
|
||||
- `number`
|
||||
|
||||
### C Prototype
|
||||
`f32 maxf(f32 a, f32 b);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [min](#min)
|
||||
|
||||
### Lua Example
|
||||
`local integerValue = min(a, b)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| a | `integer` |
|
||||
| b | `integer` |
|
||||
|
||||
### Returns
|
||||
- `integer`
|
||||
|
||||
### C Prototype
|
||||
`s16 min(s16 a, s16 b);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [minf](#minf)
|
||||
|
||||
### Lua Example
|
||||
`local numberValue = minf(a, b)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| a | `number` |
|
||||
| b | `number` |
|
||||
|
||||
### Returns
|
||||
- `number`
|
||||
|
||||
### C Prototype
|
||||
`f32 minf(f32 a, f32 b);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [mtxf_align_terrain_normal](#mtxf_align_terrain_normal)
|
||||
|
||||
### Lua Example
|
||||
|
|
@ -682,46 +598,6 @@
|
|||
|
||||
<br />
|
||||
|
||||
## [sqr](#sqr)
|
||||
|
||||
### Lua Example
|
||||
`local integerValue = sqr(x)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| x | `integer` |
|
||||
|
||||
### Returns
|
||||
- `integer`
|
||||
|
||||
### C Prototype
|
||||
`s16 sqr(s16 x);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [sqrf](#sqrf)
|
||||
|
||||
### Lua Example
|
||||
`local numberValue = sqrf(x)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| x | `number` |
|
||||
|
||||
### Returns
|
||||
- `number`
|
||||
|
||||
### C Prototype
|
||||
`f32 sqrf(f32 x);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [vec3f_add](#vec3f_add)
|
||||
|
||||
### Lua Example
|
||||
|
|
|
|||
|
|
@ -1901,6 +1901,90 @@
|
|||
|
||||
<br />
|
||||
|
||||
## [max](#max)
|
||||
|
||||
### Lua Example
|
||||
`local integerValue = max(a, b)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| a | `integer` |
|
||||
| b | `integer` |
|
||||
|
||||
### Returns
|
||||
- `integer`
|
||||
|
||||
### C Prototype
|
||||
`s32 max(s32 a, s32 b);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [maxf](#maxf)
|
||||
|
||||
### Lua Example
|
||||
`local numberValue = maxf(a, b)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| a | `number` |
|
||||
| b | `number` |
|
||||
|
||||
### Returns
|
||||
- `number`
|
||||
|
||||
### C Prototype
|
||||
`f32 maxf(f32 a, f32 b);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [min](#min)
|
||||
|
||||
### Lua Example
|
||||
`local integerValue = min(a, b)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| a | `integer` |
|
||||
| b | `integer` |
|
||||
|
||||
### Returns
|
||||
- `integer`
|
||||
|
||||
### C Prototype
|
||||
`s32 min(s32 a, s32 b);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [minf](#minf)
|
||||
|
||||
### Lua Example
|
||||
`local numberValue = minf(a, b)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| a | `number` |
|
||||
| b | `number` |
|
||||
|
||||
### Returns
|
||||
- `number`
|
||||
|
||||
### C Prototype
|
||||
`f32 minf(f32 a, f32 b);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [radians_to_sm64](#radians_to_sm64)
|
||||
|
||||
### Lua Example
|
||||
|
|
@ -1961,6 +2045,46 @@
|
|||
|
||||
<br />
|
||||
|
||||
## [sqr](#sqr)
|
||||
|
||||
### Lua Example
|
||||
`local integerValue = sqr(x)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| x | `integer` |
|
||||
|
||||
### Returns
|
||||
- `integer`
|
||||
|
||||
### C Prototype
|
||||
`s32 sqr(s32 x);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [sqrf](#sqrf)
|
||||
|
||||
### Lua Example
|
||||
`local numberValue = sqrf(x)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| x | `number` |
|
||||
|
||||
### Returns
|
||||
- `number`
|
||||
|
||||
### C Prototype
|
||||
`f32 sqrf(f32 x);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
---
|
||||
# functions from smlua_misc_utils.h
|
||||
|
||||
|
|
|
|||
|
|
@ -1145,10 +1145,6 @@
|
|||
- [coss](functions-4.md#coss)
|
||||
- [find_vector_perpendicular_to_plane](functions-4.md#find_vector_perpendicular_to_plane)
|
||||
- [get_pos_from_transform_mtx](functions-4.md#get_pos_from_transform_mtx)
|
||||
- [max](functions-4.md#max)
|
||||
- [maxf](functions-4.md#maxf)
|
||||
- [min](functions-4.md#min)
|
||||
- [minf](functions-4.md#minf)
|
||||
- [mtxf_align_terrain_normal](functions-4.md#mtxf_align_terrain_normal)
|
||||
- [mtxf_align_terrain_triangle](functions-4.md#mtxf_align_terrain_triangle)
|
||||
- [mtxf_billboard](functions-4.md#mtxf_billboard)
|
||||
|
|
@ -1168,8 +1164,6 @@
|
|||
- [not_zero](functions-4.md#not_zero)
|
||||
- [sins](functions-4.md#sins)
|
||||
- [spline_get_weights](functions-4.md#spline_get_weights)
|
||||
- [sqr](functions-4.md#sqr)
|
||||
- [sqrf](functions-4.md#sqrf)
|
||||
- [vec3f_add](functions-4.md#vec3f_add)
|
||||
- [vec3f_combine](functions-4.md#vec3f_combine)
|
||||
- [vec3f_copy](functions-4.md#vec3f_copy)
|
||||
|
|
@ -1730,9 +1724,15 @@
|
|||
- [clampf](functions-5.md#clampf)
|
||||
- [degrees_to_sm64](functions-5.md#degrees_to_sm64)
|
||||
- [hypotf](functions-5.md#hypotf)
|
||||
- [max](functions-5.md#max)
|
||||
- [maxf](functions-5.md#maxf)
|
||||
- [min](functions-5.md#min)
|
||||
- [minf](functions-5.md#minf)
|
||||
- [radians_to_sm64](functions-5.md#radians_to_sm64)
|
||||
- [sm64_to_degrees](functions-5.md#sm64_to_degrees)
|
||||
- [sm64_to_radians](functions-5.md#sm64_to_radians)
|
||||
- [sqr](functions-5.md#sqr)
|
||||
- [sqrf](functions-5.md#sqrf)
|
||||
|
||||
<br />
|
||||
|
||||
|
|
|
|||
|
|
@ -35,59 +35,35 @@ extern f32 gCosineTable[];
|
|||
// Inline Function prototypes
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
|
||||
// Use built-in functions when using Clang or GCC
|
||||
static inline f32 minf(f32 a, f32 b) { return __builtin_fminf(a, b); }
|
||||
static inline f32 maxf(f32 a, f32 b) { return __builtin_fmaxf(a, b); }
|
||||
#else
|
||||
// These macros allow for type safe comparisons that expand without recursion in complex calls, also will use the faster fminf for f32 values
|
||||
#define min(a, b) ({ \
|
||||
__typeof__(a) _a = (a); \
|
||||
__typeof__(b) _b = (b); \
|
||||
_Generic((_a), \
|
||||
f32: _Generic((_b), \
|
||||
f32: __builtin_fminf(_a, _b), \
|
||||
default: (_a) < (_b) ? (_a) : (_b) \
|
||||
), \
|
||||
default: (_a) < (_b) ? (_a) : (_b) \
|
||||
); \
|
||||
})
|
||||
|
||||
// Fallback to the original implementation for iDO
|
||||
static inline f32 minf(f32 a, f32 b) { return (a <= b) ? a : b; }
|
||||
static inline f32 maxf(f32 a, f32 b) { return (a > b) ? a : b; }
|
||||
#endif
|
||||
#define max(a, b) ({ \
|
||||
__typeof__(a) _a = (a); \
|
||||
__typeof__(b) _b = (b); \
|
||||
_Generic((_a), \
|
||||
f32: _Generic((_b), \
|
||||
f32: __builtin_fmaxf(a, b), \
|
||||
default: (_a) > (_b) ? (_a) : (_b) \
|
||||
), \
|
||||
default: (_a) > (_b) ? (_a) : (_b) \
|
||||
); \
|
||||
})
|
||||
|
||||
static inline f32 sqrf(f32 x) { return x * x; }
|
||||
|
||||
f32 sins(s16 sm64Angle);
|
||||
f32 coss(s16 sm64Angle);
|
||||
|
||||
#define DEFINE_FOR_TYPE(t) \
|
||||
static inline t min_##t(t a, t b) { return (a < b) ? a : b; } \
|
||||
static inline t max_##t(t a, t b) { return (a > b) ? a : b; } \
|
||||
static inline t sqr_##t(t x) { return x * x; }
|
||||
DEFINE_FOR_TYPE(s16);
|
||||
DEFINE_FOR_TYPE(s32);
|
||||
DEFINE_FOR_TYPE(u8);
|
||||
DEFINE_FOR_TYPE(size_t);
|
||||
|
||||
// These macros intentionally don't have a default.
|
||||
// If you get an error saying that a type is not compatible,
|
||||
// it must be added within this file.
|
||||
|
||||
#define min(a, b) _Generic((a), \
|
||||
f32: minf, \
|
||||
s16: min_s16, \
|
||||
s32: min_s32, \
|
||||
u8: min_u8, \
|
||||
size_t: min_size_t \
|
||||
)(a, b)
|
||||
|
||||
#define max(a, b) _Generic((a), \
|
||||
f32: maxf, \
|
||||
s16: max_s16, \
|
||||
s32: max_s32, \
|
||||
u8: max_u8, \
|
||||
size_t: max_size_t \
|
||||
)(a, b)
|
||||
|
||||
#define sqr(x) _Generic((x), \
|
||||
f32: sqrf, \
|
||||
s16: sqr_s16, \
|
||||
s32: sqr_s32, \
|
||||
u8: sqr_u8, \
|
||||
size_t: sqr_size_t \
|
||||
)(x)
|
||||
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#define sqr(x) ({ \
|
||||
__typeof__(x) _x = (x); \
|
||||
_x * _x; \
|
||||
})
|
||||
|
||||
#define absx(x) _Generic((x), \
|
||||
f32: __builtin_fabsf, \
|
||||
|
|
@ -97,10 +73,17 @@ DEFINE_FOR_TYPE(size_t);
|
|||
|
||||
#else
|
||||
|
||||
// Fallback to the original implementation for iDO
|
||||
#define min(a,b) (a < b ? a : b)
|
||||
#define max(a,b) (a > b ? a : b)
|
||||
#define absx(x) ((x) < 0 ? -(x) : (x))
|
||||
|
||||
#endif
|
||||
|
||||
static inline f32 sqrf(f32 x) { return x * x; }
|
||||
f32 sins(s16 sm64Angle);
|
||||
f32 coss(s16 sm64Angle);
|
||||
|
||||
#include "../../include/libc/stdlib.h"
|
||||
|
||||
void *vec3f_copy(Vec3f dest, Vec3f src);
|
||||
|
|
|
|||
|
|
@ -18604,82 +18604,6 @@ int smlua_func_get_pos_from_transform_mtx(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_max(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "max", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s16 a = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "max"); return 0; }
|
||||
s16 b = smlua_to_integer(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "max"); return 0; }
|
||||
|
||||
lua_pushinteger(L, max(a, b));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_maxf(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "maxf", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 a = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "maxf"); return 0; }
|
||||
f32 b = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "maxf"); return 0; }
|
||||
|
||||
lua_pushnumber(L, maxf(a, b));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_min(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "min", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s16 a = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "min"); return 0; }
|
||||
s16 b = smlua_to_integer(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "min"); return 0; }
|
||||
|
||||
lua_pushinteger(L, min(a, b));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_minf(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "minf", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 a = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "minf"); return 0; }
|
||||
f32 b = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "minf"); return 0; }
|
||||
|
||||
lua_pushnumber(L, minf(a, b));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_mtxf_align_terrain_normal(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
|
@ -19939,40 +19863,6 @@ int smlua_func_spline_get_weights(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_sqr(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 1) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "sqr", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s16 x = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "sqr"); return 0; }
|
||||
|
||||
lua_pushinteger(L, sqr(x));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_sqrf(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 1) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "sqrf", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 x = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "sqrf"); return 0; }
|
||||
|
||||
lua_pushnumber(L, sqrf(x));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_vec3f_add(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
|
@ -30342,6 +30232,82 @@ int smlua_func_hypotf(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_max(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "max", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 a = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "max"); return 0; }
|
||||
s32 b = smlua_to_integer(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "max"); return 0; }
|
||||
|
||||
lua_pushinteger(L, max(a, b));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_maxf(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "maxf", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 a = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "maxf"); return 0; }
|
||||
f32 b = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "maxf"); return 0; }
|
||||
|
||||
lua_pushnumber(L, maxf(a, b));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_min(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "min", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 a = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "min"); return 0; }
|
||||
s32 b = smlua_to_integer(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "min"); return 0; }
|
||||
|
||||
lua_pushinteger(L, min(a, b));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_minf(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "minf", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 a = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "minf"); return 0; }
|
||||
f32 b = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "minf"); return 0; }
|
||||
|
||||
lua_pushnumber(L, minf(a, b));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_radians_to_sm64(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
|
@ -30393,6 +30359,40 @@ int smlua_func_sm64_to_radians(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_sqr(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 1) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "sqr", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 x = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "sqr"); return 0; }
|
||||
|
||||
lua_pushinteger(L, sqr(x));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_sqrf(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 1) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "sqrf", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 x = smlua_to_number(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "sqrf"); return 0; }
|
||||
|
||||
lua_pushnumber(L, sqrf(x));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
// smlua_misc_utils.h //
|
||||
////////////////////////
|
||||
|
|
@ -33374,6 +33374,23 @@ int smlua_func_obj_get_surface_from_index(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_surface_has_force(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 1) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "surface_has_force", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s16 surfaceType = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "surface_has_force"); return 0; }
|
||||
|
||||
lua_pushboolean(L, surface_has_force(surfaceType));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void smlua_bind_functions_autogen(void) {
|
||||
|
|
@ -34456,10 +34473,6 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "coss", smlua_func_coss);
|
||||
smlua_bind_function(L, "find_vector_perpendicular_to_plane", smlua_func_find_vector_perpendicular_to_plane);
|
||||
smlua_bind_function(L, "get_pos_from_transform_mtx", smlua_func_get_pos_from_transform_mtx);
|
||||
smlua_bind_function(L, "max", smlua_func_max);
|
||||
smlua_bind_function(L, "maxf", smlua_func_maxf);
|
||||
smlua_bind_function(L, "min", smlua_func_min);
|
||||
smlua_bind_function(L, "minf", smlua_func_minf);
|
||||
smlua_bind_function(L, "mtxf_align_terrain_normal", smlua_func_mtxf_align_terrain_normal);
|
||||
smlua_bind_function(L, "mtxf_align_terrain_triangle", smlua_func_mtxf_align_terrain_triangle);
|
||||
smlua_bind_function(L, "mtxf_billboard", smlua_func_mtxf_billboard);
|
||||
|
|
@ -34479,8 +34492,6 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "not_zero", smlua_func_not_zero);
|
||||
smlua_bind_function(L, "sins", smlua_func_sins);
|
||||
smlua_bind_function(L, "spline_get_weights", smlua_func_spline_get_weights);
|
||||
smlua_bind_function(L, "sqr", smlua_func_sqr);
|
||||
smlua_bind_function(L, "sqrf", smlua_func_sqrf);
|
||||
smlua_bind_function(L, "vec3f_add", smlua_func_vec3f_add);
|
||||
smlua_bind_function(L, "vec3f_combine", smlua_func_vec3f_combine);
|
||||
smlua_bind_function(L, "vec3f_copy", smlua_func_vec3f_copy);
|
||||
|
|
@ -35022,9 +35033,15 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "clampf", smlua_func_clampf);
|
||||
smlua_bind_function(L, "degrees_to_sm64", smlua_func_degrees_to_sm64);
|
||||
smlua_bind_function(L, "hypotf", smlua_func_hypotf);
|
||||
smlua_bind_function(L, "max", smlua_func_max);
|
||||
smlua_bind_function(L, "maxf", smlua_func_maxf);
|
||||
smlua_bind_function(L, "min", smlua_func_min);
|
||||
smlua_bind_function(L, "minf", smlua_func_minf);
|
||||
smlua_bind_function(L, "radians_to_sm64", smlua_func_radians_to_sm64);
|
||||
smlua_bind_function(L, "sm64_to_degrees", smlua_func_sm64_to_degrees);
|
||||
smlua_bind_function(L, "sm64_to_radians", smlua_func_sm64_to_radians);
|
||||
smlua_bind_function(L, "sqr", smlua_func_sqr);
|
||||
smlua_bind_function(L, "sqrf", smlua_func_sqrf);
|
||||
|
||||
// smlua_misc_utils.h
|
||||
smlua_bind_function(L, "allocate_mario_action", smlua_func_allocate_mario_action);
|
||||
|
|
@ -35203,5 +35220,6 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "load_area_terrain", smlua_func_load_area_terrain);
|
||||
smlua_bind_function(L, "load_object_collision_model", smlua_func_load_object_collision_model);
|
||||
smlua_bind_function(L, "obj_get_surface_from_index", smlua_func_obj_get_surface_from_index);
|
||||
smlua_bind_function(L, "surface_has_force", smlua_func_surface_has_force);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,31 @@ s16 degrees_to_sm64(f32 degreesAngle) {
|
|||
}
|
||||
|
||||
f32 hypotf(f32 a, f32 b) {
|
||||
return sqrtf(a * a + b * b);
|
||||
return __builtin_sqrtf(a * a + b * b);
|
||||
}
|
||||
|
||||
f32 minf(f32 a, f32 b) {
|
||||
return __builtin_fminf(a, b);
|
||||
}
|
||||
|
||||
f32 maxf(f32 a, f32 b) {
|
||||
return __builtin_fmaxf(a, b);
|
||||
}
|
||||
|
||||
s32 min(s32 a, s32 b){
|
||||
return ((a) <= (b) ? (a) : (b));
|
||||
}
|
||||
|
||||
s32 max(s32 a, s32 b){
|
||||
return ((a) >= (b) ? (a) : (b));
|
||||
}
|
||||
|
||||
s32 sqr(s32 x) {
|
||||
return x * x;
|
||||
}
|
||||
|
||||
f32 sqrf(f32 x) {
|
||||
return x * x;
|
||||
}
|
||||
|
||||
s32 clamp(s32 a, s32 b, s32 c) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,26 @@
|
|||
#ifndef SMLUA_MATH_UTILS_H
|
||||
#define SMLUA_MATH_UTILS_H
|
||||
|
||||
#if defined(min)
|
||||
#undef min
|
||||
#endif
|
||||
|
||||
#if defined(max)
|
||||
#undef max
|
||||
#endif
|
||||
|
||||
#if defined(sqr)
|
||||
#undef sqr
|
||||
#endif
|
||||
|
||||
// these are also defined in math_util.h as macros
|
||||
s32 min(s32 a, s32 b);
|
||||
s32 max(s32 a, s32 b);
|
||||
s32 sqr(s32 x);
|
||||
|
||||
f32 minf(f32 a, f32 b);
|
||||
f32 maxf(f32 a, f32 b);
|
||||
f32 sqrf(f32 x);
|
||||
f32 sm64_to_radians(s16 sm64Angle);
|
||||
s16 radians_to_sm64(f32 radiansAngle);
|
||||
f32 sm64_to_degrees(s16 sm64Angle);
|
||||
|
|
@ -9,5 +29,7 @@ f32 hypotf(f32 a, f32 b);
|
|||
s32 clamp(s32 a, s32 b, s32 c);
|
||||
f32 clampf(f32 a, f32 b, f32 c);
|
||||
|
||||
|
||||
|
||||
#endif // SMLUA_MATH_UTILS_H
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue