예제 #1
0
 private static void LoadPartsData(GameSaving.VesselSave vesselToLoad, Part[] loadedParts)
 {
     for (int i = 0; i < vesselToLoad.parts.Length; i++)
     {
         Part part = loadedParts[i];
         bool flag = !(part == null);
         if (flag)
         {
             Part.Save save       = vesselToLoad.parts[i];
             Module[]  components = part.GetComponents <Module>();
             Array.Reverse(components);
             Array.Reverse(save.moduleSaves);
             for (int j = 0; j < Mathf.Min(part.modules.Length, save.moduleSaves.Length); j++)
             {
                 components[j].Load(save.moduleSaves[j]);
             }
         }
     }
     for (int k = 0; k < vesselToLoad.parts.Length; k++)
     {
         bool flag2 = !(loadedParts[k] == null);
         if (flag2)
         {
             Module[] components2 = loadedParts[k].GetComponents <Module>();
             for (int l = 0; l < Mathf.Min(loadedParts[k].modules.Length, vesselToLoad.parts[k].moduleSaves.Length); l++)
             {
                 components2[l].OnPartLoaded();
             }
         }
     }
 }
예제 #2
0
    private static Vessel LoadVessel(GameSaving.VesselSave vesselToLoad)
    {
        List <Part> list = new List <Part>(GameSaving.LoadParts(vesselToLoad));

        Part[] loadedParts = list.ToArray();
        GameSaving.LoadPartsData(vesselToLoad, loadedParts);
        list.Remove(null);
        Orientation.ApplyOrientation(list[0].transform, list[0].orientation);
        Vessel vessel = Vessel.CreateVessel(list[0].GetComponent <Part>(), Vector2.zero, vesselToLoad.angularVelocity, vesselToLoad.throttle, vesselToLoad.vesselArchivments, Ref.map.mapRefs[Ref.GetPlanetByName(vesselToLoad.adress)].holder);

        for (int i = 0; i < vessel.partsManager.parts.Count; i++)
        {
            if (vessel.partsManager.parts[i] != null)
            {
                vessel.partsManager.parts[i].UpdateConnected();
            }
        }
        vessel.partsManager.UpdateCenterOfMass();
        vessel.partsManager.ReCenter();
        vessel.transform.position    = (vesselToLoad.globalPosition - Ref.positionOffset).toVector2;
        vessel.transform.eulerAngles = new Vector3(0f, 0f, vesselToLoad.rotation);
        if (vesselToLoad.state == Vessel.State.RealTime)
        {
            vessel.partsManager.rb2d.velocity = (vesselToLoad.globalVelocity - Ref.velocityOffset).toVector2;
        }
        else if (vesselToLoad.state == Vessel.State.OnRails || vesselToLoad.state == Vessel.State.OnRailsUnloaded)
        {
            vessel.orbits = Orbit.CalculateOrbits(vesselToLoad.globalPosition, vesselToLoad.globalVelocity, Ref.GetPlanetByName(vesselToLoad.adress));
            vessel.partsManager.rb2d.bodyType = RigidbodyType2D.Static;
            vessel.state = Vessel.State.OnRails;
            if (vessel.state == Vessel.State.OnRailsUnloaded)
            {
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
            }
            if (double.IsNaN(vessel.orbits[0].meanMotion))
            {
                MonoBehaviour.print("Cannot orbit NaN, went stationary instead");
                vessel.orbits.Clear();
                vessel.stationaryData.posToPlane = vesselToLoad.globalPosition;
                vessel.stationaryData.planet     = Ref.GetPlanetByName(vesselToLoad.adress);
                vessel.state = Vessel.State.Stationary;
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
                vessel.mapIcon.localPosition = (vessel.stationaryData.posToPlane / 10000.0).toVector3;
            }
        }
        else
        {
            vessel.stationaryData.posToPlane = vesselToLoad.globalPosition;
            vessel.stationaryData.planet     = Ref.GetPlanetByName(vesselToLoad.adress);
            vessel.state = Vessel.State.Stationary;
            if (vesselToLoad.state == Vessel.State.StationaryUnloaded)
            {
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
            }
            vessel.mapIcon.localPosition = (vessel.stationaryData.posToPlane / 10000.0).toVector3;
        }
        vessel.mapIcon.rotation = vessel.partsManager.parts[0].transform.rotation;
        vessel.RCS = vesselToLoad.RCS;
        return(vessel);
    }
예제 #3
0
    private static Part[] LoadParts(GameSaving.VesselSave vesselToLoad)
    {
        int num = vesselToLoad.parts.Length;

        PartData[] array  = new PartData[num];
        Part[]     array2 = new Part[num];
        for (int i = 0; i < num; i++)
        {
            array[i]              = Ref.controller.partDatabase.GetPartByName(vesselToLoad.parts[i].partName);
            array2[i]             = UnityEngine.Object.Instantiate <Transform>(array[i].prefab, Vector3.zero, Quaternion.identity).GetComponent <Part>();
            array2[i].orientation = vesselToLoad.parts[i].orientation;
        }
        for (int j = 0; j < vesselToLoad.joints.Length; j++)
        {
            Part.Joint.Save save = vesselToLoad.joints[j];
            if (save.fromPartId != -1 && save.toPartId != -1)
            {
                new Part.Joint(save.anchor, array2[save.fromPartId], array2[save.toPartId], save.fromSurfaceIndex, save.toSurfaceIndex, save.fuelFlow);
            }
        }
        for (int k = 0; k < num; k++)
        {
            array2[k].UpdateConnected();
        }
        return(array2);
    }
예제 #4
0
 private static void LoadPartsData(GameSaving.VesselSave vesselToLoad, Part[] loadedParts)
 {
     for (int i = 0; i < vesselToLoad.parts.Length; i++)
     {
         Part      part       = loadedParts[i];
         Part.Save save       = vesselToLoad.parts[i];
         Module[]  components = part.GetComponents <Module>();
         Array.Reverse(components);
         Array.Reverse(save.moduleSaves);
         for (int j = 0; j < part.modules.Length; j++)
         {
             components[j].Load(save.moduleSaves[j]);
         }
     }
 }
예제 #5
0
    private static Vessel LoadVessel(GameSaving.VesselSave vesselToLoad)
    {
        Part[] array  = GameSaving.LoadParts(vesselToLoad);
        Vessel vessel = Vessel.CreateVessel(array[0].GetComponent <Part>(), Vector2.zero, vesselToLoad.angularVelocity, vesselToLoad.throttle, vesselToLoad.vesselArchivments, Ref.GetPlanetByName(vesselToLoad.adress).mapRefs.holder);

        vessel.partsManager.UpdateCenterOfMass();
        vessel.partsManager.ReCenter();
        vessel.transform.position    = (vesselToLoad.globalPosition - Ref.positionOffset).toVector2;
        vessel.transform.eulerAngles = new Vector3(0f, 0f, vesselToLoad.rotation);
        if (vesselToLoad.state == Vessel.State.RealTime)
        {
            vessel.partsManager.rb2d.velocity = (vesselToLoad.globalVelocity - Ref.velocityOffset).toVector2;
        }
        else if (vesselToLoad.state == Vessel.State.OnRails || vesselToLoad.state == Vessel.State.OnRailsUnloaded)
        {
            vessel.orbits = Orbit.CalculateOrbits(vesselToLoad.globalPosition, vesselToLoad.globalVelocity, Ref.GetPlanetByName(vesselToLoad.adress));
            vessel.partsManager.rb2d.bodyType = RigidbodyType2D.Static;
            vessel.state = Vessel.State.OnRails;
            if (vessel.state == Vessel.State.OnRailsUnloaded)
            {
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
            }
            if (double.IsNaN(vessel.orbits[0].meanMotion))
            {
                MonoBehaviour.print("Cannot orbit NaN, went stationary instead");
                vessel.orbits.Clear();
                vessel.stationaryData.posToPlane = vesselToLoad.globalPosition;
                vessel.stationaryData.planet     = Ref.GetPlanetByName(vesselToLoad.adress);
                vessel.state = Vessel.State.Stationary;
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
                vessel.mapIcon.localPosition = (vessel.stationaryData.posToPlane / 10000.0).toVector3;
            }
        }
        else
        {
            vessel.stationaryData.posToPlane = vesselToLoad.globalPosition;
            vessel.stationaryData.planet     = Ref.GetPlanetByName(vesselToLoad.adress);
            vessel.state = Vessel.State.Stationary;
            if (vesselToLoad.state == Vessel.State.StationaryUnloaded)
            {
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
            }
            vessel.mapIcon.localPosition = (vessel.stationaryData.posToPlane / 10000.0).toVector3;
        }
        GameSaving.LoadPartsData(vesselToLoad, array);
        vessel.mapIcon.rotation = vessel.partsManager.parts[0].transform.rotation;
        return(vessel);
    }
예제 #6
0
    private static Part[] LoadParts(GameSaving.VesselSave vesselToLoad)
    {
        int num = vesselToLoad.parts.Length;

        Part[] array = new Part[num];
        for (int i = 0; i < num; i++)
        {
            PartData partByName = Ref.controller.partDatabase.GetPartByName(vesselToLoad.parts[i].partName);
            bool     flag       = !(partByName == null);
            if (flag)
            {
                array[i]             = Instantiate(partByName.prefab, Vector3.zero, Quaternion.identity).GetComponent <Part>();
                array[i].orientation = vesselToLoad.parts[i].orientation;

                array[i].partData.tags = new Dictionary <string, object>();
                try
                {
                    array[i].partData.GUID = new Guid(vesselToLoad.parts[i].GUID);
                } catch
                {
                    array[i].partData.GUID = Guid.NewGuid();
                }
                try
                {
                    if (vesselToLoad.parts[i].tagsString != null)
                    {
                        foreach (string text in vesselToLoad.parts[i].tagsString.Split('|'))
                        {
                            if (!(text == ""))
                            {
                                Type   type = Type.GetType(text.Split('#')[0]);
                                string key  = text.Split('#')[1];

                                object obj = JsonUtility.FromJson(text.Split('#')[2], type);

                                array[i].partData.tags.Add(key, obj);
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    ModLoader.mainConsole.logError(e);
                }
            }
        }
        for (int j = 0; j < vesselToLoad.joints.Length; j++)
        {
            Part.Joint.Save save  = vesselToLoad.joints[j];
            bool            flag2 = save.fromPartId != -1 && save.toPartId != -1;
            if (flag2)
            {
                bool flag3 = !(array[save.fromPartId] == null) && !(array[save.toPartId] == null);
                if (flag3)
                {
                    new Part.Joint(save.anchor, array[save.fromPartId], array[save.toPartId], save.fromSurfaceIndex, save.toSurfaceIndex, save.fuelFlow);
                }
            }
        }
        return(array);
    }