Beispiel #1
0
    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;
    }
Beispiel #2
0
    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();
        //    }
        //}
    }