示例#1
0
        public static Vessel LoadVessel(string seed, ProtoVessel proto)
        {
            PersistentVessel persistentVessel = LoadPersistentVessel(seed, proto);
            Vessel           vessel           = persistentVessel.Spawn();

            return(vessel);
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }
示例#4
0
 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);
 }
示例#5
0
 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());
         }
     }
 }
示例#6
0
        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;
        }