public void ToggleAutoPilot(bool active) { if (active) { memoryBridge.SetBool("ClientAutoPilotActive", true); targetVessel.vessel.gameObject.SetActive(true); targetVessel.vessel.transform.eulerAngles = new Vector3(90, 0, 0); controlMode = FlightControlMode.Automous; PIDpitch.StartPID(); PIDroll.StartPID(); } else { memoryBridge.SetBool("ClientAutoPilotActive", false); } autoPilot = active; }
public void VesselUpdate() { var vesselOffst = memoryBridge.GetVector3("AdjustedVesselCOMoffset" + memoryBridge.fileName); vessel.meshOffset.localPosition = vesselOffst; targetVessel.vesselOffset.localPosition = vesselOffst; var kspOffset = memoryBridge.GetQuaternion("VesselGimbleOffset" + memoryBridge.fileName); vessel.transform.rotation = kspOffset; adjustedGimbal.rotation = vessel.transform.rotation; var tempRot = adjustedGimbal.localRotation; tempRot.x = 0; tempRot.z = 0; adjustedGimbal.localRotation = tempRot; float prevDeltaTime = 0; if (controlMode == FlightControlMode.RawStick) { targetVessel.vessel.rotation = adjustedGimbal.rotation; System.TimeSpan deltaTime = TimeSpan.FromSeconds(Time.fixedDeltaTime); bool recievingPitchInput = false; bool recievingRollInput = false; bool recievingYawInput = false; var rollInput = Input.GetAxis("Roll"); var pitchInput = Input.GetAxis("Pitch"); var yawInput = Input.GetAxis("Yaw"); // Debug.Log(pitcInput); if (rollInput != 0) { recievingRollInput = true; } if (pitchInput != 0) { recievingPitchInput = true; } if (yawInput != 0) { recievingYawInput = true; } // var tempVesselRot = targetVessel.vessel.transform.rotation; if (recievingYawInput) { memoryBridge.SetFloat("VesselYaw", yawInput); // tempVesselRot.y = mirrorVessel.vessel.transform.rotation.y; } else { memoryBridge.SetFloat("VesselYaw", 1.1f); } if (recievingPitchInput) { memoryBridge.SetFloat("VesselPitch", pitchInput); // tempVesselRot.x = mirrorVessel.vessel.transform.rotation.x; } else { memoryBridge.SetFloat("VesselPitch", 1.1f); } if (recievingRollInput) { memoryBridge.SetFloat("VesselRoll", rollInput); // tempVesselRot.z = mirrorVessel.vessel.transform.rotation.z; } else { memoryBridge.SetFloat("VesselRoll", 1.1f); } // targetVessel.vessel.transform.rotation = tempVesselRot; var targetVesselOffset = Quaternion.Inverse(targetVessel.vessel.rotation) * vessel.transform.rotation; //if (rollInput > 0 & Math.Abs(rollInput) <= 1) //{ // memoryBridge.SetFloat("VesselRoll", rollInput); //} //else //{ // memoryBridge.SetFloat("VesselRoll", PIDroll.CalculateResult(targetVesselOffset.z * 10, deltaTime)); //} //memoryBridge.SetFloat("VesselPitch", pitchInput); //memoryBridge.SetFloat("VesselYaw", yawInput); // var targetVesselOffset = targetVessel.vessel.localEulerAngles - mirrorVessel.vessel.localEulerAngles; // Debug.Log(targetVesselOffset); // memoryBridge.SetFloat("VesselPitch", PIDpitch.CalculateResult(targetVesselOffset.x * 10, deltaTime)); } else if (controlMode == FlightControlMode.Automous) { var timeSinceLastUpdate = Time.time - prevDeltaTime; prevDeltaTime = Time.time; var deltaTime1 = (int)(timeSinceLastUpdate * 1000); var telloDeltaTime = new System.TimeSpan(0, 0, 0, 0, (deltaTime1)); var pitchError = targetVessel.vessel.transform.eulerAngles.x - vessel.transform.eulerAngles.x; var pitchInput = PIDpitch.CalculateResult(pitchError, telloDeltaTime); var rollError = targetVessel.vessel.transform.eulerAngles.z - vessel.transform.eulerAngles.z; var rollInput = PIDroll.CalculateResult(rollError, telloDeltaTime); if (rollError > 180) { //rollError = 360 - rollError; } else { // rollError = -rollError; } Debug.Log(rollError); // var yawInput = 1; //// var pitchInput = 1f; // var rollInput = 1f; // memoryBridge.SetFloat("VesselYaw", yawInput); memoryBridge.SetFloat("VesselRoll", rollInput); memoryBridge.SetFloat("VesselPitch", pitchInput); } // memoryBridge.SetFloat("VesselYaw", PIDyaw.CalculateResult(targetVesselOffset.y, deltaTime)); //var rawRoll = targetVesselOffset.x; //float rollError = 0; //if (rawRoll > 180) //{ // rollError = 360 - rawRoll; //} //else //{ // rollError = -rawRoll; //} //if (autoPilot) //{ // //Debug.Log(Quaternion.Angle(adjustedGimbal.rotation, transform.rotation)); // var targetAngle = Quaternion.Angle(adjustedGimbal.rotation, transform.rotation); // if (targetAngle < 3 & !vesselInRange) // { // OnVesselEnterTargerRange(); // } // if (targetAngle >= 3 & vesselInRange) // { // OnVesselExitTargetRange(); // } //} }