File: SumoPHYCallbackBridge.cpp

package info (click to toggle)
blender 2.42a-7
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 60,700 kB
  • ctags: 83,393
  • sloc: ansic: 576,763; cpp: 187,760; python: 48,472; sh: 15,785; makefile: 4,298; perl: 2,082; asm: 1,471; java: 8
file content (66 lines) | stat: -rwxr-xr-x 1,935 bytes parent folder | download | duplicates (4)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "SumoPHYCallbackBridge.h"
#include "PHY_IPhysicsController.h"
#include "SM_Object.h"


SumoPHYCallbackBridge::SumoPHYCallbackBridge(void* clientData,PHY_ResponseCallback phyCallback)
:m_orgClientData(clientData),
m_phyCallback(phyCallback)
{

}
DT_Bool SumoPHYCallbackBridge::StaticSolidToPHYCallback(void *client_data,
										   void *client_object1,
										   void *client_object2,
										   const DT_CollData *coll_data)
{
	SumoPHYCallbackBridge* bridge = static_cast<SumoPHYCallbackBridge*>(client_data);
	bridge->SolidToPHY(client_object1,client_object2,coll_data);
	return false;
}

DT_Bool SumoPHYCallbackBridge::SolidToPHY(void *client_object1,
										void *client_object2,
										const DT_CollData *coll_data)
{

	SM_Object* smObject1 = static_cast<SM_Object*>(client_object1);
	SM_Object* smObject2 = static_cast<SM_Object*>(client_object2);

	PHY_IPhysicsController* ctrl1 = static_cast<PHY_IPhysicsController*>(smObject1->getPhysicsClientObject());
	PHY_IPhysicsController* ctrl2 = static_cast<PHY_IPhysicsController*>(smObject2->getPhysicsClientObject());
	
	if (!ctrl1 || !ctrl2)
	{
		//todo: check which objects are not linked up properly
		return false;
	}
	if (coll_data)
	{
		PHY_CollData	phyCollData;
		
		phyCollData.m_point1[0] = coll_data->point1[0];
		phyCollData.m_point1[1] = coll_data->point1[1];
		phyCollData.m_point1[2] = coll_data->point1[2];
		phyCollData.m_point1[3] = 0.f;

		phyCollData.m_point2[0] = coll_data->point2[0];
		phyCollData.m_point2[1] = coll_data->point2[1];
		phyCollData.m_point2[2] = coll_data->point2[2];
		phyCollData.m_point2[3] = 0.f;

		phyCollData.m_normal[0] = coll_data->normal[0];
		phyCollData.m_normal[1] = coll_data->normal[1];
		phyCollData.m_normal[2] = coll_data->normal[2];
		phyCollData.m_normal[3] = 0.f;


		return m_phyCallback(m_orgClientData,
			ctrl1,ctrl2,&phyCollData);
	}

	return m_phyCallback(m_orgClientData,
		ctrl1,ctrl2,0);

}