private KLFVesselUpdate getVesselUpdate(Vessel vessel)
{
if (vessel == null || vessel.mainBody == null)
return null;
//Create a KLFVesselUpdate from the vessel data
KLFVesselUpdate update = new KLFVesselUpdate();
if (vessel.vesselName.Length <= MAX_VESSEL_NAME_LENGTH)
update.name = vessel.vesselName;
else
update.name = vessel.vesselName.Substring(0, MAX_VESSEL_NAME_LENGTH);
update.player = playerName;
update.id = vessel.id;
Vector3 pos = vessel.mainBody.transform.InverseTransformPoint(vessel.GetWorldPos3D());
Vector3 dir = vessel.mainBody.transform.InverseTransformDirection(vessel.transform.up);
Vector3 vel = vessel.mainBody.transform.InverseTransformDirection(vessel.GetObtVelocity());
for (int i = 0; i < 3; i++)
{
update.pos[i] = pos[i];
update.dir[i] = dir[i];
update.vel[i] = vel[i];
}
//Determine situation
if (vessel.loaded && vessel.GetTotalMass() <= 0.0)
update.situation = Situation.DESTROYED;
else
{
switch (vessel.situation)
{
case Vessel.Situations.LANDED:
update.situation = Situation.LANDED;
break;
case Vessel.Situations.SPLASHED:
update.situation = Situation.SPLASHED;
break;
case Vessel.Situations.PRELAUNCH:
update.situation = Situation.PRELAUNCH;
break;
case Vessel.Situations.SUB_ORBITAL:
if (vessel.orbit.timeToAp < vessel.orbit.period / 2.0)
update.situation = Situation.ASCENDING;
else
update.situation = Situation.DESCENDING;
break;
case Vessel.Situations.ORBITING:
update.situation = Situation.ORBITING;
break;
case Vessel.Situations.ESCAPING:
if (vessel.orbit.timeToPe > 0.0)
update.situation = Situation.ENCOUNTERING;
else
update.situation = Situation.ESCAPING;
break;
case Vessel.Situations.DOCKED:
update.situation = Situation.DOCKED;
break;
case Vessel.Situations.FLYING:
update.situation = Situation.FLYING;
break;
default:
update.situation = Situation.UNKNOWN;
break;
}
}
if (vessel == FlightGlobals.ActiveVessel)
{
update.state = State.ACTIVE;
//Set vessel details since it's the active vessel
update.detail = getVesselDetail(vessel);
}
else if (vessel.isCommandable)
update.state = State.INACTIVE;
else
update.state = State.DEAD;
update.timeScale = (float)Planetarium.TimeScale;
update.bodyName = vessel.mainBody.bodyName;
return update;
}