예제 #1
0
    private void CreatePartsFromBuild(Double3 launchPadPosition)
    {
        Build.BuildSave buildSave = JsonUtility.FromJson <Build.BuildSave>(Ref.LoadJsonString(Saving.SaveKey.ToLaunch));
        PartGrid.PositionForLaunch(buildSave.parts, this.partDatabase, buildSave.rotation);
        List <Part> list  = CreateRocket.CreateBuildParts((launchPadPosition - Ref.positionOffset).toVector3, buildSave, this.partDatabase);
        List <Part> list2 = new List <Part>();

        for (int i = 0; i < list.Count; i++)
        {
            if (list[i].GetComponent <ControlModule>() != null)
            {
                list2.Add(list[i]);
            }
        }
        list2.AddRange(list);
        List <Vessel> list3 = this.CreateVesselsFromParts(list2, Vector2.zero, 0f, new Vessel.Throttle(false, 0.65f), new List <string>());

        Ref.mainVessel = null;
        Ref.mainVessel = list3[0];
        Ref.map.SelectVessel(list3[0], false);
        for (int j = 0; j < list.Count; j++)
        {
            list[j].UpdateConnected();
        }
        Ref.map.UpdateVesselsMapIcons();
        this.UpdateVesselButtons();
        this.RepositionFuelIcons();
    }
예제 #2
0
    public static List <Part> CreateBuildParts(Vector3 createPos, Build.BuildSave toLaunch, PartDatabase partDatabase)
    {
        List <Part>       list  = new List <Part>();
        List <PlacedPart> list2 = Build.BuildSave.PlacedPartSave.FromSave(toLaunch.parts, partDatabase);

        foreach (PlacedPart current in list2)
        {
            Part component = UnityEngine.Object.Instantiate <Transform>(current.partData.prefab, createPos + (Vector3)current.position, Quaternion.identity).GetComponent <Part>();
            component.orientation = current.orientation.DeepCopy();
            Orientation.ApplyOrientation(component.transform, current.orientation);
            list.Add(component);
        }
        for (int i = 0; i < list2.Count; i++)
        {
            for (int j = 0; j < list2[i].partData.attachmentSurfaces.Length; j++)
            {
                for (int k = i + 1; k < list2.Count; k++)
                {
                    for (int l = 0; l < list2[k].partData.attachmentSurfaces.Length; l++)
                    {
                        if (PlacedPart.SurfacesConnect(list2[i], list2[i].partData.attachmentSurfaces[j], list2[k], list2[k].partData.attachmentSurfaces[l]) > 0f)
                        {
                            bool fuelFlow = list2[i].partData.attachmentSurfaces[j].fuelFlow && list2[k].partData.attachmentSurfaces[l].fuelFlow;
                            new Part.Joint(list2[k].position - list2[i].position, list[i], list[k], j, l, fuelFlow);
                        }
                    }
                }
            }
        }
        for (int m = 0; m < list.Count; m++)
        {
            list[m].UpdateConnected();
        }
        return(list);
    }
예제 #3
0
    public static List <Part> CreateBuildParts(Vector3 createPos, Build.BuildSave toLaunch, PartDatabase partDatabase)
    {
        List <Part>       list  = new List <Part>();
        List <PlacedPart> list2 = Build.BuildSave.PlacedPartSave.FromSave(toLaunch.parts, partDatabase);

        for (int i = 0; i < list2.Count; i++)
        {
            if (list2[i].partData == null || list2[i].partData.prefab == null || (!Ref.hasPartsExpansion && list2[i].partData.inFull))
            {
                list2.RemoveAt(i);
                i--;
            }
            else
            {
                for (int j = i + 1; j < list2.Count; j++)
                {
                    if (PlacedPart.IsOverplaing(list2[i], list2[j]))
                    {
                        list2.RemoveAt(i);
                        i--;
                    }
                }
            }
        }
        foreach (PlacedPart placedPart in list2)
        {
            Part component = UnityEngine.Object.Instantiate <Transform>(placedPart.partData.prefab, createPos + (Vector3)placedPart.position, Quaternion.identity).GetComponent <Part>();
            component.orientation = placedPart.orientation.DeepCopy();
            Orientation.ApplyOrientation(component.transform, placedPart.orientation);
            list.Add(component);
        }
        for (int k = 0; k < list2.Count; k++)
        {
            for (int l = 0; l < list2[k].partData.attachmentSurfaces.Length; l++)
            {
                for (int m = k + 1; m < list2.Count; m++)
                {
                    for (int n = 0; n < list2[m].partData.attachmentSurfaces.Length; n++)
                    {
                        if (PlacedPart.SurfacesConnect(list2[k], list2[k].partData.attachmentSurfaces[l], list2[m], list2[m].partData.attachmentSurfaces[n]) > 0f)
                        {
                            bool fuelFlow = list2[k].partData.attachmentSurfaces[l].fuelFlow && list2[m].partData.attachmentSurfaces[n].fuelFlow;
                            new Part.Joint(list2[m].position - list2[k].position, list[k], list[m], l, n, fuelFlow);
                        }
                    }
                }
            }
        }
        return(list);
    }
예제 #4
0
 public MyVesselSavedHook(Build.BuildSave save)
 {
     this.save = save;
 }