Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="chassis"></param>
        /// <param name="paramRaycastInfo">Not used!</param>
        public void UpdateWheel(RigidBody chassis, RaycastInfo paramRaycastInfo)
        {
            if (_raycastInfo.IsInContact)
            {
                float project = Vector3.Dot(_raycastInfo.ContactNormalWS, _raycastInfo.WheelDirectionWS);

                Vector3 chassisVelocityAtContactPoint = new Vector3();
                Vector3 relpos = _raycastInfo.ContactPointWS - chassis.CenterOfMassPosition;
                chassisVelocityAtContactPoint = chassis.GetVelocityInLocalPoint(relpos);
                float projVel = Vector3.Dot(_raycastInfo.ContactNormalWS, chassisVelocityAtContactPoint);

                if (project >= -0.1f)
                {
                    _suspensionRelativeVelocity     = 0;
                    _clippedInvContactDotSuspension = 1.0f / 0.1f;
                }
                else
                {
                    float inv = -1 / project;
                    _suspensionRelativeVelocity     = projVel * inv;
                    _clippedInvContactDotSuspension = inv;
                }
            }
            else
            {
                _raycastInfo.SuspensionLength   = _suspensionRestLength;
                _suspensionRelativeVelocity     = 0.0f;
                _raycastInfo.ContactNormalWS    = -_raycastInfo.WheelDirectionWS;
                _clippedInvContactDotSuspension = 1.0f;
            }
        }
Beispiel #2
0
        public WheelInfo(WheelInfoConstructionInfo constructionInfo)
        {
            _suspensionRestLength  = constructionInfo.SuspensionRestLength;
            _maxSuspensionTravelCm = constructionInfo.MaxSuspensionTravelCm;

            _wheelsRadius             = constructionInfo.WheelRadius;
            _wheelsDampingCompression = constructionInfo.WheelsDampingCompression;
            _wheelsDampingRelaxation  = constructionInfo.WheelsDampingRelaxation;
            _wheelDirectionCS         = constructionInfo.WheelDirectionCS;

            _suspensionStiffness      = constructionInfo.SuspensionStiffness;
            _chassicConnectionPointCS = constructionInfo.ChassicConnectionCS;

            _wheelAxleCS  = constructionInfo.WheelAxleCS;
            _frictionSlip = constructionInfo.FrictionSlip;

            _clippedInvContactDotSuspension = 0;
            _suspensionRelativeVelocity     = 0;
            _wheelsSuspensionForce          = 0;
            _skidInfo = 0;

            _steering      = 0;
            _engineForce   = 0;
            _rotation      = 0;
            _rotation      = 0;
            _deltaRotation = 0;
            _brake         = 0;
            _rollInfluence = 0.1f;
            _brake         = 0;
            _rollInfluence = 0.1f;

            _isFrontWheel = constructionInfo.IsFrontWheel;

            _raycastInfo    = default(RaycastInfo);
            _worldTransform = default(Matrix);
            _clientInfo     = null;
        }
Beispiel #3
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="chassis"></param>
		/// <param name="paramRaycastInfo">Not used!</param>
		public void UpdateWheel(RigidBody chassis, RaycastInfo paramRaycastInfo)
		{
			if (_raycastInfo.IsInContact)
			{
				float project = Vector3.Dot(_raycastInfo.ContactNormalWS, _raycastInfo.WheelDirectionWS);

				Vector3 chassisVelocityAtContactPoint = new Vector3();
				Vector3 relpos = _raycastInfo.ContactPointWS - chassis.CenterOfMassPosition;
				chassisVelocityAtContactPoint = chassis.GetVelocityInLocalPoint(relpos);
				float projVel = Vector3.Dot(_raycastInfo.ContactNormalWS, chassisVelocityAtContactPoint);

				if (project >= -0.1f)
				{
					_suspensionRelativeVelocity = 0;
					_clippedInvContactDotSuspension = 1.0f / 0.1f;
				}
				else
				{
					float inv = -1 / project;
					_suspensionRelativeVelocity = projVel * inv;
					_clippedInvContactDotSuspension = inv;
				}
			}
			else
			{
				_raycastInfo.SuspensionLength = _suspensionRestLength;
				_suspensionRelativeVelocity = 0.0f;
				_raycastInfo.ContactNormalWS = -_raycastInfo.WheelDirectionWS;
				_clippedInvContactDotSuspension = 1.0f;
			}
		}
Beispiel #4
0
		public WheelInfo(WheelInfoConstructionInfo constructionInfo)
		{
			_suspensionRestLength = constructionInfo.SuspensionRestLength;
			_maxSuspensionTravelCm = constructionInfo.MaxSuspensionTravelCm;

			_wheelsRadius = constructionInfo.WheelRadius;
			_wheelsDampingCompression = constructionInfo.WheelsDampingCompression;
			_wheelsDampingRelaxation = constructionInfo.WheelsDampingRelaxation;
			_wheelDirectionCS = constructionInfo.WheelDirectionCS;

			_suspensionStiffness = constructionInfo.SuspensionStiffness;
			_chassicConnectionPointCS = constructionInfo.ChassicConnectionCS;

			_wheelAxleCS = constructionInfo.WheelAxleCS;
			_frictionSlip = constructionInfo.FrictionSlip;

			_clippedInvContactDotSuspension = 0;
			_suspensionRelativeVelocity = 0;
			_wheelsSuspensionForce = 0;
			_skidInfo = 0;

			_steering = 0;
			_engineForce = 0;
			_rotation = 0;
			_rotation = 0;
			_deltaRotation = 0;
			_brake = 0;
			_rollInfluence = 0.1f;
			_brake = 0;
			_rollInfluence = 0.1f;

			_isFrontWheel = constructionInfo.IsFrontWheel;

			_raycastInfo = default(RaycastInfo);
			_worldTransform = default(Matrix);
			_clientInfo = null;
		}