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(); } } } }
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); }
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); }
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]); } } }
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); }
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); }