private void Integrate(float delta)
        {
            if (IntPtr.Zero != VsVehicleHandle)
            {
                Check(VS_Vehicle.IsValidVehicle(VsVehicleHandle));

                if (VS_Vehicle.IsOk(VsVehicleHandle))
                {
                    double throttle = UserThrottle * VehicleData.MaxThrottle;
                    double brakePedalForceNewtons = UserBrake * VehicleData.MaxBrakePedalForceNewtons;
                    double steerLeftDeg           = SteeringWheelAngleLeftDeg;

                    VS_Vehicle.SetDriverThrottle(VsVehicleHandle, throttle);
                    VS_Vehicle.SetDriverBrakePedalNewtons(VsVehicleHandle, brakePedalForceNewtons);
                    VS_Vehicle.SetDriverSteerLeftDegrees(VsVehicleHandle, steerLeftDeg);

                    int integrateResult = VS_Vehicle.Integrate(VsVehicleHandle, delta);


                    if (!VS_Vehicle.IsOk(VsVehicleHandle))
                    {
                        if (this.VehicleData.AutoResetSolver)
                        {
                            VehicleSolver.ResetVsVehicle();
                        }
                    }
                    else
                    {
                        double forward = 0;
                        double left    = 0;
                        double up      = 0;

                        double rollRightRad = 0;
                        double pitchDownRad = 0;
                        double yawLeftRad   = 0;

                        VS_Vehicle.GetWorldPosition(VsVehicleHandle, 0, ref forward, ref left, ref up);
                        VS_Vehicle.GetWorldOrientation(VsVehicleHandle, 0, ref rollRightRad, ref pitchDownRad, ref yawLeftRad);

                        //Log((180/Math.PI*rollRightRad) + "," + (180 / Math.PI * pitchDownRad) + "," + (180 / Math.PI * yawLeftRad));
                        //Log(forward + "," + left + "," + up);

                        VsUnityLib.SetUnityTransformFromSolverValues(this.gameObject, (float)forward, (float)left, (float)up, (float)rollRightRad, (float)pitchDownRad, (float)yawLeftRad);

                        //Todo temporary change. more precise
                        this.transform.position += this.transform.forward * BodyOffset;
                    }
                }
            }
        }
        private void Awake()
        {
            VehicleSolver.CreateVehicleEvent  += CreateVehicleEvent;
            VehicleSolver.ResetVehicleEvent   += ResetVehicleEvent;
            VehicleSolver.DestroyVehicleEvent += DestroyVehicleEvent;

            Log(("CarSimMovementComponent: BeginPlay."));

            VehicleSolver.Data = VehicleData;
            VehicleSolver.Data.RoadInfoDelegate = new GetRoadInfo(RoadInfoCallback);
            VehicleSolver.Data.RoadInfoData     = this;


            VehicleSolver.SetSimFile();

            InitialLocaion     = this.gameObject.transform.position;
            InitialOrientation = this.gameObject.transform.rotation;
            ResetLocaion       = InitialLocaion;
            ResetOrientation   = InitialOrientation;

            this.VehicleSolver.ResetVsVehicle();
        }