void OnGUI() { if (!HighLogic.LoadedSceneIsEditor || BDACategory == null) { return; } bool shouldOpen = BDArmorySettings.SHOW_CATEGORIES && FilterByFunctionCategory.button.activeButton.Value && BDACategory.button.activeButton.Value; if (shouldOpen && !expanded) { ExpandPartSelector(offset); expanded = true; } else if (!shouldOpen && expanded) { ExpandPartSelector(-offset); expanded = false; } if (SettingsOpen && Event.current.type == EventType.MouseDown && !SettingsWindow.Contains(Event.current.mousePosition)) { SettingsOpen = false; BDArmorySetup.SaveConfig(); } if (SettingsOpen) { SettingsWindow = GUI.Window(9476026, SettingsWindow, DrawSettingsWindow, "", BDArmorySetup.BDGuiSkin.window); } if (EditorLogic.fetch != null) { if (SettingsOpen && SettingsWindow.Contains(new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y)) && !CameraMouseLook.GetMouseLook()) { EditorLogic.fetch.Lock(false, false, false, "BDA_CATEGORY_LOCK"); } else { EditorLogic.fetch.Unlock("BDA_CATEGORY_LOCK"); } } }
internal void WindowRwr(int windowID) { GUI.DragWindow(new Rect(0, 0, BDArmorySetup.WindowRectRwr.width - 18, 30)); if (GUI.Button(new Rect(BDArmorySetup.WindowRectRwr.width - 18, 2, 16, 16), "X", GUI.skin.button)) { displayRWR = false; BDArmorySetup.SaveConfig(); } GUI.BeginGroup(new Rect(BorderSize / 2, HeaderSize + (BorderSize / 2), RwrDisplayRect.width, RwrDisplayRect.height)); //GUI.DragWindow(RwrDisplayRect); GUI.DrawTexture(RwrDisplayRect, VesselRadarData.omniBgTexture, ScaleMode.StretchToFill, false); float pingSize = 32 * BDArmorySettings.RWR_WINDOW_SCALE; for (int i = 0; i < dataCount; i++) { Vector2 pingPosition = (Vector2)pingsData[i].position; //pingPosition = Vector2.MoveTowards(displayRect.center, pingPosition, displayRect.center.x - (pingSize/2)); Rect pingRect = new Rect(pingPosition.x - (pingSize / 2), pingPosition.y - (pingSize / 2), pingSize, pingSize); if (!pingsData[i].exists) { continue; } if (pingsData[i].signalStrength == (float)RWRThreatTypes.MissileLock) //Hack! Evil misuse of field signalstrength... { GUI.DrawTexture(pingRect, rwrMissileTexture, ScaleMode.StretchToFill, true); } else { GUI.DrawTexture(pingRect, rwrDiamondTexture, ScaleMode.StretchToFill, true); GUI.Label(pingRect, iconLabels[Mathf.RoundToInt(pingsData[i].signalStrength)], rwrIconLabelStyle); //Hack! Evil misuse of field signalstrength... } } List <TargetSignatureData> .Enumerator lw = launchWarnings.GetEnumerator(); while (lw.MoveNext()) { Vector2 pingPosition = (Vector2)lw.Current.position; //pingPosition = Vector2.MoveTowards(displayRect.center, pingPosition, displayRect.center.x - (pingSize/2)); Rect pingRect = new Rect(pingPosition.x - (pingSize / 2), pingPosition.y - (pingSize / 2), pingSize, pingSize); GUI.DrawTexture(pingRect, rwrMissileTexture, ScaleMode.StretchToFill, true); } lw.Dispose(); GUI.EndGroup(); // Resizing code block. RWRresizeRect = new Rect(BDArmorySetup.WindowRectRwr.width - 18, BDArmorySetup.WindowRectRwr.height - 18, 16, 16); GUI.DrawTexture(RWRresizeRect, Misc.Misc.resizeTexture, ScaleMode.StretchToFill, true); if (Event.current.type == EventType.MouseDown && RWRresizeRect.Contains(Event.current.mousePosition)) { resizingWindow = true; } if (Event.current.type == EventType.Repaint && resizingWindow) { if (Mouse.delta.x != 0 || Mouse.delta.y != 0) { float diff = Mouse.delta.x + Mouse.delta.y; UpdateRWRScale(diff); BDArmorySetup.ResizeRwrWindow(BDArmorySettings.RWR_WINDOW_SCALE); } } // End Resizing code. BDGUIUtils.RepositionWindow(ref BDArmorySetup.WindowRectRwr); }
private void WindowVesselSpawner(int id) { GUI.DragWindow(new Rect(0, 0, _windowWidth - _buttonSize - _margin, _buttonSize + _margin)); if (GUI.Button(new Rect(_windowWidth - _buttonSize - (_margin - 2), _margin, _buttonSize - 2, _buttonSize - 2), "X", BDArmorySetup.BDGuiSkin.button)) { BDArmorySetup.Instance.showVesselSpawnerGUI = false; BDArmorySetup.SaveConfig(); } float line = 0.25f; var rects = new List <Rect>(); if (GUI.Button(SLineRect(++line), (BDArmorySettings.SHOW_SPAWN_OPTIONS ? "Hide " : "Show ") + Localizer.Format("#LOC_BDArmory_Settings_SpawnOptions"), BDArmorySettings.SHOW_SPAWN_OPTIONS ? BDArmorySetup.BDGuiSkin.box : BDArmorySetup.BDGuiSkin.button))//Show/hide spawn options { BDArmorySettings.SHOW_SPAWN_OPTIONS = !BDArmorySettings.SHOW_SPAWN_OPTIONS; } if (BDArmorySettings.SHOW_SPAWN_OPTIONS) { if (BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE) { // Absolute distance var value = BDArmorySettings.VESSEL_SPAWN_DISTANCE < 100 ? BDArmorySettings.VESSEL_SPAWN_DISTANCE / 10 : BDArmorySettings.VESSEL_SPAWN_DISTANCE < 1000 ? 9 + BDArmorySettings.VESSEL_SPAWN_DISTANCE / 100 : BDArmorySettings.VESSEL_SPAWN_DISTANCE < 10000 ? 18 + BDArmorySettings.VESSEL_SPAWN_DISTANCE / 1000 : 26 + BDArmorySettings.VESSEL_SPAWN_DISTANCE / 5000; var displayValue = BDArmorySettings.VESSEL_SPAWN_DISTANCE < 1000 ? BDArmorySettings.VESSEL_SPAWN_DISTANCE.ToString("0") + "m" : (BDArmorySettings.VESSEL_SPAWN_DISTANCE / 1000).ToString("0") + "km"; GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_SpawnDistance")}: ({displayValue})", leftLabel);//Spawn Distance value = Mathf.Round(GUI.HorizontalSlider(SRightSliderRect(line), value, 1f, 30f)); BDArmorySettings.VESSEL_SPAWN_DISTANCE = value < 10 ? 10 * value : value < 19 ? 100 * (value - 9) : value < 28 ? 1000 * (value - 18) : 5000 * (value - 26); } else { // Distance factor GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_SpawnDistanceFactor")}: ({BDArmorySettings.VESSEL_SPAWN_DISTANCE_FACTOR})", leftLabel); //Spawn Distance Factor BDArmorySettings.VESSEL_SPAWN_DISTANCE_FACTOR = Mathf.Round(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.VESSEL_SPAWN_DISTANCE_FACTOR / 10f, 1f, 10f) * 10f); } GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_SpawnEaseInSpeed")}: ({BDArmorySettings.VESSEL_SPAWN_EASE_IN_SPEED})", leftLabel);//Spawn Ease In Speed BDArmorySettings.VESSEL_SPAWN_EASE_IN_SPEED = Mathf.Round(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.VESSEL_SPAWN_EASE_IN_SPEED, 0.1f, 1f) * 10f) / 10f; GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_SpawnConcurrentVessels")}: ({(BDArmorySettings.VESSEL_SPAWN_CONCURRENT_VESSELS > 0 ? BDArmorySettings.VESSEL_SPAWN_CONCURRENT_VESSELS.ToString() : "Inf")})", leftLabel);//Max Concurrent Vessels (CS) BDArmorySettings.VESSEL_SPAWN_CONCURRENT_VESSELS = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.VESSEL_SPAWN_CONCURRENT_VESSELS, 0f, 20f)); GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_SpawnLivesPerVessel")}: ({(BDArmorySettings.VESSEL_SPAWN_LIVES_PER_VESSEL > 0 ? BDArmorySettings.VESSEL_SPAWN_LIVES_PER_VESSEL.ToString() : "Inf")})", leftLabel);//Respawns (CS) BDArmorySettings.VESSEL_SPAWN_LIVES_PER_VESSEL = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.VESSEL_SPAWN_LIVES_PER_VESSEL, 0f, 20f)); var outOfAmmoKillTimeStr = "never"; if (BDArmorySettings.OUT_OF_AMMO_KILL_TIME > -1 && BDArmorySettings.OUT_OF_AMMO_KILL_TIME < 60) { outOfAmmoKillTimeStr = BDArmorySettings.OUT_OF_AMMO_KILL_TIME.ToString("G0") + "s"; } else if (BDArmorySettings.OUT_OF_AMMO_KILL_TIME > 59 && BDArmorySettings.OUT_OF_AMMO_KILL_TIME < 61) { outOfAmmoKillTimeStr = "1min"; } else if (BDArmorySettings.OUT_OF_AMMO_KILL_TIME > 60) { outOfAmmoKillTimeStr = Mathf.RoundToInt(BDArmorySettings.OUT_OF_AMMO_KILL_TIME / 60f).ToString("G0") + "mins"; } GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_OutOfAmmoKillTime")}: ({outOfAmmoKillTimeStr})", leftLabel); // Out of ammo kill timer for continuous spawning mode. float outOfAmmoKillTime; switch (Mathf.RoundToInt(BDArmorySettings.OUT_OF_AMMO_KILL_TIME)) { case 0: outOfAmmoKillTime = 1f; break; case 10: outOfAmmoKillTime = 2f; break; case 20: outOfAmmoKillTime = 3f; break; case 30: outOfAmmoKillTime = 4f; break; case 45: outOfAmmoKillTime = 5f; break; case 60: outOfAmmoKillTime = 6f; break; case 120: outOfAmmoKillTime = 7f; break; case 300: outOfAmmoKillTime = 8f; break; default: outOfAmmoKillTime = 9f; break; } outOfAmmoKillTime = GUI.HorizontalSlider(SRightSliderRect(line), outOfAmmoKillTime, 1f, 9f); switch (Mathf.RoundToInt(outOfAmmoKillTime)) { case 1: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = 0f; // 0s break; case 2: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = 10f; // 10s break; case 3: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = 20f; // 20s break; case 4: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = 30f; // 30s break; case 5: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = 45f; // 45s break; case 6: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = 60f; // 1 min break; case 7: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = 120f; // 2 mins break; case 8: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = 300f; // 5 mins break; default: BDArmorySettings.OUT_OF_AMMO_KILL_TIME = -1f; // Never break; } string fillSeats = ""; switch (BDArmorySettings.VESSEL_SPAWN_FILL_SEATS) { case 0: fillSeats = Localizer.Format("#LOC_BDArmory_Settings_SpawnFillSeats_Minimal"); break; case 1: fillSeats = Localizer.Format("#LOC_BDArmory_Settings_SpawnFillSeats_Default"); break; case 2: fillSeats = Localizer.Format("#LOC_BDArmory_Settings_SpawnFillSeats_Cabins"); break; } GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_SpawnFillSeats")}: ({fillSeats})", leftLabel); // Fill Seats BDArmorySettings.VESSEL_SPAWN_FILL_SEATS = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.VESSEL_SPAWN_FILL_SEATS, 0f, 2f)); string numberOfTeams; switch (BDArmorySettings.VESSEL_SPAWN_NUMBER_OF_TEAMS) { case 0: // FFA numberOfTeams = Localizer.Format("#LOC_BDArmory_Settings_Teams_FFA"); break; case 1: // Folders numberOfTeams = Localizer.Format("#LOC_BDArmory_Settings_Teams_Folders"); break; default: // Specified directly numberOfTeams = BDArmorySettings.VESSEL_SPAWN_NUMBER_OF_TEAMS.ToString("0"); break; } GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_Teams")}: ({numberOfTeams})", leftLabel); // Number of teams. BDArmorySettings.VESSEL_SPAWN_NUMBER_OF_TEAMS = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.VESSEL_SPAWN_NUMBER_OF_TEAMS, 0f, 10f)); GUI.Label(SLeftRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_SpawnFilesLocation")} (AutoSpawn/): ", leftLabel); // Craft files location BDArmorySettings.VESSEL_SPAWN_FILES_LOCATION = GUI.TextField(SRightRect(line), BDArmorySettings.VESSEL_SPAWN_FILES_LOCATION); BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE = GUI.Toggle(SLeftRect(++line), BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE, Localizer.Format("#LOC_BDArmory_Settings_SpawnDistanceToggle")); // Toggle between distance factor and absolute distance. BDArmorySettings.VESSEL_SPAWN_REASSIGN_TEAMS = GUI.Toggle(SRightRect(line), BDArmorySettings.VESSEL_SPAWN_REASSIGN_TEAMS, Localizer.Format("#LOC_BDArmory_Settings_SpawnReassignTeams")); // Reassign Teams BDArmorySettings.VESSEL_SPAWN_CONTINUE_SINGLE_SPAWNING = GUI.Toggle(SLeftRect(++line), BDArmorySettings.VESSEL_SPAWN_CONTINUE_SINGLE_SPAWNING, Localizer.Format("#LOC_BDArmory_Settings_SpawnContinueSingleSpawning")); // Spawn craft again after single spawn competition finishes. BDArmorySettings.VESSEL_SPAWN_DUMP_LOG_EVERY_SPAWN = GUI.Toggle(SRightRect(line), BDArmorySettings.VESSEL_SPAWN_DUMP_LOG_EVERY_SPAWN, Localizer.Format("#LOC_BDArmory_Settings_SpawnDumpLogsEverySpawn")); //Dump logs every spawn. BDArmorySettings.VESSEL_SPAWN_RANDOM_ORDER = GUI.Toggle(SLeftRect(++line), BDArmorySettings.VESSEL_SPAWN_RANDOM_ORDER, Localizer.Format("#LOC_BDArmory_Settings_SpawnRandomOrder")); // Toggle between random spawn order or fixed. if (GUI.Button(SLeftButtonRect(++line), Localizer.Format("#LOC_BDArmory_Settings_VesselSpawnGeoCoords"), BDArmorySetup.BDGuiSkin.button)) //"Vessel Spawning Location" { Ray ray = new Ray(FlightCamera.fetch.mainCamera.transform.position, FlightCamera.fetch.mainCamera.transform.forward); RaycastHit hit; if (Physics.Raycast(ray, out hit, 10000, 1 << 15)) { BDArmorySettings.VESSEL_SPAWN_GEOCOORDS = FlightGlobals.currentMainBody.GetLatitudeAndLongitude(hit.point); spawnFields["lat"].currentValue = BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x; spawnFields["lon"].currentValue = BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y; } } rects = SRight3Rects(line); spawnFields["lat"].tryParseValue(GUI.TextField(rects[0], spawnFields["lat"].possibleValue, 8)); spawnFields["lon"].tryParseValue(GUI.TextField(rects[1], spawnFields["lon"].possibleValue, 8)); spawnFields["alt"].tryParseValue(GUI.TextField(rects[2], spawnFields["alt"].possibleValue, 8)); BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x = spawnFields["lat"].currentValue; BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y = spawnFields["lon"].currentValue; BDArmorySettings.VESSEL_SPAWN_ALTITUDE = (float)spawnFields["alt"].currentValue; if (GUI.Button(SLeftButtonRect(++line), Localizer.Format("#LOC_BDArmory_Settings_ClearDebrisNow"), BDArmorySetup.BDGuiSkin.button)) { // Clean up debris now BDACompetitionMode.Instance.RemoveDebrisNow(); } if (GUI.Button(SRightButtonRect(line), Localizer.Format("#LOC_BDArmory_Settings_ClearBystandersNow"), BDArmorySetup.BDGuiSkin.button)) { // Clean up bystanders now BDACompetitionMode.Instance.RemoveNonCompetitors(true); } line += 0.3f; } if (GUI.Button(SLineRect(++line), (BDArmorySettings.SHOW_SPAWN_LOCATIONS ? "Hide " : "Show ") + Localizer.Format("#LOC_BDArmory_Settings_SpawnLocations"), BDArmorySettings.SHOW_SPAWN_LOCATIONS ? BDArmorySetup.BDGuiSkin.box : BDArmorySetup.BDGuiSkin.button))//Show/hide spawn locations { BDArmorySettings.SHOW_SPAWN_LOCATIONS = !BDArmorySettings.SHOW_SPAWN_LOCATIONS; } if (BDArmorySettings.SHOW_SPAWN_LOCATIONS) { line++; int i = 0; foreach (var spawnLocation in VesselSpawner.spawnLocations) { if (GUI.Button(SQuarterRect(line, i++), spawnLocation.name, BDArmorySetup.BDGuiSkin.button)) { BDArmorySettings.VESSEL_SPAWN_GEOCOORDS = spawnLocation.location; spawnFields["lat"].currentValue = BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x; spawnFields["lon"].currentValue = BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y; VesselSpawner.Instance.ShowSpawnPoint(BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x, BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y, BDArmorySettings.VESSEL_SPAWN_ALTITUDE, 20); // if (BDArmorySettings.RUNWAY_PROJECT) // FIXME Round 3 // { // targetSpawnConfig.latitude = spawnLocation.location.x; // targetSpawnConfig.longitude = spawnLocation.location.y; // targetSpawnFields["lat"].currentValue = spawnLocation.location.x + 1; // targetSpawnFields["lon"].currentValue = spawnLocation.location.y; // } } } line += (i - 1) / 4; line += 0.3f; } // TODO Add a button for adding in spawn locations in the GUI. if (GUI.Button(SLineRect(++line), (BDArmorySettings.SHOW_TOURNAMENT_OPTIONS ? "Hide " : "Show ") + Localizer.Format("#LOC_BDArmory_Settings_TournamentOptions"), BDArmorySettings.SHOW_TOURNAMENT_OPTIONS ? BDArmorySetup.BDGuiSkin.box : BDArmorySetup.BDGuiSkin.button))//Show/hide tournament options { BDArmorySettings.SHOW_TOURNAMENT_OPTIONS = !BDArmorySettings.SHOW_TOURNAMENT_OPTIONS; } if (BDArmorySettings.SHOW_TOURNAMENT_OPTIONS) { GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_TournamentDelayBetweenHeats")}: ({BDArmorySettings.TOURNAMENT_DELAY_BETWEEN_HEATS}s)", leftLabel); // Delay between heats BDArmorySettings.TOURNAMENT_DELAY_BETWEEN_HEATS = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.TOURNAMENT_DELAY_BETWEEN_HEATS, 0f, 15f)); var value = BDArmorySettings.TOURNAMENT_ROUNDS < 21 ? BDArmorySettings.TOURNAMENT_ROUNDS : (16 + BDArmorySettings.TOURNAMENT_ROUNDS / 5); GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_TournamentRounds")}: ({BDArmorySettings.TOURNAMENT_ROUNDS})", leftLabel); // Rounds value = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), value, 1f, 36f)); BDArmorySettings.TOURNAMENT_ROUNDS = value < 21 ? value : (value - 16) * 5; if (BDArmorySettings.VESSEL_SPAWN_NUMBER_OF_TEAMS == 0) // FFA { GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_TournamentVesselsPerHeat")}: ({(BDArmorySettings.TOURNAMENT_VESSELS_PER_HEAT > 1 ? BDArmorySettings.TOURNAMENT_VESSELS_PER_HEAT.ToString() : (BDArmorySettings.TOURNAMENT_VESSELS_PER_HEAT == 0 ? "Auto" : "Inf"))})", leftLabel); // Vessels Per Heat BDArmorySettings.TOURNAMENT_VESSELS_PER_HEAT = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.TOURNAMENT_VESSELS_PER_HEAT, 0f, 20f)); } else // Teams { GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_TournamentTeamsPerHeat")}: ({(BDArmorySettings.TOURNAMENT_TEAMS_PER_HEAT > 1 ? BDArmorySettings.TOURNAMENT_TEAMS_PER_HEAT.ToString() : (BDArmorySettings.TOURNAMENT_TEAMS_PER_HEAT == 0 ? "Auto" : "Inf"))})", leftLabel); // Teams Per Heat BDArmorySettings.TOURNAMENT_TEAMS_PER_HEAT = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.TOURNAMENT_TEAMS_PER_HEAT, 2f, 8f)); GUI.Label(SLeftSliderRect(++line), $"{Localizer.Format("#LOC_BDArmory_Settings_TournamentVesselsPerTeam")}: ({BDArmorySettings.TOURNAMENT_VESSELS_PER_TEAM.ToString()})", leftLabel); // Vessels Per Team BDArmorySettings.TOURNAMENT_VESSELS_PER_TEAM = Mathf.RoundToInt(GUI.HorizontalSlider(SRightSliderRect(line), BDArmorySettings.TOURNAMENT_VESSELS_PER_TEAM, 1f, 8f)); BDArmorySettings.TOURNAMENT_FULL_TEAMS = GUI.Toggle(SLeftRect(++line), BDArmorySettings.TOURNAMENT_FULL_TEAMS, Localizer.Format("#LOC_BDArmory_Settings_TournamentFullTeams")); // Re-use craft to fill teams } if (BDATournament.Instance.tournamentType == TournamentType.FFA) { GUI.Label(SLineRect(++line), $"ID: {BDATournament.Instance.tournamentID}, {BDATournament.Instance.vesselCount} vessels, {BDATournament.Instance.numberOfRounds} rounds, {BDATournament.Instance.numberOfHeats} heats per round ({BDATournament.Instance.heatsRemaining} remaining).", leftLabel); } else { GUI.Label(SLineRect(++line), $"ID: {BDATournament.Instance.tournamentID}, {BDATournament.Instance.teamCount} teams, {BDATournament.Instance.numberOfRounds} rounds, {BDATournament.Instance.teamsPerHeat} teams per heat, {BDATournament.Instance.numberOfHeats} heats per round,", leftLabel); GUI.Label(SLineRect(++line), $"{BDATournament.Instance.vesselCount} vessels,{(BDATournament.Instance.fullTeams ? "" : " up to")} {BDATournament.Instance.vesselsPerTeam} vessels per team per heat, {BDATournament.Instance.heatsRemaining} heats remaining.", leftLabel); } switch (BDATournament.Instance.tournamentStatus) { case TournamentStatus.Running: case TournamentStatus.Waiting: if (GUI.Button(SLeftRect(++line), Localizer.Format("#LOC_BDArmory_Settings_TournamentStop"), BDArmorySetup.BDGuiSkin.button)) // Stop tournament { BDATournament.Instance.StopTournament(); } GUI.Label(SRightRect(line), $" Status: {BDATournament.Instance.tournamentStatus}, Round {BDATournament.Instance.currentRound}, Heat {BDATournament.Instance.currentHeat}"); break; default: if (GUI.Button(SLeftRect(++line), Localizer.Format("#LOC_BDArmory_Settings_TournamentSetup"), BDArmorySetup.BDGuiSkin.button)) // Setup tournament { ParseAllSpawnFieldsNow(); BDATournament.Instance.SetupTournament(BDArmorySettings.VESSEL_SPAWN_FILES_LOCATION, BDArmorySettings.TOURNAMENT_ROUNDS, BDArmorySettings.TOURNAMENT_VESSELS_PER_HEAT, BDArmorySettings.TOURNAMENT_TEAMS_PER_HEAT, BDArmorySettings.TOURNAMENT_VESSELS_PER_TEAM, BDArmorySettings.VESSEL_SPAWN_NUMBER_OF_TEAMS); BDArmorySetup.SaveConfig(); } if (BDATournament.Instance.tournamentStatus != TournamentStatus.Completed) { if (GUI.Button(SRightRect(line), Localizer.Format("#LOC_BDArmory_Settings_TournamentRun"), BDArmorySetup.BDGuiSkin.button)) // Run tournament { BDATournament.Instance.RunTournament(); } } break; } } /* * // Special settings for season 2 round 3 * if (BDArmorySettings.RUNWAY_PROJECT) * { ++line; * if (GUI.Button(SLeftButtonRect(++line), Localizer.Format("Set target spawn here"), BDArmorySetup.BDGuiSkin.button)) //"Vessel Spawning Location" * { * Ray ray = new Ray(FlightCamera.fetch.mainCamera.transform.position, FlightCamera.fetch.mainCamera.transform.forward); * RaycastHit hit; * if (Physics.Raycast(ray, out hit, 10000, 1 << 15)) * { * var geoCoords = FlightGlobals.currentMainBody.GetLatitudeAndLongitude(hit.point); * targetSpawnFields["lat"].currentValue = geoCoords.x; * targetSpawnFields["lon"].currentValue = geoCoords.y; * } * } * rects = SRight3Rects(line); * targetSpawnFields["lat"].tryParseValue(GUI.TextField(rects[0], targetSpawnFields["lat"].possibleValue, 8)); * targetSpawnFields["lon"].tryParseValue(GUI.TextField(rects[1], targetSpawnFields["lon"].possibleValue, 8)); * targetSpawnFields["alt"].tryParseValue(GUI.TextField(rects[2], targetSpawnFields["alt"].possibleValue, 8)); * * targetSpawnConfig.latitude = Math.Min(Math.Max(targetSpawnFields["lat"].currentValue, -90), 90); * targetSpawnConfig.longitude = Math.Min(Math.Max(targetSpawnFields["lon"].currentValue, -180), 180); * targetSpawnConfig.altitude = Math.Max(0, (float)targetSpawnFields["alt"].currentValue); * targetSpawnConfig.absDistanceOrFactor = GUI.Toggle(SLeftRect(++line), targetSpawnConfig.absDistanceOrFactor, Localizer.Format("Target distance: abs vs factor")); // Toggle between distance factor and absolute distance. * if (targetSpawnConfig.absDistanceOrFactor) * { // Absolute distance * var value = targetSpawnConfig.distance < 100 ? targetSpawnConfig.distance / 10 : targetSpawnConfig.distance < 1000 ? 9 + targetSpawnConfig.distance / 100 : targetSpawnConfig.distance < 10000 ? 18 + targetSpawnConfig.distance / 1000 : 26 + targetSpawnConfig.distance / 5000; * var displayValue = targetSpawnConfig.distance < 1000 ? targetSpawnConfig.distance.ToString("0") + "m" : (targetSpawnConfig.distance / 1000).ToString("0") + "km"; * GUI.Label(SLeftSliderRect(++line), $"Target spawn distance: ({displayValue})", leftLabel);//Spawn Distance * value = Mathf.Round(GUI.HorizontalSlider(SRightSliderRect(line), value, 1f, 30f)); * targetSpawnConfig.distance = value < 10 ? 10 * value : value < 19 ? 100 * (value - 9) : value < 28 ? 1000 * (value - 18) : 5000 * (value - 26); * } * else * { // Distance factor * GUI.Label(SLeftSliderRect(++line), $"Target spawn distance factor: ({targetSpawnConfig.distance})", leftLabel);//Spawn Distance Factor * targetSpawnConfig.distance = Mathf.Round(GUI.HorizontalSlider(SRightSliderRect(line), targetSpawnConfig.distance / 10f, 1f, 10f) * 10f); * } * // Countdown * GUI.Label(SLeftSliderRect(++line), $"Countdown: ({competitionStartDelay}s)", leftLabel); // Countdown * competitionStartDelay = Mathf.Round(GUI.HorizontalSlider(SRightSliderRect(line), competitionStartDelay, 0f, 30f)); * } */ ++line; if (GUI.Button(SLineRect(++line), Localizer.Format("#LOC_BDArmory_Settings_SingleSpawn"), _vesselsSpawned ? BDArmorySetup.BDGuiSkin.box : BDArmorySetup.BDGuiSkin.button)) { BDATournament.Instance.StopTournament(); ParseAllSpawnFieldsNow(); if (!_vesselsSpawned && !VesselSpawner.Instance.vesselsSpawningContinuously && Event.current.button == 0) // Left click { if (BDArmorySettings.VESSEL_SPAWN_CONTINUE_SINGLE_SPAWNING) { VesselSpawner.Instance.SpawnAllVesselsOnceContinuously(BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x, BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y, BDArmorySettings.VESSEL_SPAWN_ALTITUDE, BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE ? BDArmorySettings.VESSEL_SPAWN_DISTANCE : BDArmorySettings.VESSEL_SPAWN_DISTANCE_FACTOR, BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE, BDArmorySettings.VESSEL_SPAWN_EASE_IN_SPEED, true, BDArmorySettings.VESSEL_SPAWN_REASSIGN_TEAMS, BDArmorySettings.VESSEL_SPAWN_NUMBER_OF_TEAMS, null, null, BDArmorySettings.VESSEL_SPAWN_FILES_LOCATION); // Spawn vessels. } else { VesselSpawner.Instance.SpawnAllVesselsOnce(BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x, BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y, BDArmorySettings.VESSEL_SPAWN_ALTITUDE, BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE ? BDArmorySettings.VESSEL_SPAWN_DISTANCE : BDArmorySettings.VESSEL_SPAWN_DISTANCE_FACTOR, BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE, BDArmorySettings.VESSEL_SPAWN_EASE_IN_SPEED, true, BDArmorySettings.VESSEL_SPAWN_REASSIGN_TEAMS, BDArmorySettings.VESSEL_SPAWN_NUMBER_OF_TEAMS, null, null, BDArmorySettings.VESSEL_SPAWN_FILES_LOCATION); // Spawn vessels. } _vesselsSpawned = true; } else if (Event.current.button == 2) // Middle click, add a new spawn of vessels to the currently spawned vessels. { VesselSpawner.Instance.SpawnAllVesselsOnce(BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x, BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y, BDArmorySettings.VESSEL_SPAWN_ALTITUDE, BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE ? BDArmorySettings.VESSEL_SPAWN_DISTANCE : BDArmorySettings.VESSEL_SPAWN_DISTANCE_FACTOR, BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE, BDArmorySettings.VESSEL_SPAWN_EASE_IN_SPEED, false, false, 0, null, null, BDArmorySettings.VESSEL_SPAWN_FILES_LOCATION); // Spawn vessels, without killing off other vessels or changing camera positions. } } if (GUI.Button(SLineRect(++line), Localizer.Format("#LOC_BDArmory_Settings_ContinuousSpawning"), VesselSpawner.Instance.vesselsSpawningContinuously ? BDArmorySetup.BDGuiSkin.box : BDArmorySetup.BDGuiSkin.button)) { BDATournament.Instance.StopTournament(); ParseAllSpawnFieldsNow(); if (!VesselSpawner.Instance.vesselsSpawningContinuously && !_vesselsSpawned && Event.current.button == 0) // Left click { VesselSpawner.Instance.SpawnVesselsContinuously(BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x, BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y, BDArmorySettings.VESSEL_SPAWN_ALTITUDE, BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE ? BDArmorySettings.VESSEL_SPAWN_DISTANCE : BDArmorySettings.VESSEL_SPAWN_DISTANCE_FACTOR, BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE, true, BDArmorySettings.VESSEL_SPAWN_FILES_LOCATION); // Spawn vessels continuously at 1km above terrain. } } /* * // Special buttons for special rounds. * if (BDArmorySettings.RUNWAY_PROJECT) * { * if (GUI.Button(SLineRect(++line), Localizer.Format("Runway Project Season 2 Round 3"), _vesselsSpawned ? BDArmorySetup.BDGuiSkin.box : BDArmorySetup.BDGuiSkin.button)) // FIXME For round 3 only. * { * BDATournament.Instance.StopTournament(); * if (!_vesselsSpawned && !VesselSpawner.Instance.vesselsSpawningContinuously && Event.current.button == 0) // Left click * { * Debug.Log("[BDArmory.VesselSpawnerWindow]: Spawning 'Round 3' configuration."); * _vesselsSpawned = true; * VesselSpawner.Instance.TeamSpawn( * new List<VesselSpawner.SpawnConfig> { * new VesselSpawner.SpawnConfig( * BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.x, * BDArmorySettings.VESSEL_SPAWN_GEOCOORDS.y, * BDArmorySettings.VESSEL_SPAWN_ALTITUDE, * BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE ? BDArmorySettings.VESSEL_SPAWN_DISTANCE : BDArmorySettings.VESSEL_SPAWN_DISTANCE_FACTOR, * BDArmorySettings.VESSEL_SPAWN_DISTANCE_TOGGLE, * BDArmorySettings.VESSEL_SPAWN_EASE_IN_SPEED, * true, * true, * "" * ), * targetSpawnConfig * }, * true, // Start the competition. * competitionStartDelay, // Wait for the target planes to get going first. * true // Enable startCompetitionNow so the competition starts as soon as the missiles have launched. * ); // FIXME, this is temporary * } * } * } */ /* * if (BDArmorySettings.RUNWAY_PROJECT) * { * if (GUI.Button(SLineRect(++line), "Runway Project Season 2 Round 4", !(round4running && BDATournament.Instance.tournamentStatus != TournamentStatus.Completed) ? BDArmorySetup.BDGuiSkin.button : BDArmorySetup.BDGuiSkin.box)) * { * round4running = true; * BDATournament.Instance.RunTournament(); * } * } */ if (GUI.Button(SLineRect(++line), Localizer.Format("#LOC_BDArmory_Settings_CancelSpawning"), (_vesselsSpawned || VesselSpawner.Instance.vesselsSpawningContinuously) ? BDArmorySetup.BDGuiSkin.button : BDArmorySetup.BDGuiSkin.box)) { if (_vesselsSpawned) { Debug.Log("[BDArmory.VesselSpawnerWindow]: Resetting spawning vessel button."); } _vesselsSpawned = false; if (VesselSpawner.Instance.vesselsSpawningContinuously) { Debug.Log("[BDArmory.VesselSpawnerWindow]: Resetting continuous spawning button."); } BDATournament.Instance.StopTournament(); VesselSpawner.Instance.CancelVesselSpawn(); round4running = false; // FIXME Round 4 } line += 1.25f; // Bottom internal margin _windowHeight = (line * _lineHeight); }