/
AWPRaycastVehicle.as
84 lines (69 loc) · 2.48 KB
/
AWPRaycastVehicle.as
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package awayphysics.dynamics.vehicle
{
import awayphysics.AWPBase;
import awayphysics.dynamics.AWPRigidBody;
import awayphysics.plugin.IMesh3D;
import flash.geom.Vector3D;
// create the raycast vehicle
// refer to https://docs.google.com/document/edit?id=18edpOwtGgCwNyvakS78jxMajCuezotCU_0iezcwiFQc
public class AWPRaycastVehicle extends AWPBase
{
private var m_chassisBody : AWPRigidBody;
private var m_wheelInfo : Vector.<AWPWheelInfo>;
public function AWPRaycastVehicle(tuning : AWPVehicleTuning, chassis : AWPRigidBody)
{
pointer = bullet.createVehicleMethod(tuning, chassis.pointer);
m_chassisBody = chassis;
m_wheelInfo = new Vector.<AWPWheelInfo>();
}
public function getRigidBody() : AWPRigidBody
{
return m_chassisBody;
}
public function getNumWheels() : int
{
return m_wheelInfo.length;
}
public function getWheelInfo(index : int) : AWPWheelInfo
{
if (index < m_wheelInfo.length) {
return m_wheelInfo[index];
}
return null;
}
public function addWheel(_skin : IMesh3D, connectionPointCS0 : Vector3D, wheelDirectionCS0 : Vector3D, wheelAxleCS : Vector3D, suspensionRestLength : Number, wheelRadius : Number, tuning : AWPVehicleTuning, isFrontWheel : Boolean) : void
{
var wp : uint = bullet.addVehicleWheelMethod(pointer, connectionPointCS0.x / _scaling, connectionPointCS0.y / _scaling, connectionPointCS0.z / _scaling, wheelDirectionCS0.x, wheelDirectionCS0.y, wheelDirectionCS0.z, wheelAxleCS.x, wheelAxleCS.y, wheelAxleCS.z, suspensionRestLength / _scaling, wheelRadius / _scaling, tuning, (isFrontWheel) ? 1 : 0);
if (m_wheelInfo.length > 0) {
var num : int = 0;
for (var i : int = m_wheelInfo.length - 1; i >= 0; i-- ) {
num += 1;
m_wheelInfo[i] = new AWPWheelInfo(wp - 284 * num, m_wheelInfo[i].skin);
}
}
m_wheelInfo.push(new AWPWheelInfo(wp, _skin));
}
public function applyEngineForce(force : Number, wheelIndex : int) : void
{
m_wheelInfo[wheelIndex].engineForce = force;
}
public function setBrake(brake : Number, wheelIndex : int) : void
{
m_wheelInfo[wheelIndex].brake = brake;
}
public function setSteeringValue(steering : Number, wheelIndex : int) : void
{
m_wheelInfo[wheelIndex].steering = steering;
}
public function getSteeringValue(wheelIndex : int) : Number
{
return m_wheelInfo[wheelIndex].steering;
}
public function updateWheelsTransform() : void
{
for each (var wheel:AWPWheelInfo in m_wheelInfo) {
wheel.updateTransform();
}
}
}
}