This commit is contained in:
2023-12-24 15:14:46 +00:00
parent ccfd233207
commit 2f086947b9
14 changed files with 260 additions and 262 deletions

View File

@@ -4,6 +4,7 @@
#include <string.h>
#include "debugdraw.h"
#include "log.h"
#include "math.h"
#include "stb_ds.h"
@@ -129,7 +130,9 @@ static void velocityFn(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt
}
cpFloat d = isnan(go->damping) ? damping : d;
cpVect g = go->gravity ? gravity : go->cgravity.cp;
cpVect g = gravity;
if (isfinite(go->gravity.x) && isfinite(go->gravity.y))
g = go->gravity.cp;
cpBodyUpdateVelocity(body,g,d,dt*go->timescale);
@@ -154,9 +157,8 @@ gameobject *MakeGameobject() {
.next = -1,
.drawlayer = 0,
.shape_cbs = NULL,
.gravity = 1,
.cgravity = (HMM_Vec2){0,0},
.damping = NAN,
.gravity = (HMM_Vec2){INFINITY,INFINITY},
.damping = INFINITY,
.timescale = 1.0,
.ref = JS_UNDEFINED,
};

View File

@@ -36,8 +36,7 @@ struct gameobject {
float timescale;
float maxvelocity;
float maxangularvelocity;
int gravity;
HMM_Vec2 cgravity;
HMM_Vec2 gravity; /* its own gravity */
float damping;
unsigned int layer;
cpShapeFilter filter;

View File

@@ -1173,10 +1173,9 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
ret = num2js(js2gameobject(argv[1])->damping);
break;
case 158:
js2gameobject(argv[1])->gravity = js2bool(argv[2]);
break;
case 159:
ret = bool2js(js2gameobject(argv[1])->gravity);
ret = vec2js(js2gameobject(argv[1])->gravity);
break;
case 160:
ret = vec2js(mat_t_dir(t_world2go(js2gameobject(argv[1])), js2vec2(argv[2])));
@@ -1205,7 +1204,7 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
ret = int2js(cp(str, str2));
break;
case 167:
js2gameobject(argv[1])->cgravity = js2vec2(argv[2]);
js2gameobject(argv[1])->gravity = js2vec2(argv[2]);
break;
case 168:
js2gameobject(argv[1])->timescale = js2number(argv[2]);

View File

@@ -123,8 +123,8 @@ static void process_frame()
if (stm_sec(stm_diff(frame_t, updatelast)) > updateMS) {
double dt = stm_sec(stm_diff(frame_t, updatelast));
updatelast = frame_t;
// prof_start(&prof_update);
call_updates(dt * timescale);
// prof_lap(&prof_update);