mirror of https://github.com/bjornbytes/lovr.git
Math module random functions;
This commit is contained in:
parent
8b34330079
commit
ef537e99d4
|
@ -1,14 +1,21 @@
|
|||
#include "api/lovr.h"
|
||||
#include "math/math.h"
|
||||
#include "math/mat4.h"
|
||||
#include "math/quat.h"
|
||||
#include "math/randomGenerator.h"
|
||||
#include "math/transform.h"
|
||||
|
||||
extern int l_lovrRandomGeneratorRandom(lua_State* L);
|
||||
extern int l_lovrRandomGeneratorRandomNormal(lua_State* L);
|
||||
extern int l_lovrRandomGeneratorGetSeed(lua_State* L);
|
||||
extern int l_lovrRandomGeneratorSetSeed(lua_State* L);
|
||||
|
||||
int l_lovrMathInit(lua_State* L) {
|
||||
lua_newtable(L);
|
||||
luaL_register(L, NULL, lovrMath);
|
||||
luax_registertype(L, "RandomGenerator", lovrRandomGenerator);
|
||||
luax_registertype(L, "Transform", lovrTransform);
|
||||
lovrMathInit();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -47,10 +54,38 @@ int l_lovrMathLookAt(lua_State* L) {
|
|||
return 4;
|
||||
}
|
||||
|
||||
int l_lovrMathRandom(lua_State* L) {
|
||||
luax_pushtype(L, RandomGenerator, lovrMathGetRandomGenerator());
|
||||
lua_insert(L, 1);
|
||||
return l_lovrRandomGeneratorRandom(L);
|
||||
}
|
||||
|
||||
int l_lovrMathRandomNormal(lua_State* L) {
|
||||
luax_pushtype(L, RandomGenerator, lovrMathGetRandomGenerator());
|
||||
lua_insert(L, 1);
|
||||
return l_lovrRandomGeneratorRandomNormal(L);
|
||||
}
|
||||
|
||||
int l_lovrMathGetRandomSeed(lua_State* L) {
|
||||
luax_pushtype(L, RandomGenerator, lovrMathGetRandomGenerator());
|
||||
lua_insert(L, 1);
|
||||
return l_lovrRandomGeneratorGetSeed(L);
|
||||
}
|
||||
|
||||
int l_lovrMathSetRandomSeed(lua_State* L) {
|
||||
luax_pushtype(L, RandomGenerator, lovrMathGetRandomGenerator());
|
||||
lua_insert(L, 1);
|
||||
return l_lovrRandomGeneratorSetSeed(L);
|
||||
}
|
||||
|
||||
const luaL_Reg lovrMath[] = {
|
||||
{ "newRandomGenerator", l_lovrMathNewRandomGenerator },
|
||||
{ "newTransform", l_lovrMathNewTransform },
|
||||
{ "lookAt", l_lovrMathLookAt },
|
||||
{ "random", l_lovrMathRandom },
|
||||
{ "randomNormal", l_lovrMathRandomNormal },
|
||||
{ "getRandomSeed", l_lovrMathGetRandomSeed },
|
||||
{ "setRandomSeed", l_lovrMathSetRandomSeed },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -60,14 +60,14 @@ int l_lovrRandomGeneratorSetState(lua_State* L) {
|
|||
|
||||
int l_lovrRandomGeneratorRandom(lua_State* L) {
|
||||
RandomGenerator* generator = luax_checktype(L, 1, RandomGenerator);
|
||||
float r = lovrRandomGeneratorRandom(generator);
|
||||
double r = lovrRandomGeneratorRandom(generator);
|
||||
|
||||
if (lua_gettop(L) >= 3) {
|
||||
float lower = luaL_checknumber(L, 2);
|
||||
float upper = luaL_checknumber(L, 3);
|
||||
double lower = luaL_checknumber(L, 2);
|
||||
double upper = luaL_checknumber(L, 3);
|
||||
lua_pushnumber(L, floor(r * (upper - lower + 1)) + lower);
|
||||
} else if (lua_gettop(L) >= 2) {
|
||||
float upper = luaL_checknumber(L, 2);
|
||||
double upper = luaL_checknumber(L, 2);
|
||||
lua_pushnumber(L, floor(r * upper) + 1);
|
||||
} else {
|
||||
lua_pushnumber(L, r);
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
#include "math.h"
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
static RandomGenerator* generator;
|
||||
|
||||
void lovrMathInit() {
|
||||
generator = lovrRandomGeneratorCreate();
|
||||
Seed seed = { .b64 = (uint64_t) time(0) };
|
||||
lovrRandomGeneratorSetSeed(generator, seed);
|
||||
atexit(lovrMathDestroy);
|
||||
}
|
||||
|
||||
void lovrMathDestroy() {
|
||||
lovrRandomGeneratorDestroy(&generator->ref);
|
||||
}
|
||||
|
||||
RandomGenerator* lovrMathGetRandomGenerator() {
|
||||
return generator;
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
#include "lib/vec/vec.h"
|
||||
#include "randomGenerator.h"
|
||||
|
||||
#pragma once
|
||||
|
||||
|
@ -9,3 +10,7 @@ typedef float* vec3;
|
|||
typedef float* quat;
|
||||
typedef float* mat4;
|
||||
typedef vec_t(mat4) vec_mat4_t;
|
||||
|
||||
void lovrMathInit();
|
||||
void lovrMathDestroy();
|
||||
RandomGenerator* lovrMathGetRandomGenerator();
|
||||
|
|
Loading…
Reference in New Issue