/// <summary> /// Spawns an Instance of an defined StaticModel /// </summary> /// <param name="model"></param> /// <param name="fOffset"></param> /// <param name="vPosition"></param> /// <param name="fAngle"></param> /// <returns></returns> public string SpawnInstance(StaticModel model, float fOffset, Vector3 vPosition) { StaticInstance instance = new StaticInstance(); instance.Orientation = Vector3.up; instance.heighReference = HeightReference.Terrain; instance.VisibilityRange = (PhysicsGlobals.Instance.VesselRangesDefault.flying.unload + 3000); instance.Group = "SaveGame"; instance.RadialPosition = vPosition; instance.model = model; if (instance.model == null) { Log.UserError("LoadFromSave: Canot find model named: " + model.name); instance = null; } //instance.mesh = UnityEngine.Object.Instantiate(instance.model.prefab); instance.CelestialBody = KerbalKonstructs.instance.GetCurrentBody(); instance.RadiusOffset = fOffset; instance.RotationAngle = 0; instance.RefLatitude = KKMath.GetLatitudeInDeg(instance.RadialPosition); instance.RefLongitude = KKMath.GetLongitudeInDeg(instance.RadialPosition); InstanceUtil.CreateGroupCenterIfMissing(instance); bool oldLegacySpawn = KerbalKonstructs.convertLegacyConfigs; instance.Orientate(); instance.Activate(); KerbalKonstructs.convertLegacyConfigs = oldLegacySpawn; KerbalKonstructs.SelectInstance(instance, true); selectedInstance = instance; startPosition = selectedInstance.position; instance.Update(); instance.isInSavegame = true; instance.HighlightObject(XKCDColors.FreshGreen); this.Open(); return(instance.UUID); }
/// <summary> /// Attaches A CommNet or RemoteTech Groundstation to a Static Object instance /// </summary> /// <param name="instance"></param> internal static void AttachGroundStation(StaticInstance instance) { GroundStation myfacility = instance.myFacilities[0] as GroundStation; // we use a messure of 1000km from the settings. float antennaPower = myfacility.TrackingShort * 1000000; if (antennaPower == 0f || instance.Group == "KSCUpgrades") { return; } // add CommNet Groundstations if (KerbalKonstructs.instance.enableCommNet) { Log.Normal("Adding Groundstation: " + instance.Group); if (openCNStations.Contains(instance) == false) { KKCommNetHome commNetGroudStation = instance.gameObject.AddComponent <KKCommNetHome>(); commNetGroudStation.nodeName = instance.CelestialBody.name + " " + instance.Group; commNetGroudStation.comm = new CommNode(); var commNode = commNetGroudStation.comm; commNode.antennaTransmit.power = antennaPower; //commNetGroudStation.enabled = true; openCNStations.Add(instance); CommNet.CommNetNetwork.Reset(); } else { Log.UserError("Adding GroundStations should never be here: (instance allready added when open was called)"); } } // Add RemoteTech Groundstation if (KerbalKonstructs.instance.enableRT) { Guid stationID = RemoteTechAddon.GetGroundStationGuid((instance.CelestialBody.name) + " " + instance.Group); if (stationID == Guid.Empty) { double lng, lat, alt; alt = instance.CelestialBody.pqsController.GetSurfaceHeight(instance.RadialPosition) - instance.CelestialBody.pqsController.radius + 15; var objectPos = instance.CelestialBody.transform.InverseTransformPoint(instance.gameObject.transform.position); lng = KKMath.GetLongitudeInDeg(objectPos); lat = KKMath.GetLatitudeInDeg(objectPos); stationID = RemoteTechAddon.AddGroundstation((instance.CelestialBody.name) + " " + instance.Group, lat, lng, alt, instance.CelestialBody); Log.Normal("Got RTStationID: " + stationID); } openRTStations.Add(instance, stationID); RemoteTechAddon.ChangeGroundStationRange(stationID, antennaPower); } }
public static void LoadBuilding(ConfigNode cfgNode) { StaticInstance instance = new StaticInstance(); instance.isInSavegame = true; instance.Orientation = Vector3.up; instance.heighReference = HeightReference.Terrain; instance.VisibilityRange = (PhysicsGlobals.Instance.VesselRangesDefault.flying.unload + 3000); instance.Group = "SaveGame"; instance.RadialPosition = ConfigNode.ParseVector3(cfgNode.GetValue("Position")); instance.model = StaticDatabase.GetModelByName(cfgNode.GetValue("ModelName")); if (instance.model == null) { Log.UserError("LoadFromSave: Canot find model named: " + cfgNode.GetValue("ModelName")); instance = null; return; } //instance.mesh = UnityEngine.Object.Instantiate(instance.model.prefab); instance.UUID = cfgNode.GetValue("UUID"); instance.CelestialBody = ConfigUtil.GetCelestialBody(cfgNode.GetValue("Body")); instance.RadiusOffset = float.Parse(cfgNode.GetValue("Altitude")); instance.RotationAngle = float.Parse(cfgNode.GetValue("Rotation")); instance.RefLatitude = KKMath.GetLatitudeInDeg(instance.RadialPosition); instance.RefLongitude = KKMath.GetLongitudeInDeg(instance.RadialPosition); InstanceUtil.CreateGroupCenterIfMissing(instance); if (cfgNode.HasValue("IsScanable")) { bool.TryParse(cfgNode.GetValue("IsScanable"), out instance.isScanable); } bool oldLegacySpawn = KerbalKonstructs.convertLegacyConfigs; instance.Orientate(); KerbalKonstructs.convertLegacyConfigs = oldLegacySpawn; }
private SocketInChannel FindChannel(DataSet ds) { SocketInChannel chResult = null; DataRow dr = ds.Tables[0].Rows[0]; foreach (SocketInChannel ch in SocketInboundAdapterConfigMgt.SocketInAdapterConfig.InboundChanels) { if (ch.Rule.QueryCriteria.Type == QueryCriteriaRuleType.SQLStatement || ch.Rule.QueryCriteria.Type == QueryCriteriaRuleType.None) { continue; } List <KKMath.LogicItem> ilist = new List <KKMath.LogicItem>(); int i = 0; for (i = 0; i < ch.Rule.QueryCriteria.MappingList.Count; i++) { SocketInQueryCriteriaItem ci = ch.Rule.QueryCriteria.MappingList[i]; //if ( ! KKMath.OperationIsTrue(dr[ci.ThirdPartyDBPatamter.FieldName].ToString().ToUpper() , ci.Operator , ci.Translating.ConstValue.ToUpper())) // break; QueryCriteriaType type = ci.Type; bool value = KKMath.OperationIsTrue(dr[ci.ThirdPartyDBPatamter.FieldName].ToString().ToUpper(), ci.Operator, ci.Translating.ConstValue.ToUpper()); KKMath.LogicItem item = new KKMath.LogicItem(value, type); ilist.Add(item); } bool ret = KKMath.JoinLogicItem(ilist); if (ret) { chResult = ch; break; } //if (i == ch.Rule.QueryCriteria.MappingList.Count) //{ // chResult = ch; // break; //} } return(chResult); }
void ApplyInputStrings() { //selectedGroup.RefLatitude = double.Parse(refLat); //selectedGroup.RefLongitude = double.Parse(refLng); selectedGroup.RadialPosition = KKMath.GetRadiadFromLatLng(selectedGroup.CelestialBody, selectedGroup.RefLatitude, selectedGroup.RefLongitude); float oldRotation = selectedGroup.RotationAngle; //float tgtheading = float.Parse(headingStr); //float diffHeading = (tgtheading - selectedGroup.heading); //selectedGroup.RotationAngle = oldRotation + diffHeading; ApplySettings(); //selectedGroup.RefLatitude = double.Parse(refLat); //selectedGroup.RefLongitude = double.Parse(refLng); }
private bool CheckCriteria(string fname, FileInChannel ch) { IniFile2 iniF = new IniFile2(fname, FileInboundAdapterConfigMgt.FileInAdapterConfig.InGeneralParams.CodePageName); List <KKMath.LogicItem> ilist = new List <KKMath.LogicItem>(); //int iMatchCount = 0; foreach (FileInQueryCriteriaItem item in ch.Rule.QueryCriteria.MappingList) { string sSectionName = item.ThirdPartyDBPatamter.SectionName; string sFieldName = item.ThirdPartyDBPatamter.FieldName; string criteriaValue = item.Translating.ConstValue; string v = iniF.ReadValue(sSectionName, sFieldName, ""); QueryCriteriaType type = item.Type; bool value = KKMath.OperationIsTrue(v, item.Operator, criteriaValue); KKMath.LogicItem i = new KKMath.LogicItem(value, type); ilist.Add(i); //if (KKMath.OperationIsTrue(v, item.Operator, criteriaValue)) // iMatchCount++; } bool ret = KKMath.JoinLogicItem(ilist); return(ret); //FileInQueryCriteriaItem it = null; //if (ch.Rule.QueryCriteria.MappingList.Count > 0) it = (FileInQueryCriteriaItem)ch.Rule.QueryCriteria.MappingList[0]; //if (iMatchCount == ch.Rule.QueryCriteria.MappingList.Count) // return true; //else if (iMatchCount > 0 && it != null && it.Type == QueryCriteriaType.Or) // return true; //else // return false; }
public static string PlaceStatic(string modelName, string bodyName, double lat, double lng, float alt, float rotation, bool isScanable = false) { StaticModel model = StaticDatabase.GetModelByName(modelName); if (model != null) { StaticInstance instance = new StaticInstance(); instance.isInSavegame = true; instance.heighReference = HeightReference.Terrain; instance.gameObject = UnityEngine.Object.Instantiate(model.prefab); instance.RadiusOffset = alt; instance.CelestialBody = ConfigUtil.GetCelestialBody(bodyName); instance.Group = "Ungrouped"; instance.RadialPosition = KKMath.GetRadiadFromLatLng(instance.CelestialBody, lat, lng); instance.RotationAngle = rotation; instance.Orientation = Vector3.up; instance.VisibilityRange = (PhysicsGlobals.Instance.VesselRangesDefault.flying.unload + 3000); instance.RefLatitude = lat; instance.RefLongitude = lng; instance.model = model; instance.configPath = null; instance.configUrl = null; instance.isScanable = isScanable; instance.SpawnObject(); return(instance.UUID); } Log.UserError("API:PlaceStatic: StaticModel not found in Database: " + modelName); return(null); }
/// <summary> /// Spawns an Instance of an defined StaticModel /// </summary> /// <param name="model"></param> /// <param name="fOffset"></param> /// <param name="vPosition"></param> /// <param name="fAngle"></param> /// <returns></returns> public string SpawnInstance(StaticModel model, float fOffset, Vector3 vPosition) { StaticInstance instance = new StaticInstance(); instance.isInSavegame = true; instance.heighReference = HeightReference.Terrain; instance.gameObject = UnityEngine.Object.Instantiate(model.prefab); instance.RadiusOffset = fOffset; instance.CelestialBody = KerbalKonstructs.instance.getCurrentBody(); instance.Group = "Ungrouped"; instance.RadialPosition = vPosition; instance.RotationAngle = 0; instance.Orientation = Vector3.up; instance.VisibilityRange = (PhysicsGlobals.Instance.VesselRangesDefault.flying.unload + 3000); instance.RefLatitude = KKMath.GetLatitudeInDeg(instance.RadialPosition); instance.RefLongitude = KKMath.GetLongitudeInDeg(instance.RadialPosition); instance.model = model; instance.configPath = null; instance.configUrl = null; instance.SpawnObject(true); KerbalKonstructs.instance.selectedObject = instance; selectedObject = instance; startPosition = selectedObject.gameObject.transform.position; instance.HighlightObject(XKCDColors.FreshGreen); this.Open(); return(instance.UUID); }
internal static void AddPQSCenter2(string tgtName) { CelestialBody body = ConfigUtil.GetCelestialBody("HomeWorld"); var mods = body.pqsController.GetComponentsInChildren <PQSCity2>(true); PQSCity2 tgtPQS = null; foreach (var m in mods) { //Log.Normal("PQS2Name: " + m.name); if (m.name == tgtName) { tgtPQS = m; continue; } } if (tgtPQS == null) { Log.Normal("No BasePQS found: " + tgtName); return; } GroupCenter newGroup = new GroupCenter(); newGroup.isBuiltIn = true; newGroup.Group = tgtName + "_Builtin"; newGroup.CelestialBody = body; newGroup.RotationAngle = (float)tgtPQS.rotation; newGroup.RadialPosition = KKMath.GetRadiadFromLatLng(body, tgtPQS.lat, tgtPQS.lon); //newGroup.RadiusOffset = (float)0; newGroup.RadiusOffset = (float)tgtPQS.alt; newGroup.SeaLevelAsReference = true; //newGroup.repositionToSphere = tgtPQS.repositionToSphere; newGroup.Spawn(); }
void prepNGS() { if (lTargetSite != null) { sTargetSiteName = lTargetSite.LaunchSiteName; fRangeToTarget = LaunchSiteManager.getDistanceToBase(FlightGlobals.ActiveVessel.GetTransform().position, lTargetSite); if (fRangeToTarget > fOldRange) { bClosing = false; } if (fRangeToTarget < fOldRange) { bClosing = true; } var basepos = KerbalKonstructs.instance.GetCurrentBody().transform.InverseTransformPoint(lTargetSite.staticInstance.gameObject.transform.position); //disBaseLat = dBaseLat * 180 / Math.PI; //disBaseLon = dBaseLon * 180 / Math.PI; disBaseLat = KKMath.GetLatitudeInDeg(basepos); disBaseLon = KKMath.GetLongitudeInDeg(basepos); var dBaseLat = disBaseLat * KKMath.deg2rad; var dBaseLon = disBaseLon * KKMath.deg2rad; fOldRange = fRangeToTarget; if (bClosing) { tTextureMiddle = UIMain.tIconOpen; } else { tTextureMiddle = UIMain.tIconClosed; } Vector3 vcraftpos = FlightGlobals.ActiveVessel.GetTransform().position; vCrft = vcraftpos; Vector3 vsitepos = lTargetSite.staticInstance.transform.position; vSPos = vsitepos; Vector3 vHeading = FlightGlobals.ActiveVessel.transform.up; vHead = vHeading; disLat = FlightGlobals.ActiveVessel.latitude; var dLat = disLat / 180 * Math.PI; disLon = FlightGlobals.ActiveVessel.longitude; var dLon = disLon / 180 * Math.PI; var y = Math.Sin(dBaseLon - dLon) * Math.Cos(dBaseLat); var x = (Math.Cos(dLat) * Math.Sin(dBaseLat)) - (Math.Sin(dLat) * Math.Cos(dBaseLat) * Math.Cos(dBaseLon - dLon)); var requiredHeading = Math.Atan2(y, x) * 180 / Math.PI; dreqheading = (requiredHeading + 360) % 360; var diff = (360 + 180 + requiredHeading - FlightGlobals.ship_heading) % 360 - 180; dshipheading = (FlightGlobals.ship_heading + 360) % 360; if (diff > 5) { iCorrection = 2; } else if (diff < -5) { iCorrection = 1; } else { iCorrection = 0; } if (bClosing) { tTextureLeft = UIMain.tLeftOff; tTextureRight = UIMain.tRightOff; } else { tTextureLeft = UIMain.tLeftOn; tTextureRight = UIMain.tRightOn; } if (iCorrection == 1) { tTextureLeft = UIMain.tLeftOn; tTextureRight = UIMain.tRightOff; } if (iCorrection == 2) { tTextureLeft = UIMain.tLeftOff; tTextureRight = UIMain.tRightOn; } } else { tTextureMiddle = UIMain.tIconClosed; tTextureLeft = UIMain.tLeftOff; tTextureRight = UIMain.tRightOff; } }
void drawFacilityManagerWindow(int windowID) { if (selectedInstance.hasFacilities == false || selectedInstance.myFacilities.Count == 0) { selectedInstance = null; this.Close(); } if (!layoutInitialized) { InitializeLayout(); layoutInitialized = true; } GUILayout.BeginHorizontal(); { GUI.enabled = false; GUILayout.Button("-KK-", DeadButton, GUILayout.Height(16)); GUILayout.FlexibleSpace(); GUILayout.Button("Facility Manager", DeadButton, GUILayout.Height(16)); GUILayout.FlexibleSpace(); GUI.enabled = true; if (GUILayout.Button("X", DeadButtonRed, GUILayout.Height(16))) { selectedInstance = null; this.Close(); return; } } GUILayout.EndHorizontal(); GUILayout.Space(1); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(2); if (selectedInstance != null) { sFacilityType = selectedInstance.FacilityType; if (sFacilityType == "GroundStation") { sFacilityName = "Ground Station"; bHalfwindow = true; } else { if (selectedInstance.facilityType != KKFacilityType.None) { sFacilityName = selectedInstance.GetFacility(selectedInstance.facilityType).FacilityName; } else { sFacilityName = selectedInstance.model.title; } } GUILayout.Box("" + sFacilityName, Yellowtext); GUILayout.Space(5); fAlt = selectedInstance.RadiusOffset; objectPos = KerbalKonstructs.instance.GetCurrentBody().transform.InverseTransformPoint(selectedInstance.position); disObjectLat = KKMath.GetLatitudeInDeg(objectPos); disObjectLon = KKMath.GetLongitudeInDeg(objectPos); if (disObjectLon < 0) { disObjectLon = disObjectLon + 360; } GUILayout.BeginHorizontal(); { GUILayout.Space(5); GUILayout.Label("Alt. " + fAlt.ToString("#0.0") + "m", LabelInfo); GUILayout.FlexibleSpace(); GUILayout.Label("Lat. " + disObjectLat.ToString("#0.000"), LabelInfo); GUILayout.FlexibleSpace(); GUILayout.Label("Lon. " + disObjectLon.ToString("#0.000"), LabelInfo); GUILayout.Space(5); } GUILayout.EndHorizontal(); GUILayout.Space(5); sPurpose = ""; switch (selectedInstance.facilityType) { case KKFacilityType.Hangar: { sPurpose = "Craft can be stored in this building for launching from the base at a later date. The building has limited space."; bHalfwindow = true; break; } case KKFacilityType.Barracks: { sPurpose = "This facility provides a temporary home for base-staff. Other facilities can draw staff from the pool available at this facility."; bHalfwindow = true; break; } case KKFacilityType.Research: { sPurpose = "This facility carries out research and generates Science."; bHalfwindow = true; break; } case KKFacilityType.Business: { sPurpose = "This facility carries out business related to the space program in order to generate Funds."; bHalfwindow = true; break; } case KKFacilityType.GroundStation: { sPurpose = "This facility can be a GroundStation for RemoteTech/CommNet"; bHalfwindow = true; break; } case KKFacilityType.Merchant: { sPurpose = "You can buy and sell Resources here"; bHalfwindow = false; break; } case KKFacilityType.Storage: { sPurpose = "You can store Resources here"; bHalfwindow = false; break; } } GUILayout.Label(sPurpose, LabelInfo); GUILayout.Space(2); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(3); SharedInterfaces.OpenCloseFacility(selectedInstance); GUILayout.Space(2); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(3); if (selectedInstance.myFacilities[0].isOpen) { switch (selectedInstance.facilityType) { case KKFacilityType.GroundStation: TrackingStationGUI.TrackingInterface(selectedInstance); break; case KKFacilityType.Hangar: HangarGUI.HangarInterface(selectedInstance); break; case KKFacilityType.Research: case KKFacilityType.Business: ProductionGUI.ProductionInterface(selectedInstance, sFacilityType); break; case KKFacilityType.Merchant: MerchantGUI.MerchantInterface(selectedInstance); break; case KKFacilityType.Storage: StorageGUI.StorageInerface(selectedInstance); break; } GUILayout.Space(2); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(2); StaffGUI.StaffingInterface(selectedInstance); } } GUILayout.FlexibleSpace(); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(3); GUI.DragWindow(new Rect(0, 0, 10000, 10000)); }
private void DrawSpaceCenters() { if (!KerbalKonstructs.instance.mapShowRecovery) { return; } body = PlanetariumCamera.fetch.target.GetReferenceBody(); displayingTooltip2 = false; // Do tracking stations first foreach (CustomSpaceCenter customSpaceCenter in spaceCenters) { if ((mapHideIconsBehindBody) && (IsOccluded(customSpaceCenter.gameObject.transform.position, body))) { continue; } cscIsOpen = customSpaceCenter.isOpen; if (KerbalKonstructs.instance.mapShowRecovery) { cscDisplay = true; } if (!KerbalKonstructs.instance.mapShowClosed && !cscIsOpen) { cscDisplay = false; } if (!KerbalKonstructs.instance.mapShowOpen && cscIsOpen) { cscDisplay = false; } if (!cscDisplay) { continue; } Vector3 pos = MapView.MapCamera.GetComponent <Camera>().WorldToScreenPoint(ScaledSpace.LocalToScaledSpace(customSpaceCenter.gameObject.transform.position)); Rect screenRect6 = new Rect((pos.x - 8), (Screen.height - pos.y) - 8, 16, 16); // Distance between camera and spawnpoint sort of float fPosZ = pos.z; float fRadarRadius = 12800 / fPosZ; if (fRadarRadius > 15) { GUI.DrawTexture(screenRect6, UIMain.iconRecoveryBase, ScaleMode.ScaleToFit, true); } if (screenRect6.Contains(Event.current.mousePosition) && !displayingTooltip2) { var objectpos2 = customSpaceCenter.staticInstance.CelestialBody.transform.InverseTransformPoint(customSpaceCenter.gameObject.transform.position); var disObjectLat2 = KKMath.GetLatitudeInDeg(objectpos2); var disObjectLon2 = KKMath.GetLongitudeInDeg(objectpos2); if (disObjectLon2 < 0) { disObjectLon2 = disObjectLon2 + 360; } //Only display one tooltip at a time if (customSpaceCenter.isFromFacility) { DisplayMapIconToolTip(customSpaceCenter.staticInstance.GetFacility(KKFacilityType.RecoveryBase).FacilityName + "\n(Lat." + disObjectLat2.ToString("#0.00") + "/ Lon." + disObjectLon2.ToString("#0.00") + ")", pos); } else { DisplayMapIconToolTip(customSpaceCenter.staticInstance.launchSite.LaunchSiteName + "\n(Lat." + disObjectLat2.ToString("#0.00") + "/ Lon." + disObjectLon2.ToString("#0.00") + ")", pos); } if (Event.current.type == EventType.mouseDown && Event.current.button == 0) { if (customSpaceCenter.isFromFacility) { //# = customSpaceCenter.staticInstance; FacilityManager.selectedInstance = customSpaceCenter.staticInstance; FacilityManager.instance.Open(); } else { BaseManager.setSelectedSite(customSpaceCenter.staticInstance.launchSite); BaseManager.instance.Open(); } } } } }
/// <summary> /// Draws the groundStation icons on the map /// </summary> public void drawTrackingStations() { if (CareerUtils.isSandboxGame) { KerbalKonstructs.instance.mapShowClosed = true; KerbalKonstructs.instance.mapShowOpen = true; } if (!KerbalKonstructs.instance.mapShowOpenT) { return; } body = PlanetariumCamera.fetch.target.GetReferenceBody(); displayingTooltip2 = false; // Do tracking stations first for (int i = 0; i < groundStations.Count; i++) { groundStation = groundStations[i]; if ((mapHideIconsBehindBody) && (IsOccluded(groundStation.gameObject.transform.position, body))) { continue; } isOpen = ((GroundStation)groundStation.myFacilities[0]).isOpen; if (KerbalKonstructs.instance.mapShowOpenT) { display2 = true; } if (!KerbalKonstructs.instance.mapShowClosed && !isOpen) { display2 = false; } if (!KerbalKonstructs.instance.mapShowOpen && isOpen) { display2 = false; } if (!display2) { continue; } Vector3 pos = MapView.MapCamera.GetComponent <Camera>().WorldToScreenPoint(ScaledSpace.LocalToScaledSpace(groundStation.gameObject.transform.position)); Rect screenRect6 = new Rect((pos.x - 8), (Screen.height - pos.y) - 8, 16, 16); // Distance between camera and spawnpoint sort of float fPosZ = pos.z; float fRadarRadius = 12800 / fPosZ; if (fRadarRadius > 15) { GUI.DrawTexture(screenRect6, UIMain.TrackingStationIcon, ScaleMode.ScaleToFit, true); } if (screenRect6.Contains(Event.current.mousePosition) && !displayingTooltip2) { var objectpos2 = groundStation.CelestialBody.transform.InverseTransformPoint(groundStation.gameObject.transform.position); var disObjectLat2 = KKMath.GetLatitudeInDeg(objectpos2); var disObjectLon2 = KKMath.GetLongitudeInDeg(objectpos2); if (disObjectLon2 < 0) { disObjectLon2 = disObjectLon2 + 360; } //Only display one tooltip at a time DisplayMapIconToolTip("Tracking Station " + "\n(Lat." + disObjectLat2.ToString("#0.00") + "/ Lon." + disObjectLon2.ToString("#0.00") + ")", pos); if (Event.current.type == EventType.mouseDown && Event.current.button == 0) { selectedFacility = groundStation; FacilityManager.selectedInstance = groundStation; FacilityManager.instance.Open(); } } } }
void UpdateUI() { if (selectedInstance.hasFacilities == false || selectedInstance.myFacilities.Count == 0) { selectedInstance = null; this.Close(); } string facilityType = selectedInstance.FacilityType; if (facilityType == "GroundStation") { facilityName.Text(KKLocalization.GroundStation); } else { if (selectedInstance.facilityType != KKFacilityType.None) { facilityName.Text(selectedInstance.GetFacility(selectedInstance.facilityType).FacilityName); } else { facilityName.Text(selectedInstance.model.title); } } Vector3 pos = KerbalKonstructs.instance.GetCurrentBody().transform.InverseTransformPoint(selectedInstance.position); facilityPosition.Altitude(selectedInstance.RadiusOffset).Latitude(KKMath.GetLatitudeInDeg(pos)).Longitude(KKMath.GetLongitudeInDeg(pos)); UpdateOpenClose(); bool enableTrackingStation = false; bool enableHangar = false; bool enableProduction = false; bool enableMerchant = false; bool enableStorage = false; switch (selectedInstance.facilityType) { case KKFacilityType.Hangar: facilityPurpose.Text(KKLocalization.FacilityPurposeHangar); enableHangar = true; break; case KKFacilityType.Barracks: facilityPurpose.Text(KKLocalization.FacilityPurposeBarracks); break; case KKFacilityType.Research: facilityPurpose.Text(KKLocalization.FacilityPurposeResearch); enableProduction = true; break; case KKFacilityType.Business: facilityPurpose.Text(KKLocalization.FacilityPurposeBusiness); enableProduction = true; break; case KKFacilityType.GroundStation: facilityPurpose.Text(KKLocalization.FacilityPurposeGroundStation); enableTrackingStation = true; break; case KKFacilityType.Merchant: facilityPurpose.Text(KKLocalization.FacilityPurposeMerchant); enableMerchant = true; break; case KKFacilityType.Storage: facilityPurpose.Text(KKLocalization.FacilityPurposeStorage); enableStorage = true; break; } bool isOpen = selectedInstance.myFacilities[0].isOpen; tractingStation.SetActive(isOpen && enableTrackingStation); hangar.SetActive(isOpen && enableHangar); production.SetActive(isOpen && enableProduction); merchant.SetActive(isOpen && enableMerchant); storage.SetActive(isOpen && enableStorage); staff.SetActive(isOpen); if (isOpen) { switch (selectedInstance.facilityType) { case KKFacilityType.GroundStation: tractingStation.UpdateUI(selectedInstance); break; case KKFacilityType.Hangar: hangar.UpdateUI(selectedInstance); break; case KKFacilityType.Research: case KKFacilityType.Business: production.UpdateUI(selectedInstance); break; case KKFacilityType.Merchant: merchant.UpdateUI(selectedInstance); break; case KKFacilityType.Storage: storage.UpdateUI(selectedInstance); break; } staff.UpdateUI(selectedInstance); } }
void drawFacilityManagerWindow(int windowID) { DeadButton = new GUIStyle(GUI.skin.button); DeadButton.normal.background = null; DeadButton.hover.background = null; DeadButton.active.background = null; DeadButton.focused.background = null; DeadButton.normal.textColor = Color.white; DeadButton.hover.textColor = Color.white; DeadButton.active.textColor = Color.white; DeadButton.focused.textColor = Color.white; DeadButton.fontSize = 14; DeadButton.fontStyle = FontStyle.Bold; DeadButtonRed = new GUIStyle(GUI.skin.button); DeadButtonRed.normal.background = null; DeadButtonRed.hover.background = null; DeadButtonRed.active.background = null; DeadButtonRed.focused.background = null; DeadButtonRed.normal.textColor = Color.red; DeadButtonRed.hover.textColor = Color.yellow; DeadButtonRed.active.textColor = Color.red; DeadButtonRed.focused.textColor = Color.red; DeadButtonRed.fontSize = 12; DeadButtonRed.fontStyle = FontStyle.Bold; BoxNoBorder = new GUIStyle(GUI.skin.box); BoxNoBorder.normal.background = null; BoxNoBorder.normal.textColor = Color.white; Yellowtext = new GUIStyle(GUI.skin.box); Yellowtext.normal.textColor = Color.yellow; Yellowtext.normal.background = null; LabelInfo = new GUIStyle(GUI.skin.label); LabelInfo.normal.background = null; LabelInfo.normal.textColor = Color.white; LabelInfo.fontSize = 13; LabelInfo.fontStyle = FontStyle.Bold; LabelInfo.padding.left = 3; LabelInfo.padding.top = 0; LabelInfo.padding.bottom = 0; ButtonSmallText = new GUIStyle(GUI.skin.button); ButtonSmallText.fontSize = 12; ButtonSmallText.fontStyle = FontStyle.Normal; GUILayout.BeginHorizontal(); { GUI.enabled = false; GUILayout.Button("-KK-", DeadButton, GUILayout.Height(16)); GUILayout.FlexibleSpace(); GUILayout.Button("Facility Manager", DeadButton, GUILayout.Height(16)); GUILayout.FlexibleSpace(); GUI.enabled = true; if (GUILayout.Button("X", DeadButtonRed, GUILayout.Height(16))) { selectedFacility = null; this.Close(); return; } } GUILayout.EndHorizontal(); GUILayout.Space(1); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(2); if (selectedFacility != null) { sFacilityType = (string)selectedFacility.FacilityType; if (sFacilityType == "GroundStation") { sFacilityName = "Ground Station"; bHalfwindow = true; } else { sFacilityName = selectedFacility.model.title; } GUILayout.Box("" + sFacilityName, Yellowtext); GUILayout.Space(5); fAlt = selectedFacility.RadiusOffset; objectPos = KerbalKonstructs.instance.getCurrentBody().transform.InverseTransformPoint(selectedFacility.gameObject.transform.position); //dObjectLat = NavUtils.GetLatitude(ObjectPos); //dObjectLon = NavUtils.GetLongitude(ObjectPos); //disObjectLat = dObjectLat * 180 / Math.PI; //disObjectLon = dObjectLon * 180 / Math.PI; disObjectLat = KKMath.GetLatitudeInDeg(objectPos); disObjectLon = KKMath.GetLongitudeInDeg(objectPos); if (disObjectLon < 0) { disObjectLon = disObjectLon + 360; } GUILayout.BeginHorizontal(); { GUILayout.Space(5); GUILayout.Label("Alt. " + fAlt.ToString("#0.0") + "m", LabelInfo); GUILayout.FlexibleSpace(); GUILayout.Label("Lat. " + disObjectLat.ToString("#0.000"), LabelInfo); GUILayout.FlexibleSpace(); GUILayout.Label("Lon. " + disObjectLon.ToString("#0.000"), LabelInfo); GUILayout.Space(5); } GUILayout.EndHorizontal(); GUILayout.Space(5); string sPurpose = ""; if (sFacilityType == "Hangar") { sPurpose = "Craft can be stored in this building for launching from the base at a later date. The building has limited space."; bHalfwindow = true; } else if (sFacilityType == "Barracks") { sPurpose = "This facility provides a temporary home for base-staff. Other facilities can draw staff from the pool available at this facility."; bHalfwindow = true; } else if (sFacilityType == "RadarStation") { sPurpose = "This facility tracks craft in the planet's atmosphere at a limited range. It provides bonuses for recovery operations by the nearest open base."; bHalfwindow = true; } else if (sFacilityType == "Research") { sPurpose = "This facility carries out research and generates Science."; bHalfwindow = true; } else if (sFacilityType == "Business") { sPurpose = "This facility carries out business related to the space program in order to generate Funds."; bHalfwindow = true; } else if (sFacilityType == "TrackingStation") { sPurpose = "Thís Facility can be a GroundStation for RemoteTech/CommNet"; bHalfwindow = true; } else if (sFacilityType == "FuelTanks") { sPurpose = "This facility stores fuel for craft."; bHalfwindow = false; } GUILayout.Label(sPurpose, LabelInfo); GUILayout.Space(2); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(3); SharedInterfaces.OpenCloseFacility(selectedFacility); isOpen2 = selectedFacility.myFacilities[0].isOpen; GUILayout.Space(2); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(3); GUI.enabled = isOpen2; if (sFacilityType == "GroundStation") { TrackingStationGUI.TrackingInterface(selectedFacility); } if (sFacilityType == "Hangar") { HangarGUI.HangarInterface(selectedFacility); } if (sFacilityType == "Research" || sFacilityType == "Business") { ProductionGUI.ProductionInterface(selectedFacility, sFacilityType); } fLqFMax = selectedFacility.model.LqFMax; fOxFMax = selectedFacility.model.OxFMax; fMoFMax = selectedFacility.model.MoFMax; if (fLqFMax > 0 || fOxFMax > 0 || fMoFMax > 0 || sFacilityType == "FuelTanks") { FuelTanksGUI.FuelTanksInterface(selectedFacility); } GUI.enabled = true; GUILayout.Space(2); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(2); GUI.enabled = isOpen2; StaffGUI.StaffingInterface(selectedFacility); GUI.enabled = true; } GUILayout.FlexibleSpace(); GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(3); GUI.DragWindow(new Rect(0, 0, 10000, 10000)); }