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; }
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)); }