Beispiel #1
0
 public QuickLaunchMission(QuickLaunchVessel parent, string filePath, ProtoVessel orbitProtoVessel)
 {
     missionFilePath   = filePath;
     missionName       = Path.GetFileNameWithoutExtension(filePath);
     protoVessel       = orbitProtoVessel;
     quickLaunchVessel = parent;
 }
        private void InitQuickLaunchVessels()
        {
            quickLaunchVessels = new Dictionary <int, QuickLaunchVessel>();

            string directory = GetHangarPath();

            if (!Directory.Exists(directory))
            {
                return;
            }
            string[] launchVehicleDirectories = Directory.GetDirectories(directory);
            foreach (string launchVehiceDirectory in launchVehicleDirectories)
            {
                string launchVehicleFile = Path.Combine(launchVehiceDirectory, LAUNCHFILENAME + ".craft");
                if (!File.Exists(launchVehicleFile))
                {
                    continue;
                }
                ConfigNode         prevLaunchRootNode    = ConfigNode.Load(launchVehicleFile);
                ProtoVessel        prevlaunchProtoVessel = new ProtoVessel(prevLaunchRootNode, HighLogic.CurrentGame);
                ProtoLaunchVehicle previousLaunchVehicle = null;
                ProtoPayload       previousPayload       = null;

                string[] parts      = launchVehiceDirectory.Split(Path.DirectorySeparatorChar);
                string   vesselName = parts[parts.Length - 1];
                Debug.Log(string.Format("[BeenThereDoneThat]: Loading vessel: {0}", vesselName));

                if (!QuickLauncher.Instance.Split(prevlaunchProtoVessel, out previousLaunchVehicle, out previousPayload))
                {
                    continue;
                }
                previousLaunchVehicle.DebugVehicle();
                QuickLaunchVessel quickLaunchVessel = new QuickLaunchVessel(vesselName, prevlaunchProtoVessel, previousLaunchVehicle);
                quickLaunchVessels[quickLaunchVessel.GetHashCode()] = quickLaunchVessel;

                string missionsPath = Path.Combine(launchVehiceDirectory, "Missions");
                if (!Directory.Exists(missionsPath))
                {
                    continue;
                }
                foreach (string missionFilePath in Directory.GetFiles(missionsPath))
                {
                    ConfigNode         orbitRootNode      = ConfigNode.Load(missionFilePath);
                    ProtoVessel        orbitProtoVessel   = new ProtoVessel(orbitRootNode, HighLogic.CurrentGame);
                    ProtoLaunchVehicle orbitLaunchVehicle = null;
                    ProtoPayload       orbitPayload       = null;

                    string missionName = Path.GetFileNameWithoutExtension(missionFilePath);
                    Debug.Log(string.Format("[BeenThereDoneThat]: Loading mission: {0}", missionName));

                    if (QuickLauncher.Instance.Split(orbitProtoVessel, out orbitLaunchVehicle, out orbitPayload))
                    {
                        quickLaunchVessel.AddMission(missionFilePath, orbitProtoVessel);
                    }
                }
            }
        }
        public static QuickLaunchMissionDialog Create(Callback onDismissCallback, QuickLaunchVessel quickLaunchVessel, Vessel vessel)
        {
            GameObject gameObject = new GameObject("BeenThereDoneThat mission start menu");
            QuickLaunchMissionDialog quickLaunchMissionDialog = gameObject.AddComponent <QuickLaunchMissionDialog>();

            quickLaunchMissionDialog.onDismissCallback = onDismissCallback;
            quickLaunchMissionDialog.skin = UISkinManager.GetSkin("MainMenuSkin");
            quickLaunchMissionDialog.quickLaunchVessel    = quickLaunchVessel;
            quickLaunchMissionDialog.vessel               = vessel;
            quickLaunchMissionDialog.selectedMissionIndex = -1;

            return(quickLaunchMissionDialog);
        }
        public void OnStartMission(Vessel vessel)
        {
            if (vessel.situation != Vessel.Situations.PRELAUNCH)
            {
                ScreenMessages.PostScreenMessage("Can't start, must be pre-launch!", 4, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            QuickLaunchMissionTracker tracker       = vessel.GetComponent <QuickLaunchMissionTracker>();
            LaunchVehicle             launchVehicle = null;
            Payload payload = null;

            if (tracker.isTracking)
            {
                ScreenMessages.PostScreenMessage("Already tracking!", 4, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            if (!QuickLauncher.Instance.Split(vessel.parts, out launchVehicle, out payload))
            {
                ScreenMessages.PostScreenMessage("No payload separator available", 4, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            QuickLaunchVessel quickLaunchVessel = null;

            if (quickLaunchVessels.TryGetValue(launchVehicle.GetHashCode(), out quickLaunchVessel))
            {
                string vesselName = quickLaunchVessel.name;
                tracker.StartTracking(vesselName);
                ScreenMessages.PostScreenMessage(string.Format("Started tracking {0}", vesselName), 4, ScreenMessageStyle.UPPER_CENTER);
                return;
            }
            else
            {
                startMissionDialog = StartMissionDialog.Create(OnStartMissionDialogDismiss, vessel, launchVehicle, tracker);
            }
        }
        public void OnQuickLaunchMission(Vessel vessel)
        {
            LaunchVehicle launchVehicle = null;
            Payload       payload       = null;

            if (!QuickLauncher.Instance.Split(vessel.parts, out launchVehicle, out payload))
            {
                ScreenMessages.PostScreenMessage("No payload separator available", 4, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            int key = launchVehicle.GetHashCode();

            if (!quickLaunchVessels.ContainsKey(key))
            {
                ScreenMessages.PostScreenMessage("No missions available", 4, ScreenMessageStyle.UPPER_CENTER);
                return;
            }

            QuickLaunchVessel quickLaunchVessel = quickLaunchVessels[key];

            quickLaunchMissionDialog = QuickLaunchMissionDialog.Create(OnQuickLaunchDialogDismissed, quickLaunchVessel, vessel);
        }