コード例 #1
0
        void UpdateDataToSend()
        {
            var data = new ServerSideSocketData();

            if (targetVessel != null)
            {
                data.longitude = targetVessel.longitude;
                data.latitude  = targetVessel.latitude;
                Vector3 up             = targetVessel.mainBody.GetSurfaceNVector(targetVessel.latitude, targetVessel.longitude);
                Vector3 northPole      = new Vector3(0, 1, 0);
                Vector3 west           = Vector3.Cross(northPole, up);
                Vector3 north          = Vector3.Cross(up, west);
                var     rotationRef    = Quaternion.LookRotation(north, up);
                var     rotationRefInv = Quaternion.Inverse(rotationRef);
                var     falseRotation  = rotationRefInv * targetVessel.ReferenceTransform.rotation;
                var     trueForward    = falseRotation * new Vector3(0, 1, 0);
                var     trueUp         = falseRotation * new Vector3(0, 0, -1);
                data.rotation         = Quaternion.LookRotation(trueForward, trueUp);
                data.srfVel           = rotationRefInv * targetVessel.srf_velocity;
                data.altitudeRadar    = (float)targetVessel.radarAltitude;
                data.altitudeSealevel = (float)targetVessel.altitude;
            }

            server.dataToSend = data;
        }
コード例 #2
0
    void HandleInfoData(byte[] data)
    {
        //Debug.Log("bytes" + data[28] + "|" + data[29] + "|" + data[30] + "|" + data[31] + "|");
        var serverData = new ServerSideSocketData(data);

        //lastReceivedData = serverData;
        idleTime = 0;

        Vector3    srfVel     = serverData.srfVel;
        Quaternion rotation   = serverData.rotation;
        double     longitude  = serverData.longitude;
        double     latitude   = serverData.latitude;
        float      altitudeSL = serverData.altitudeSealevel;//TODO: display altitude
        float      altitudeR  = serverData.altitudeRadar;

        var forward   = rotation * new Vector3(0, 0, 1);
        var horLength = forward.SetY(0).magnitude;
        var pitch     = Mathf.Atan2(forward.y, horLength) * Mathf.Rad2Deg;
        var yaw       = Mathf.Atan2(forward.x, forward.z) * Mathf.Rad2Deg;
        var roll      = rotation.eulerAngles.z;

        navControl.Set(pitch, roll);
        compassControl.Set(yaw);
        velocityDisplay.Set(srfVel.magnitude);
        altitudeDisplay.Set(altitudeR);
        positionDisplay.Set((float)longitude, (float)latitude);
        velocityVector.Set(srfVel, rotation);
        iLSControl.UpdatePosition(latitude, longitude, altitudeSL);

        navball.eulerAngles = new Vector3(0, yaw, 0);
        navball.Rotate(new Vector3(-1, 0, 0), pitch, Space.World);
        navball.Rotate(new Vector3(0, 0, -1), roll, Space.World);
        //speedIndicator.text = srfVel.magnitude.ToString(".00") + " m/s";
        //headingIndicator.text = Mathf.RoundToInt(yaw) + "°";
        compass.eulerAngles = new Vector3(0, 0, yaw);
        //Debug.Log(string.Format("alt{0}", altitudeSL));
    }