本文整理汇总了C#中ProtoVessel.Load方法的典型用法代码示例。如果您正苦于以下问题:C# ProtoVessel.Load方法的具体用法?C# ProtoVessel.Load怎么用?C# ProtoVessel.Load使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProtoVessel
的用法示例。
在下文中一共展示了ProtoVessel.Load方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AllocVessel
public void AllocVessel(NetworkViewID id, byte[] binaryCfg)
{
if (FlightGlobals.Vessels.Any(v => v.networkView != null && v.networkView.viewID == id))
return;
var cfg = (ConfigNode)IOUtils.DeserializeFromBinary(binaryCfg);
var protovessel = new ProtoVessel(cfg, HighLogic.CurrentGame.flightState);
protovessel.orbitSnapShot.meanAnomalyAtEpoch += 1;
protovessel.Load(HighLogic.CurrentGame.flightState);
var vessel = protovessel.vesselRef;
vessel.gameObject.AddNetworkView(id);
vessel.gameObject.AddComponent<VesselNetworker>();
}
示例2: addRemoteVessel
private void addRemoteVessel(ProtoVessel protovessel, Guid vessel_id, KMPVesselUpdate update = null, double distance = 501d)
{
if (isInFlight && vessel_id == FlightGlobals.ActiveVessel.id)
{
KMPClientMain.DebugLog("Attempted to update controlled vessel!");
return;
}
KMPClientMain.DebugLog("addRemoteVessel");
Vector3 newWorldPos = Vector3.zero, newOrbitVel = Vector3.zero;
bool setTarget = false, wasLoaded = false;
try
{
//Ensure this vessel isn't already loaded
Vessel oldVessel = FlightGlobals.Vessels.Find (v => v.id == vessel_id);
if (oldVessel != null) {
KMPClientMain.DebugLog("killing extant vessel");
wasLoaded = oldVessel.loaded;
if (protovessel.vesselType == VesselType.EVA && wasLoaded)
{
return; //Don't touch EVAs here
}
else
{
setTarget = FlightGlobals.fetch.VesselTarget != null && FlightGlobals.fetch.VesselTarget.GetVessel().id == vessel_id;
if (oldVessel.loaded)
{
newWorldPos = oldVessel.transform.position;
if (oldVessel.altitude > 10000d)
newOrbitVel = oldVessel.GetObtVelocity();
}
oldVessel.Die();
}
}
if (protovessel.vesselType != VesselType.EVA && serverVessels_Parts.ContainsKey(vessel_id))
{
KMPClientMain.DebugLog("killing known precursor vessels");
foreach (Part part in serverVessels_Parts[vessel_id])
{
try { if (!part.vessel.isEVA) part.vessel.Die(); } catch {}
}
}
} catch {}
try
{
if ((protovessel.vesselType != VesselType.Debris && protovessel.vesselType != VesselType.Unknown) && protovessel.situation == Vessel.Situations.SUB_ORBITAL && protovessel.altitude < 25d)
{
//Land flags, vessels and EVAs that are on sub-orbital trajectory
KMPClientMain.DebugLog("Placing sub-orbital protovessel on surface");
protovessel.situation = Vessel.Situations.LANDED;
protovessel.landed = true;
if (protovessel.vesselType == VesselType.Flag) protovessel.height = -1;
}
//Don't bother with suborbital debris
else if (protovessel.vesselType == VesselType.Debris && protovessel.situation == Vessel.Situations.SUB_ORBITAL) return;
CelestialBody body = null;
if (update != null)
{
body = FlightGlobals.Bodies.Find(b => b.name == update.bodyName);
if (update.situation != Situation.LANDED && update.situation != Situation.SPLASHED)
{
if (body.atmosphere && body.maxAtmosphereAltitude > protovessel.altitude)
{
//In-atmo vessel--only load if within visible range
if (distance > 500d)
return;
}
}
}
if (isInSafetyBubble(protovessel.position, body, protovessel.altitude)) //refuse to load anything too close to the KSC
{
KMPClientMain.DebugLog("Tried to load vessel too close to KSC");
return;
}
IEnumerator<ProtoCrewMember> crewEnum = HighLogic.CurrentGame.CrewRoster.GetEnumerator();
int applicants = 0;
while (crewEnum.MoveNext())
if (crewEnum.Current.rosterStatus == ProtoCrewMember.RosterStatus.AVAILABLE) applicants++;
if (protovessel.GetVesselCrew().Count * 5 > applicants)
{
KMPClientMain.DebugLog("Adding crew applicants");
for (int i = 0; i < (protovessel.GetVesselCrew().Count * 5);)
{
ProtoCrewMember protoCrew = CrewGenerator.RandomCrewMemberPrototype();
if (!HighLogic.CurrentGame.CrewRoster.ExistsInRoster(protoCrew.name))
{
HighLogic.CurrentGame.CrewRoster.AddCrewMember(protoCrew);
i++;
}
}
}
if (vessels.ContainsKey(vessel_id.ToString()) && (!serverVessels_LoadDelay.ContainsKey(vessel_id) || (serverVessels_LoadDelay.ContainsKey(vessel_id) ? serverVessels_LoadDelay[vessel_id] < UnityEngine.Time.realtimeSinceStartup : false)))
{
protovessel.Load(HighLogic.CurrentGame.flightState);
Vessel created_vessel = protovessel.vesselRef;
//.........这里部分代码省略.........
示例3: LoadVessel
//Also called from QuickSaveLoader
public void LoadVessel(ConfigNode vesselNode)
{
if (vesselNode != null)
{
//Fix crew value numbers to Kerbal Names
bool kerbalsDodged = DodgeVesselCrewValues(vesselNode);
//Fix the "cannot control actiongroups bug" by dodging the last used time.
DodgeVesselActionGroups(vesselNode);
//Can be used for debugging incoming vessel config nodes.
//vesselNode.Save(Path.Combine(KSPUtil.ApplicationRootPath, Path.Combine("DMP-RX", Planetarium.GetUniversalTime() + ".txt")));
ProtoVessel currentProto = new ProtoVessel(vesselNode, HighLogic.CurrentGame);
if (kerbalsDodged && (NetworkWorker.fetch.state == ClientState.STARTING) && !LockSystem.fetch.LockExists("control-" + currentProto.vesselID) && !LockSystem.fetch.LockExists("update-" + currentProto.vesselID))
{
DarkLog.Debug("Sending kerbal-dodged vessel " + currentProto.vesselID + ", name: " + currentProto.vesselName);
NetworkWorker.fetch.SendVesselProtoMessage(currentProto, false, false);
foreach (ProtoPartSnapshot pps in currentProto.protoPartSnapshots)
{
if (pps.protoModuleCrew != null)
{
foreach (ProtoCrewMember pcm in pps.protoModuleCrew)
{
if (pcm != null)
{
NetworkWorker.fetch.SendKerbalProtoMessage(pcm);
}
}
}
}
}
if (currentProto != null)
{
//Skip already loaded EVA's
if ((currentProto.vesselType == VesselType.EVA) && (FlightGlobals.fetch.vessels.Find(v => v.id == currentProto.vesselID) != null))
{
return;
}
//Register asteroids from other players
if (currentProto.vesselType == VesselType.SpaceObject)
{
if (currentProto.protoPartSnapshots != null)
{
if (currentProto.protoPartSnapshots.Count == 1)
{
if (currentProto.protoPartSnapshots[0].partName == "PotatoRoid")
{
DarkLog.Debug("Registering remote server asteroid");
AsteroidWorker.fetch.RegisterServerAsteroid(currentProto.vesselID.ToString());
}
}
}
}
//Skip vessels that try to load in the safety bubble
if (isProtoVesselInSafetyBubble(currentProto))
{
DarkLog.Debug("Skipped loading protovessel " + currentProto.vesselID.ToString() + ", name: " + currentProto.vesselName + " because it is inside the safety bubble");
return;
}
//Skip flying vessel that are too far away
bool usingHackyAtmoLoad = false;
if (currentProto.situation == Vessel.Situations.FLYING)
{
DarkLog.Debug("Got a flying update for " + currentProto.vesselID + ", name: " + currentProto.vesselName);
if (currentProto.orbitSnapShot == null)
{
DarkLog.Debug("Skipping flying vessel load - Protovessel does not have an orbit snapshot");
return;
}
CelestialBody updateBody = FlightGlobals.fetch.bodies[currentProto.orbitSnapShot.ReferenceBodyIndex];
if (updateBody == null)
{
DarkLog.Debug("Skipping flying vessel load - Could not find celestial body index " + currentProto.orbitSnapShot.ReferenceBodyIndex);
return;
}
bool willGetKilledInAtmo = false;
if (updateBody.atmosphere)
{
double atmoPressure = updateBody.staticPressureASL * Math.Pow(Math.E, ((-currentProto.altitude) / (updateBody.atmosphereScaleHeight * 1000)));
//KSP magic cut off limit for killing vessels. Works out to be ~23km on kerbin.
if (atmoPressure > 0.01f)
{
willGetKilledInAtmo = true;
}
}
if (willGetKilledInAtmo)
{
if (HighLogic.LoadedScene == GameScenes.FLIGHT)
{
if ((FlightGlobals.fetch.vessels.Find(v => v.id == currentProto.vesselID) != null) && vesselPartCount.ContainsKey(currentProto.vesselID.ToString()) ? currentProto.protoPartSnapshots.Count == vesselPartCount[currentProto.vesselID.ToString()] : false)
{
DarkLog.Debug("Skipping flying vessel load - Vessel has the same part count");
return;
}
//.........这里部分代码省略.........
示例4: loadProtovessel
private IEnumerator<WaitForFixedUpdate> loadProtovessel(Vessel oldVessel, Vector3 newWorldPos, Vector3 newOrbitVel, bool wasLoaded, bool wasActive, bool setTarget, ProtoVessel protovessel, Guid vessel_id, KMPVessel kvessel, KMPVesselUpdate update, double distance)
{
yield return new WaitForFixedUpdate();
Log.Debug("Loading protovessel: {0}", vessel_id.ToString() + ", name: " + protovessel.vesselName + ", type: " + protovessel.vesselType);
if (oldVessel != null && !wasActive)
{
killVessel(oldVessel);
}
serverVessels_LoadDelay[vessel_id] = UnityEngine.Time.realtimeSinceStartup + 5f;
serverVessels_PartCounts[vessel_id] = protovessel.protoPartSnapshots.Count;
protovessel.Load(HighLogic.CurrentGame.flightState);
Vessel created_vessel = protovessel.vesselRef;
if (created_vessel != null)
{
try
{
OrbitPhysicsManager.HoldVesselUnpack(1);
}
catch (NullReferenceException e)
{
Log.Debug("Exception thrown in loadProtovessel(), catch 1, Exception: {0}", e.ToString());
}
Log.Debug(created_vessel.id.ToString() + " initializing: ProtoParts=" + protovessel.protoPartSnapshots.Count + ",Parts=" + created_vessel.Parts.Count + ",Sit=" + created_vessel.situation.ToString() + ",type=" + created_vessel.vesselType + ",alt=" + protovessel.altitude);
//vessels[vessel_id.ToString()].vessel.vesselRef = created_vessel;
serverVessels_PartCounts[vessel_id] = created_vessel.Parts.Count;
serverVessels_Parts[vessel_id] = new List<Part>();
serverVessels_Parts[vessel_id].AddRange(created_vessel.Parts);
if (created_vessel.vesselType != VesselType.Flag && created_vessel.vesselType != VesselType.EVA)
{
foreach (Part part in created_vessel.Parts)
{
part.OnLoad();
part.OnJustAboutToBeDestroyed += checkRemoteVesselIntegrity;
part.explosionPotential = 0;
part.terrainCollider = new PQS_PartCollider();
part.terrainCollider.part = part;
part.terrainCollider.useVelocityCollider = false;
part.terrainCollider.useGravityCollider = false;
part.breakingForce = float.MaxValue;
part.breakingTorque = float.MaxValue;
}
if (update == null || (update != null && update.bodyName == FlightGlobals.ActiveVessel.mainBody.name))
{
Log.Debug("update included");
if (update == null || (update.relTime == RelativeTime.PRESENT))
{
if (newWorldPos != Vector3.zero)
{
Log.Debug("repositioning");
created_vessel.transform.position = newWorldPos;
}
if (newOrbitVel != Vector3.zero)
{
Log.Debug("updating velocity");
created_vessel.ChangeWorldVelocity((-1 * created_vessel.GetObtVelocity()) + (new Vector3(newOrbitVel.x, newOrbitVel.z, newOrbitVel.y))); //xzy?
}
StartCoroutine(restoreVesselState(created_vessel, newWorldPos, newOrbitVel));
//Update FlightCtrlState
if (update != null)
{
if (created_vessel.ctrlState == null)
created_vessel.ctrlState = new FlightCtrlState();
created_vessel.ctrlState.CopyFrom(update.flightCtrlState.getAsFlightCtrlState(0.75f));
}
}
else
{
StartCoroutine(setNewVesselNotInPresent(created_vessel));
}
}
}
if (setTarget)
StartCoroutine(setDockingTarget(created_vessel));
if (wasActive)
StartCoroutine(setActiveVessel(created_vessel, oldVessel));
Log.Debug(created_vessel.id.ToString() + " initialized");
}
else
{
Log.Debug("Failed to create vessel " + vessel_id);
}
}
示例5: LoadVessel
//Also called from QuickSaveLoader
public void LoadVessel(ConfigNode vesselNode)
{
if (vesselNode != null)
{
//Fix the kerbals (Tracking station bug)
checkProtoNodeCrew(ref vesselNode);
//Can be used for debugging incoming vessel config nodes.
//vesselNode.Save(Path.Combine(KSPUtil.ApplicationRootPath, Path.Combine("DMP-RX", Planetarium.GetUniversalTime() + ".txt")));
ProtoVessel currentProto = new ProtoVessel(vesselNode, HighLogic.CurrentGame);
if (currentProto != null)
{
if (currentProto.vesselType == VesselType.SpaceObject)
{
if (currentProto.protoPartSnapshots != null)
{
if (currentProto.protoPartSnapshots.Count == 1)
{
if (currentProto.protoPartSnapshots[0].partName == "PotatoRoid")
{
DarkLog.Debug("Registering remote server asteroid");
AsteroidWorker.fetch.RegisterServerAsteroid(currentProto.vesselID.ToString());
}
}
}
}
if (isProtoVesselInSafetyBubble(currentProto))
{
DarkLog.Debug("Removing protovessel " + currentProto.vesselID.ToString() + ", name: " + currentProto.vesselName + " from server - In safety bubble!");
NetworkWorker.fetch.SendVesselRemove(currentProto.vesselID.ToString(), false);
return;
}
RegisterServerVessel(currentProto.vesselID.ToString());
DarkLog.Debug("Loading " + currentProto.vesselID + ", name: " + currentProto.vesselName + ", type: " + currentProto.vesselType);
foreach (ProtoPartSnapshot part in currentProto.protoPartSnapshots)
{
//This line doesn't actually do anything useful, but if you get this reference, you're officially the most geeky person darklight knows.
part.temperature = ((part.temperature + 273.15f) * 0.8f) - 273.15f;
//Fix up flag URLS.
if (part.flagURL.Length != 0)
{
string flagFile = Path.Combine(Path.Combine(KSPUtil.ApplicationRootPath, "GameData"), part.flagURL + ".png");
if (!File.Exists(flagFile))
{
DarkLog.Debug("Flag '" + part.flagURL + "' doesn't exist, setting to default!");
part.flagURL = "Squad/Flags/default";
}
}
}
bool wasActive = false;
bool wasTarget = false;
if (HighLogic.LoadedScene == GameScenes.FLIGHT)
{
if (FlightGlobals.fetch.VesselTarget != null ? FlightGlobals.fetch.VesselTarget.GetVessel() != null : false)
{
wasTarget = FlightGlobals.fetch.VesselTarget.GetVessel().id == currentProto.vesselID;
}
if (wasTarget)
{
DarkLog.Debug("ProtoVessel update for target vessel!");
}
wasActive = (FlightGlobals.ActiveVessel != null) ? (FlightGlobals.ActiveVessel.id == currentProto.vesselID) : false;
if (wasActive)
{
DarkLog.Debug("ProtoVessel update for active vessel!");
try
{
OrbitPhysicsManager.HoldVesselUnpack(5);
}
catch
{
//Don't care.
}
FlightGlobals.fetch.activeVessel.MakeInactive();
}
}
for (int vesselID = FlightGlobals.fetch.vessels.Count - 1; vesselID >= 0; vesselID--)
{
Vessel oldVessel = FlightGlobals.fetch.vessels[vesselID];
if (oldVessel.id.ToString() == currentProto.vesselID.ToString())
{
KillVessel(oldVessel);
}
}
serverVesselsProtoUpdate[currentProto.vesselID.ToString()] = UnityEngine.Time.realtimeSinceStartup;
currentProto.Load(HighLogic.CurrentGame.flightState);
if (currentProto.vesselRef != null)
{
UpdatePackDistance(currentProto.vesselRef.id.ToString());
if (wasActive)
//.........这里部分代码省略.........
示例6: loadVesselForRendezvous
private bool loadVesselForRendezvous(ProtoVessel placeVessel, Vessel targetVessel)
{
targetVessel.BackupVessel();
placeVessel.orbitSnapShot = targetVessel.protoVessel.orbitSnapShot;
placeVessel.orbitSnapShot.epoch = 0.0;
tempID = rand.Next(1000000000).ToString();
//rename any vessels present with "AdministativeDockingName"
foreach (Vessel ve in FlightGlobals.Vessels)
{
if (ve.vesselName == tempID)
{
Vessel NameVessel = null;
NameVessel = ve;
NameVessel.vesselName = "1";
}
}
placeVessel.vesselID = Guid.NewGuid();
placeVessel.vesselName = tempID;
foreach (ProtoPartSnapshot p in placeVessel.protoPartSnapshots)
{
if (placeVessel.refTransform == p.flightID)
{
p.flightID = (UInt32)rand.Next(1000000000, 2147483647);
placeVessel.refTransform = p.flightID;
}
else
{
p.flightID = (UInt32)rand.Next(1000000000, 2147483647);
}
if (p.protoModuleCrew != null && p.protoModuleCrew.Count() != 0)
{
List<ProtoCrewMember> cl = p.protoModuleCrew;
List<ProtoCrewMember> clc = new List<ProtoCrewMember>(cl);
foreach (ProtoCrewMember c in clc)
{
p.RemoveCrew(c);
//print("remove");
}
}
}
try
{
placeVessel.Load(HighLogic.CurrentGame.flightState);
return true;
}
catch
{
//abortArrival();
//return false;
return true;
}
}
示例7: CreateLode
private void CreateLode(LodeData lodeData)
{
lodeData.altitude = TerrainHeight(lodeData.latitude, lodeData.longitude, lodeData.body);
Vector3d pos = lodeData.body.GetWorldSurfacePosition(lodeData.latitude, lodeData.longitude, lodeData.altitude.Value);
lodeData.orbit = new Orbit(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, lodeData.body);
lodeData.orbit.UpdateFromStateVectors(pos, lodeData.body.getRFrmVel(pos), lodeData.body, Planetarium.GetUniversalTime());
ConfigNode[] partNodes;
ShipConstruct shipConstruct = null;
uint flightId = ShipConstruction.GetUniqueFlightID(HighLogic.CurrentGame.flightState);
partNodes = new ConfigNode[1];
partNodes[0] = ProtoVessel.CreatePartNode(lodeData.craftPart.name, flightId);
DiscoveryLevels discoveryLevel = DiscoveryLevels.Owned;
ConfigNode protoVesselNode = ProtoVessel.CreateVesselNode(lodeData.name, lodeData.vesselType, lodeData.orbit, 0, partNodes);
Vector3d norm = lodeData.body.GetRelSurfaceNVector(lodeData.latitude, lodeData.longitude);
double terrainHeight = 0.0;
if (lodeData.body.pqsController != null)
{
terrainHeight = lodeData.body.pqsController.GetSurfaceHeight(norm) - lodeData.body.pqsController.radius;
}
bool splashed = true && terrainHeight < 0.001;
protoVesselNode.SetValue("sit", (splashed ? Vessel.Situations.SPLASHED : Vessel.Situations.LANDED).ToString());
protoVesselNode.SetValue("landed", (!splashed).ToString());
protoVesselNode.SetValue("splashed", splashed.ToString());
protoVesselNode.SetValue("lat", lodeData.latitude.ToString());
protoVesselNode.SetValue("lon", lodeData.longitude.ToString());
protoVesselNode.SetValue("alt", lodeData.altitude.ToString());
protoVesselNode.SetValue("landedAt", lodeData.body.name);
float lowest = float.MaxValue;
foreach (Collider collider in lodeData.craftPart.partPrefab.GetComponentsInChildren<Collider>())
{
if (collider.gameObject.layer != 21 && collider.enabled)
{
lowest = Mathf.Min(lowest, collider.bounds.min.y);
}
}
if (Mathf.Approximately(lowest,float.MaxValue))
{
lowest = 0;
}
Quaternion normal = Quaternion.LookRotation(new Vector3((float)norm.x, (float)norm.y, (float)norm.z));
Quaternion rotation = Quaternion.identity;
rotation = rotation * Quaternion.FromToRotation(Vector3.up, Vector3.back);
float hgt = (shipConstruct != null ? shipConstruct.parts[0] : lodeData.craftPart.partPrefab).localRoot.attPos0.y - lowest;
protoVesselNode.SetValue("hgt", hgt.ToString());
protoVesselNode.SetValue("rot", KSPUtil.WriteQuaternion(rotation * normal));
Vector3 nrm = (rotation * Vector3.forward);
protoVesselNode.SetValue("nrm", nrm.x + "," + nrm.y + "," + nrm.z);
protoVesselNode.SetValue("prst", false.ToString());
ProtoVessel protoVessel = new ProtoVessel(protoVesselNode, HighLogic.CurrentGame);
protoVessel.Load(HighLogic.CurrentGame.flightState);
}
示例8: CreateVessels
protected bool CreateVessels()
{
if (vesselsCreated)
{
return false;
}
String gameDataDir = KSPUtil.ApplicationRootPath;
gameDataDir = gameDataDir.Replace("\\", "/");
if (!gameDataDir.EndsWith("/"))
{
gameDataDir += "/";
}
gameDataDir += "GameData";
// Spawn the vessel in the game world
foreach (VesselData vesselData in vessels)
{
LoggingUtil.LogVerbose(this, "Spawning a vessel named '" + vesselData.name + "'");
// Set additional info for landed vessels
bool landed = false;
if (!vesselData.orbiting)
{
landed = true;
if (vesselData.altitude == null)
{
vesselData.altitude = LocationUtil.TerrainHeight(vesselData.latitude, vesselData.longitude, vesselData.body);
}
Vector3d pos = vesselData.body.GetWorldSurfacePosition(vesselData.latitude, vesselData.longitude, vesselData.altitude.Value);
vesselData.orbit = new Orbit(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, vesselData.body);
vesselData.orbit.UpdateFromStateVectors(pos, vesselData.body.getRFrmVel(pos), vesselData.body, Planetarium.GetUniversalTime());
}
else
{
vesselData.orbit.referenceBody = vesselData.body;
}
ConfigNode[] partNodes;
UntrackedObjectClass sizeClass;
ShipConstruct shipConstruct = null;
if (!string.IsNullOrEmpty(vesselData.craftURL))
{
// Save the current ShipConstruction ship, otherwise the player will see the spawned ship next time they enter the VAB!
ConfigNode currentShip = ShipConstruction.ShipConfig;
shipConstruct = ShipConstruction.LoadShip(gameDataDir + "/" + vesselData.craftURL);
if (shipConstruct == null)
{
LoggingUtil.LogError(this, "ShipConstruct was null when tried to load '" + vesselData.craftURL +
"' (usually this means the file could not be found).");
continue;
}
// Restore ShipConstruction ship
ShipConstruction.ShipConfig = currentShip;
// Set the name
if (string.IsNullOrEmpty(vesselData.name))
{
vesselData.name = shipConstruct.shipName;
}
// Set some parameters that need to be at the part level
uint missionID = (uint)Guid.NewGuid().GetHashCode();
uint launchID = HighLogic.CurrentGame.launchID++;
foreach (Part p in shipConstruct.parts)
{
p.flightID = ShipConstruction.GetUniqueFlightID(HighLogic.CurrentGame.flightState);
p.missionID = missionID;
p.launchID = launchID;
p.flagURL = vesselData.flagURL ?? HighLogic.CurrentGame.flagURL;
// Had some issues with this being set to -1 for some ships - can't figure out
// why. End result is the vessel exploding, so let's just set it to a positive
// value.
p.temperature = 1.0;
}
// Estimate an object class, numbers are based on the in game description of the
// size classes.
float size = shipConstruct.shipSize.magnitude / 2.0f;
if (size < 4.0f)
{
sizeClass = UntrackedObjectClass.A;
}
else if (size < 7.0f)
{
sizeClass = UntrackedObjectClass.B;
}
else if (size < 12.0f)
{
sizeClass = UntrackedObjectClass.C;
}
else if (size < 18.0f)
{
sizeClass = UntrackedObjectClass.D;
}
//.........这里部分代码省略.........