public void FixedUpdate()
{
if(HighLogic.LoadedSceneIsFlight && vessel!=null && vessel.IsControllable)
{
if(!hasInitialized)
{
hasInitialized = true;
part.FindModelTransform("bounds").GetComponent<Collider>().enabled = false;
}
}
else return;
Ray feetDownRay = new Ray(transform.position, -transform.up);
if(Physics.Raycast(feetDownRay, 5, 1<<15))
{
feetAreDown = true;
}
else
{
feetAreDown = false;
}
if(walkerEnabled && vessel!=null && vessel.loaded)
{
if(vessel.checkLanded() && !vessel.rigidbody.isKinematic && feetAreDown)
{
//stickyFeet
if(stickyFeet) vessel.rigidbody.AddForce(10 * -part.transform.up);
forwardForce = Vector3.MoveTowards(forwardForce, -vessel.ctrlState.pitch * moveForce * Vector3.forward, moveForce * moveAccelFactor * Time.fixedDeltaTime);
strafeForce = Vector3.MoveTowards(strafeForce, vessel.ctrlState.yaw * moveForce * Vector3.right, moveForce * moveAccelFactor * Time.fixedDeltaTime);
turnTorque = Mathf.MoveTowards(turnTorque, rotateTorque * vessel.ctrlState.roll, rotateTorque * moveAccelFactor*2 * Time.fixedDeltaTime);
Vector3 force = Vector3.ClampMagnitude(forwardForce+strafeForce, moveForce);
rigidbody.AddRelativeForce(force);
rigidbody.AddRelativeTorque(Vector3.up * turnTorque);
//drag
rigidbody.AddTorque(-slowForce * rigidbody.angularVelocity);
rigidbody.AddForce(-slowForce * rigidbody.velocity);
foreach(var wheel in part.FindModelTransforms("wheelCollider"))
{
var wheelCollider = wheel.GetComponent<WheelCollider>();
debugWheelSuspDist = wheelCollider.suspensionDistance;
WheelHit hit;
Transform colEnhancer = wheel.FindChild("collisionEnhancer");
if(wheelCollider.GetGroundHit(out hit))
{
groundHit = true;
colEnhancer.localPosition = new Vector3(0,(hit.point - wheel.position).magnitude, 0);
}
else
{
groundHit = false;
}
}
}
}
}