#include "XPCProcessing.h" #include "XPLMUtilities.h" XPCProcess::XPCProcess() : mInCallback(false), mCallbackTime(0) { XPLMRegisterFlightLoopCallback(FlightLoopCB, 0, reinterpret_cast(this)); } XPCProcess::~XPCProcess() { XPLMUnregisterFlightLoopCallback(FlightLoopCB, reinterpret_cast(this)); } void XPCProcess::StartProcessTime(float inSeconds) { mCallbackTime = inSeconds; if (!mInCallback) XPLMSetFlightLoopCallbackInterval(FlightLoopCB, mCallbackTime, 1 /*relative to now*/, reinterpret_cast(this)); } void XPCProcess::StartProcessCycles(int inCycles) { mCallbackTime = -inCycles; if (!mInCallback) XPLMSetFlightLoopCallbackInterval(FlightLoopCB, mCallbackTime, 1 /*relative to now*/, reinterpret_cast(this)); } void XPCProcess::StopProcess(void) { mCallbackTime = 0; if (!mInCallback) XPLMSetFlightLoopCallbackInterval(FlightLoopCB, mCallbackTime, 1 /*relative to now*/, reinterpret_cast(this)); } float XPCProcess::FlightLoopCB(float inElapsedSinceLastCall, float inElapsedTimeSinceLastFlightLoop, int inCounter, void *inRefcon) { XPCProcess *me = reinterpret_cast(inRefcon); me->mInCallback = true; me->DoProcessing(inElapsedSinceLastCall, inElapsedTimeSinceLastFlightLoop, inCounter); me->mInCallback = false; return me->mCallbackTime; }