summaryrefslogtreecommitdiffhomepage
path: root/X-Plane-SDK/CHeaders/Wrappers/XPCProcessing.cpp
blob: 352c05f2dd3095cb8a689b6fbcf2ea58a53901a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "XPCProcessing.h"
#include "XPLMUtilities.h"

XPCProcess::XPCProcess() :
	mInCallback(false),
	mCallbackTime(0)
{
	XPLMRegisterFlightLoopCallback(FlightLoopCB, 0, reinterpret_cast<void *>(this));
}

XPCProcess::~XPCProcess()
{
	XPLMUnregisterFlightLoopCallback(FlightLoopCB, reinterpret_cast<void *>(this));
}
	
void		XPCProcess::StartProcessTime(float	inSeconds)
{
	mCallbackTime = inSeconds;
	if (!mInCallback)
		XPLMSetFlightLoopCallbackInterval(
			FlightLoopCB, mCallbackTime, 1/*relative to now*/, reinterpret_cast<void *>(this));
}

void		XPCProcess::StartProcessCycles(int	inCycles)
{
	mCallbackTime = -inCycles;
	if (!mInCallback)
		XPLMSetFlightLoopCallbackInterval(
			FlightLoopCB, mCallbackTime, 1/*relative to now*/, reinterpret_cast<void *>(this));
}

void		XPCProcess::StopProcess(void)
{
	mCallbackTime = 0;
	if (!mInCallback)
		XPLMSetFlightLoopCallbackInterval(
			FlightLoopCB, mCallbackTime, 1/*relative to now*/, reinterpret_cast<void *>(this));
}


float	XPCProcess::FlightLoopCB(
						float 				inElapsedSinceLastCall, 
						float				inElapsedTimeSinceLastFlightLoop,
						int 				inCounter, 
						void * 				inRefcon)
{
	XPCProcess * me = reinterpret_cast<XPCProcess *>(inRefcon);
	me->mInCallback = true;
	me->DoProcessing(inElapsedSinceLastCall, inElapsedTimeSinceLastFlightLoop, inCounter);
	me->mInCallback = false;
	return me->mCallbackTime;
}