public static Vessel LoadVessel(string seed, ProtoVessel proto) { PersistentVessel persistentVessel = LoadPersistentVessel(seed, proto); Vessel vessel = persistentVessel.Spawn(); return(vessel); }
public static PersistentVessel CreateVessel(string seed, ProtoVessel vessel) { Guid id = vessel.vesselID; if (id == Guid.Empty) { Debugger.LogWarning("Generated GUID for " + vessel.vesselName); id = Guid.NewGuid(); vessel.vesselID = id; } else { foreach (KeyValuePair <string, Dictionary <Guid, PersistentVessel> > kvp in persistentVesselLookup) { // Make sure we don't exist in another system if (kvp.Value.ContainsKey(id)) { PersistentVessel persistentVessel = kvp.Value [id]; if (kvp.Key != seed) { Debugger.LogWarning("Found " + persistentVessel.name + " in seed " + kvp.Key + ". Moving to seed " + seed + "."); persistentVessel.Warp(seed); } return(persistentVessel); } } } return(new PersistentVessel(seed, vessel)); }
public static PersistentVessel LoadPersistentVessel(string seed, ProtoVessel proto) { PersistentVessel persistentVessel = PersistentVessel.CreateVessel(seed, proto); Guid id = persistentVessel.id; vesselSeeds [id] = seed; persistentVessels [id] = persistentVessel; return(persistentVessel); }
public static bool RemoveVesselFromSystem(Vessel toRemove) { Debugger.LogWarning("Despawning " + toRemove.vesselName); if (toRemove.loaded) { Debugger.LogError(toRemove.vesselName + " is loaded!"); } else { Guid id = toRemove.id; if (persistentVessels.ContainsKey(id)) { PersistentVessel vessel = persistentVessels [id]; return(vessel.Despawn()); } else { Debugger.LogError(toRemove.vesselName + " was never cached as a PersistentVessel!"); } } return(false); }
public static void ClearNonSystemVessels() { foreach (Vessel v in GameObject.FindObjectsOfType <Vessel>()) { Guid id = v.id; if (vesselSeeds.ContainsKey(id)) { string seed = vesselSeeds [id]; PersistentVessel persistentVessel = persistentVessels [id]; if (persistentVessel.loaded) { if (seed != WarpDrive.seedString) { Debugger.LogWarning("Vessel is in the wrong seed!"); } } } else { Debugger.LogError("Vessel loaded but not cached: " + v.vesselName + ", ID: " + id.ToString()); } } }
public static void WarpVessel(PersistentVessel vessel, string warpSeed) { VesselType vesselType = vessel.vesselType; bool canWarp = vesselType != VesselType.Debris && vesselType != VesselType.EVA && vesselType != VesselType.Flag && vesselType != VesselType.SpaceObject && vesselType != VesselType.Unknown; string seed = vessel.seed; if (warpSeed == seed || !canWarp || !vessel.loaded) { if (!canWarp) { Debugger.Log(vessel.name + " was the wrong type of vessel to warp."); } return; } Guid id = vessel.id; // Remove ourselves from the old system if (seedGUIDLookup.ContainsKey(seed)) { seedGUIDLookup [seed].Remove(id); } if (persistentVesselLookup.ContainsKey(seed)) { persistentVesselLookup [seed].Remove(id); } // Change the vessel seed vessel.seed = warpSeed; // Add ourselves to the new system // PersistentVessel lookup Dictionary <Guid, PersistentVessel> seedPersistentVessels = null; if (persistentVesselLookup.ContainsKey(warpSeed)) { seedPersistentVessels = persistentVesselLookup [warpSeed]; } else { seedPersistentVessels = new Dictionary <Guid, PersistentVessel> (); } seedPersistentVessels [id] = vessel; persistentVesselLookup [warpSeed] = seedPersistentVessels; // Vessel Lookup Dictionary <Guid, Vessel> vesselLookup = null; if (seedGUIDLookup.ContainsKey(warpSeed)) { vesselLookup = seedGUIDLookup [warpSeed]; } else { vesselLookup = new Dictionary <Guid, Vessel> (); } vesselLookup [id] = vessel.protoVessel.vesselRef; seedGUIDLookup [warpSeed] = vesselLookup; vesselSeedLookup [id] = seed; }