private void applyVesselUpdate(KLFVesselUpdate vessel_update, KLFVessel vessel)
{
//Find the CelestialBody that matches the one in the update
CelestialBody update_body = null;
if (vessel.mainBody != null && vessel.mainBody.bodyName == vessel_update.bodyName)
update_body = vessel.mainBody; //Vessel already has the correct body
else
{
//Find the celestial body in the list of bodies
foreach (CelestialBody body in FlightGlobals.Bodies)
{
if (body.bodyName == vessel_update.bodyName)
{
update_body = body;
break;
}
}
}
if (update_body != null)
{
//Convert float arrays to Vector3s
Vector3 pos = new Vector3(vessel_update.pos[0], vessel_update.pos[1], vessel_update.pos[2]);
Vector3 dir = new Vector3(vessel_update.dir[0], vessel_update.dir[1], vessel_update.dir[2]);
Vector3 vel = new Vector3(vessel_update.vel[0], vessel_update.vel[1], vessel_update.vel[2]);
vessel.info = vessel_update;
vessel.setOrbitalData(update_body, pos, vel, dir);
}
if (vessel_update.state == State.ACTIVE)
{
//Update the player status info
VesselStatusInfo status = new VesselStatusInfo();
status.info = vessel_update;
status.ownerName = vessel_update.player;
status.vesselName = vessel_update.name;
if (vessel.orbitValid)
status.orbit = vessel.orbitRenderer.driver.orbit;
status.lastUpdateTime = UnityEngine.Time.realtimeSinceStartup;
status.color = KLFVessel.generateActiveColor(status.ownerName);
if (playerStatus.ContainsKey(status.ownerName))
playerStatus[status.ownerName] = status;
else
playerStatus.Add(status.ownerName, status);
}
}