aboutsummaryrefslogtreecommitdiff
path: root/src/survive.c
diff options
context:
space:
mode:
authorCNLohr <charles@cnlohr.com>2018-04-15 20:41:22 -0400
committerGitHub <noreply@github.com>2018-04-15 20:41:22 -0400
commit69b31d3c3b1957e59d7962722a4145bfb0db16f9 (patch)
tree927d843a553ef53217c283f19f16728b0ca51c50 /src/survive.c
parentc73823e20c9ed2f2f8f6a13c2031971d8b7d7be2 (diff)
parent39a63badbb5864314a9d9e18c0871718ac5d2912 (diff)
downloadlibsurvive-69b31d3c3b1957e59d7962722a4145bfb0db16f9.tar.gz
libsurvive-69b31d3c3b1957e59d7962722a4145bfb0db16f9.tar.bz2
Merge branch 'master' into tcc_build
Diffstat (limited to 'src/survive.c')
-rw-r--r--src/survive.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/survive.c b/src/survive.c
index 9e750f9..bb1179e 100644
--- a/src/survive.c
+++ b/src/survive.c
@@ -106,7 +106,7 @@ SurviveContext *survive_init_internal(int argc, char *const *argv) {
static int did_manual_driver_registration = 0;
if (did_manual_driver_registration == 0) {
#define MANUAL_DRIVER_REGISTRATION(func) \
- int func(SurviveObject *so, PoserData *pd); \
+ int func(SurviveObject *so, PoserData *pd); \
RegisterDriver(#func, &func);
MANUAL_DRIVER_REGISTRATION(PoserCharlesSlow)
@@ -114,6 +114,8 @@ SurviveContext *survive_init_internal(int argc, char *const *argv) {
MANUAL_DRIVER_REGISTRATION(PoserDummy)
MANUAL_DRIVER_REGISTRATION(PoserEPNP)
MANUAL_DRIVER_REGISTRATION(PoserSBA)
+ MANUAL_DRIVER_REGISTRATION(PoserCharlesRefine)
+ MANUAL_DRIVER_REGISTRATION(PoserMPFIT)
MANUAL_DRIVER_REGISTRATION(DriverRegHTCVive)
MANUAL_DRIVER_REGISTRATION(DriverRegPlayback)
@@ -402,6 +404,31 @@ int survive_add_object(SurviveContext *ctx, SurviveObject *obj) {
return 0;
}
+void survive_remove_object(SurviveContext *ctx, SurviveObject *obj) {
+ int obj_idx = 0;
+ for (obj_idx = 0; obj_idx < ctx->objs_ct; obj_idx++) {
+ if (ctx->objs[obj_idx] == obj)
+ break;
+ }
+
+ if (obj_idx == ctx->objs_ct) {
+ SV_INFO("Warning: Tried to remove un-added object %p(%s)", obj, obj->codename);
+ return;
+ }
+
+ // Swap the last item into this items slot; this assumes order doesn't matter in this list
+ if (obj_idx != ctx->objs_ct - 1) {
+ ctx->objs[obj_idx] = ctx->objs[ctx->objs_ct - 1];
+ }
+
+ ctx->objs_ct--;
+
+ // Blank out the spot; but this is only really necessary for diagnostic reasons -- presumably no one will ever read
+ // past the end of the list
+ ctx->objs[ctx->objs_ct] = 0;
+
+ free(obj);
+}
void survive_add_driver(SurviveContext *ctx, void *payload, DeviceDriverCb poll, DeviceDriverCb close,
DeviceDriverMagicCb magic) {
int oldct = ctx->driver_ct;