From 4fb23a1b30932f264a752b4dd639b85564ccccd3 Mon Sep 17 00:00:00 2001 From: Paul Dino Jones Date: Mon, 19 Dec 2022 15:01:55 -0500 Subject: [PATCH] Removed memcpy calls for better performance --- src/monocoque/simulatorapi/simmapper.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/monocoque/simulatorapi/simmapper.c b/src/monocoque/simulatorapi/simmapper.c index ce81fd4..a40ec11 100644 --- a/src/monocoque/simulatorapi/simmapper.c +++ b/src/monocoque/simulatorapi/simmapper.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "simmapper.h" @@ -19,30 +20,33 @@ int simdatamap(SimData* simdata, SimMap* simmap, Simulator simulator) { + char* a; + char* b; switch ( simulator ) { case SIMULATOR_MONOCOQUE_TEST : memcpy(simdata, simmap->addr, sizeof(SimData)); break; case SIMULATOR_ASSETTO_CORSA : - memcpy(&simmap->d.ac.ac_physics, simmap->d.ac.physics_map_addr, sizeof(simmap->d.ac.ac_physics)); + a = simmap->d.ac.physics_map_addr; if (simmap->d.ac.has_static == true ) { - memcpy(&simmap->d.ac.ac_static, simmap->d.ac.static_map_addr, sizeof(simmap->d.ac.ac_static)); - simdata->maxrpm = simmap->d.ac.ac_static.maxRpm; + b = simmap->d.ac.static_map_addr; + simdata->maxrpm = *(uint32_t*) (char*) (b + offsetof(struct SPageFileStatic, maxRpm)); } - simdata->rpms = simmap->d.ac.ac_physics.rpms; - simdata->gear = simmap->d.ac.ac_physics.gear; - simdata->velocity = simmap->d.ac.ac_physics.speedKmh; + simdata->rpms = *(uint32_t*) (char*) (a + offsetof(struct SPageFilePhysics, rpms)); + simdata->gear = *(uint32_t*) (char*) (a + offsetof(struct SPageFilePhysics, gear)); + simdata->velocity = ceil( *(float*) (char*) (a + offsetof(struct SPageFilePhysics, speedKmh))); simdata->altitude = 1; break; case SIMULATOR_RFACTOR2 : - memcpy(&simmap->d.rf2.rf2_telemetry, simmap->d.rf2.telemetry_map_addr, sizeof(simmap->d.rf2.rf2_telemetry)); - simdata->velocity = abs(ceil(simmap->d.rf2.rf2_telemetry.mVehicles[0].mLocalVel.z * 3.6)); - simdata->rpms = ceil(simmap->d.rf2.rf2_telemetry.mVehicles[0].mEngineRPM); - simdata->gear = simmap->d.rf2.rf2_telemetry.mVehicles[0].mGear; - simdata->maxrpm - ceil(simmap->d.rf2.rf2_telemetry.mVehicles[0].mEngineMaxRPM); + a = simmap->d.rf2.telemetry_map_addr; + + simdata->velocity = ceil(3.6 * ( *(double*) (char*) (a + offsetof(struct rF2Telemetry, mVehicles[0].mLocalVel.z)))); + simdata->rpms = ceil( *(double*) (char*) (a + offsetof(struct rF2Telemetry, mVehicles[0].mEngineRPM))); + simdata->maxrpm = ceil( *(double*) (char*) (a + offsetof(struct rF2Telemetry, mVehicles[0].mEngineMaxRPM))); + simdata->gear = *(uint32_t*) (char*) (a + offsetof(struct rF2Telemetry, mVehicles[0].mGear)); break; } }