public class MyVehicle : Vehicle { public class MyVehicleRigidBody : TokamakRigidBody { // Inputs public RigidBodyController controller; public void UpdateInput( /*input in*/) { // Game Inputs Stored for Callback } public void Create() { // rigidBody is a member of TokamakRigidBody //initiate rigid body and link up the controller callback rigidBody = MPhysicsEngine.TokSimulator.CreateRigidBody(); rigidBody.SetSleepingParameter(0.01f); rigidBody.SetParent(parent); controller = new RigidBodyController(rigidBody, 1); controller.OnControllerCallback += new ControllerEvent(controller_OnControllerCallback); } void controller_OnControllerCallback(RigidBodyController Controller) { // Use Inputs Recieved from Game Update Input And Create Some New Forces // Corresponding To These New Inputs Controller.SetControllerForce(TranslatedForce); Controller.SetControllerTorque(TranslatedTorque); } } public MyVehicleRigidBody myVehicleRigidBody; public override void Tick() { Location = myVehicleRigidBody.Location; Rotation = myVehicleRigidBody.Rotation; myVehicleRigidBody.UpdateInput( /* inputs in */ ); } }
//////////////////////////////////////// // member of the MyVehicleRigidBody //////////////////////////////////////// Sensor[] sn = new Sensor[1]; //////////////////////////////////////// // In the rigid body create function //////////////////////////////////////// MVector snPos = new MVector(); MVector snDir = new MVector(); snDir.Set(0.0f, -1.0f, 0.0f); snPos.Set(1.0f, 0.0f, 0.0f); sn[0] = rigidBody.AddSensor(); sn[0].SetLineSensor(snPos, snDir); snPos.Set(-1.0f, 0.0f, 0.0f); sn[1] = rigidBody.AddSensor(); sn[0].SetLineSensor(snPos, snDir); rigidBody.UpdateBoundingInfo(); //////////////////////////////////////// // Inside your Controller Callback //////////////////////////////////////// rigidBody.BeginIterateSensor(); sn = rigidBody.GetNextSensor(); // Iterates through sensors while (sn != null) { float depth = sn.DetectDepth; // Use depth to alter forces on vehicle sn = rigidBody.GetNextSensor(); }