// Returns a specific Launchsite, keyed by site.name public static LaunchSite getLaunchSiteByName(string sSiteName, bool bRemember = false) { if (bRemember) { if (sBaseMem == sSiteName) { return(launchsitemem); } } List <LaunchSite> sites = LaunchSiteManager.getLaunchSites(); foreach (LaunchSite site in sites) { if (site.LaunchSiteName == sSiteName) { if (bRemember) { sBaseMem = sSiteName; launchsitemem = site; } return(site); } } return(null); }
/// <summary> /// Registers the a created LaunchSite to the PSystemSetup and LaunchSiteManager /// </summary> /// <param name="site"></param> internal static void RegisterLaunchSite(LaunchSite site) { if (!string.IsNullOrEmpty(site.LaunchSiteName) && site.parentInstance.gameObject.transform.Find(site.LaunchPadTransform) != null) { site.parentInstance.gameObject.transform.name = site.LaunchSiteName; site.parentInstance.gameObject.name = site.LaunchSiteName; List <PSystemSetup.SpaceCenterFacility> facilities = PSystemSetup.Instance.SpaceCenterFacilities.ToList(); if (facilities.Where(fac => fac.facilityName == site.LaunchSiteName).FirstOrDefault() == null) { //Log.Normal("Registering LaunchSite: " + site.LaunchSiteName); PSystemSetup.SpaceCenterFacility newFacility = new PSystemSetup.SpaceCenterFacility(); newFacility.name = ""; newFacility.facilityName = site.LaunchSiteName; newFacility.facilityPQS = site.parentInstance.CelestialBody.pqsController; newFacility.facilityTransformName = site.parentInstance.gameObject.name; // newFacility.facilityTransform = site.lsGameObject.transform.Find(site.LaunchPadTransform); // newFacility.facilityTransformName = instance.gameObject.transform.name; newFacility.pqsName = site.body.pqsController.name; PSystemSetup.SpaceCenterFacility.SpawnPoint spawnPoint = new PSystemSetup.SpaceCenterFacility.SpawnPoint(); spawnPoint.name = site.LaunchSiteName; spawnPoint.spawnTransformURL = site.LaunchPadTransform; newFacility.spawnPoints = new PSystemSetup.SpaceCenterFacility.SpawnPoint[1]; newFacility.spawnPoints[0] = spawnPoint; facilities.Add(newFacility); PSystemSetup.Instance.SpaceCenterFacilities = facilities.ToArray(); site.facility = newFacility; launchSites.Add(site); } else { Log.Error("Launch site " + site.name + " already exists."); } MethodInfo updateSitesMI = PSystemSetup.Instance.GetType().GetMethod("SetupFacilities", BindingFlags.NonPublic | BindingFlags.Instance); if (updateSitesMI == null) { Log.UserError("You are screwed. Failed to find SetupFacilities()."); } else { updateSitesMI.Invoke(PSystemSetup.Instance, null); } if (site.parentInstance.gameObject != null) { CustomSpaceCenter.CreateFromLaunchsite(site); } } else { Log.UserWarning("Launch pad transform \"" + site.LaunchPadTransform + "\" missing for " + site.LaunchSiteName); } }
/// <summary> /// Creates a new LaunchSite out of a cfg-node and Registers it with RegisterLaunchSite /// </summary> /// <param name="instance"></param> /// <param name="cfgNode"></param> internal static void CreateLaunchSite(StaticInstance instance, ConfigNode cfgNode) { LaunchSite newSite = instance.gameObject.AddComponent <LaunchSite>().ParseConfig(cfgNode) as LaunchSite; instance.hasLauchSites = true; instance.launchSite = newSite; newSite.parentInstance = instance; RegisterLaunchSite(newSite); }
internal static void DeleteLaunchSite(LaunchSite site2delete) { if (launchSites.Contains(site2delete)) { launchSites.Remove(site2delete); CustomSpaceCenter csc = SpaceCenterManager.GetCSC(site2delete.LaunchSiteName); if (csc != null) { SpaceCenterManager.spaceCenters.Remove(csc); } } }
// Pokes KSP to change the launchsite to use. There's near hackery here again that may get broken by Squad // This only works because they use multiple variables to store the same value, basically its black magic // Original author: medsouz public static void setLaunchSite(LaunchSite site) { if (site.facility != null) { if (EditorDriver.editorFacility.Equals(EditorFacility.SPH)) { site.facility.name = "Runway"; } else { site.facility.name = "LaunchPad"; } } currentLaunchSite = site.LaunchSiteName; EditorLogic.fetch.launchSiteName = site.LaunchSiteName; }
public static void CreateFromLaunchsite(LaunchSite site) { StaticInstance parentinstance = site.parentInstance; if (parentinstance != null) { var csc = new CustomSpaceCenter(); csc.SpaceCenterName = site.LaunchSiteName; csc.staticInstance = parentinstance; csc.gameObject = site.parentInstance.gameObject; SpaceCenterManager.addSpaceCenter(csc); } else { Log.Normal("CreateFromLaunchsite failed because staticObject is null."); } }
//// Closes all launchsites. Necessary when leaving a career game and going to the main menu //public static void setAllLaunchsitesClosed() //{ // List<LaunchSite> sites = LaunchSiteManager.getLaunchSites(); // foreach (LaunchSite site in sites) // { // site.OpenCloseState = "Closed"; // } //} // Returns the distance in m from a position to a specified Launchsite public static float getDistanceToBase(Vector3 position, LaunchSite lTarget) { float flRange = 0f; List <LaunchSite> sites = LaunchSiteManager.getLaunchSites(); foreach (LaunchSite site in sites) { if (site == lTarget) { var radialposition = site.lsGameObject.transform.position; var dist = Vector3.Distance(position, radialposition); flRange = dist; } } return(flRange); }
internal override KKFacility ParseConfig(ConfigNode node) { LaunchSite launchSite = base.ParseConfig(node) as LaunchSite; launchSite.lsGameObject = launchSite.gameObject; // this is might be slow launchSite.parentInstance = InstanceUtil.GetStaticInstanceForGameObject(lsGameObject); launchSite.body = parentInstance.CelestialBody; if (!string.IsNullOrEmpty(LaunchSiteLogo)) { logo = GameDatabase.Instance.GetTexture(LaunchSiteLogo, false); if (logo == null) { logo = GameDatabase.Instance.GetTexture(launchSite.parentInstance.model.path + "/" + launchSite.LaunchSiteLogo, false); } } // use default logo if (logo == null) { logo = GameDatabase.Instance.GetTexture("KerbalKonstructs/Assets/DefaultSiteLogo", false); } if (!string.IsNullOrEmpty(LaunchSiteIcon)) { icon = GameDatabase.Instance.GetTexture(LaunchSiteIcon, false); if (icon == null) { icon = GameDatabase.Instance.GetTexture(launchSite.parentInstance.model.path + "/" + launchSite.LaunchSiteIcon, false); } } refLon = (float)Math.Round(KKMath.GetLongitudeInDeg(launchSite.parentInstance.RadialPosition), 2); refLat = (float)Math.Round(KKMath.GetLatitudeInDeg(launchSite.parentInstance.RadialPosition), 2); refAlt = launchSite.parentInstance.RadiusOffset; return(launchSite); }
// Returns the nearest Launchsite to a position and range in m to the Launchsite, regardless of whether it is open or closed public static void getNearestBase(Vector3 position, out string sBase, out string sBase2, out float flRange, out LaunchSite lSite, out LaunchSite lSite2) { SpaceCenter KSC = SpaceCenter.Instance; var smallestDist = Vector3.Distance(KSC.gameObject.transform.position, position); var lastSmallestDist = Vector3.Distance(KSC.gameObject.transform.position, position); string sNearestBase = ""; LaunchSite lTargetSite = null; LaunchSite lLastSite = null; LaunchSite lKSC = null; string sLastNearest = ""; List <LaunchSite> basesites = LaunchSiteManager.getLaunchSites(); foreach (LaunchSite site in basesites) { if (site.lsGameObject == null) { continue; } var radialposition = site.lsGameObject.transform.position; var dist = Vector3.Distance(position, radialposition); if (radialposition == position) { continue; } if (site.LaunchSiteName == "Runway" || site.LaunchSiteName == "LaunchPad") { lKSC = site; } else { if ((float)dist < (float)smallestDist) { sLastNearest = sNearestBase; lLastSite = lTargetSite; lastSmallestDist = smallestDist; sNearestBase = site.LaunchSiteName; smallestDist = dist; lTargetSite = site; } else if (dist < lastSmallestDist) { sLastNearest = site.LaunchSiteName; lastSmallestDist = dist; lLastSite = site; } } } if (sNearestBase == "") { sNearestBase = "KSC"; lTargetSite = lKSC; } if (sLastNearest == "") { sLastNearest = "KSC"; lLastSite = lKSC; } rangeNearestBase = (float)smallestDist; sBase = sNearestBase; sBase2 = sLastNearest; flRange = rangeNearestBase; lSite = lTargetSite; lSite2 = lLastSite; }
// Returns the nearest open Launchsite to a position and range to the Launchsite in m // The basic ATC feature is in here for now public static void GetNearestOpenBase(Vector3 position, out string sBase, out float flRange, out LaunchSite lNearest) { SpaceCenter KSC = SpaceCenter.Instance; var smallestDist = Vector3.Distance(KSC.gameObject.transform.position, position); string sNearestBase = ""; LaunchSite lNearestBase = null; LaunchSite lKSC = null; List <LaunchSite> basesites = LaunchSiteManager.getLaunchSites(); foreach (LaunchSite site in basesites) { if (site.isOpen) { var radialposition = site.lsGameObject.transform.position; var dist = Vector3.Distance(position, radialposition); if (site.LaunchSiteName == "Runway") { if (lNearestBase == null) { lNearestBase = site; } lKSC = site; } else if (site.LaunchSiteName != "LaunchPad") { if ((float)dist < (float)smallestDist) { { sNearestBase = site.LaunchSiteName; lNearestBase = site; smallestDist = dist; } } } else { lKSC = site; } } } if (sNearestBase == "") { sNearestBase = "KSC"; lNearestBase = lKSC; } rangeNearestOpenBase = (float)smallestDist; // Air traffic control messaging if (LandingGuideUI.instance.IsOpen()) { if (sNearestBase != nearestOpenBase) { if (rangeNearestOpenBase < 25000) { nearestOpenBase = sNearestBase; MessageSystemButton.MessageButtonColor color = MessageSystemButton.MessageButtonColor.BLUE; MessageSystem.Message m = new MessageSystem.Message("KK ATC", "You have entered the airspace of " + sNearestBase + " ATC. Please keep this channel open and obey all signal lights. Thank you. " + sNearestBase + " Air Traffic Control out.", color, MessageSystemButton.ButtonIcons.MESSAGE); MessageSystem.Instance.AddMessage(m); } else if (nearestOpenBase != "") { // you have left ... MessageSystemButton.MessageButtonColor color = MessageSystemButton.MessageButtonColor.GREEN; MessageSystem.Message m = new MessageSystem.Message("KK ATC", "You are now leaving the airspace of " + sNearestBase + ". Safe journey. " + sNearestBase + " Air Traffic Control out.", color, MessageSystemButton.ButtonIcons.MESSAGE); MessageSystem.Instance.AddMessage(m); nearestOpenBase = ""; } } } sBase = sNearestBase; flRange = rangeNearestOpenBase; lNearest = lNearestBase; }