Files
EndlessHostRoles/Patches/ServerDropdownPatch.cs
T
2026-09-17 18:40:21 +02:00

52 lines
2.4 KiB
C#

using System.Linq;
using HarmonyLib;
using UnityEngine;
using UnityEngine.SceneManagement;
// ReSharper disable PossibleLossOfFraction
namespace EHR.Patches;
[HarmonyPatch(typeof(ServerDropdown), nameof(ServerDropdown.FillServerOptions))]
public static class ServerDropdownPatch
{
public static bool Prepare()
{
// On Android, Starlight handles this automatically
return !OperatingSystem.IsAndroid();
}
public static bool Prefix(ServerDropdown __instance)
{
if (SceneManager.GetActiveScene().name == "FindAGame") return true;
SpriteRenderer background = __instance.background;
background.size = new Vector2(4, 1);
ServerManager serverManager = ServerManager.Instance;
TranslationController translationController = TranslationController.Instance;
IRegionInfo currentRegion = serverManager.CurrentRegion;
var displayRegions = serverManager.AvailableRegions.Where(region => region.Name != currentRegion.Name).ToList();
int totalColumns = Mathf.Max(1, Mathf.CeilToInt(displayRegions.Count / 5f));
int rowLimit = Mathf.Min(displayRegions.Count, 5);
__instance.defaultButtonSelected = __instance.firstOption;
__instance.firstOption.ChangeButtonText(translationController.GetStringWithDefault(currentRegion.TranslateName, currentRegion.Name));
for (var index = 0; index < displayRegions.Count; index++)
{
IRegionInfo regionInfo = displayRegions[index];
var buttonPool = __instance.ButtonPool.Get<ServerListButton>();
buttonPool.transform.localPosition = new Vector3((index / 5 - (totalColumns - 1) / 2f) * 3.15f, __instance.y_posButton - 0.5f * (index % 5), -1f);
buttonPool.Text.text = translationController.GetStringWithDefault(regionInfo.TranslateName, regionInfo.Name);
buttonPool.Text.ForceMeshUpdate();
buttonPool.Button.OnClick.RemoveAllListeners();
buttonPool.Button.OnClick.AddListener(() => __instance.ChooseOption(regionInfo));
__instance.controllerSelectable.Add(buttonPool.Button);
}
float height = 1.2f + 0.5f * (rowLimit - 1);
float width = totalColumns > 1 ? 3.15f * (totalColumns - 1) + background.size.x : background.size.x;
background.transform.localPosition = new Vector3(0f, __instance.initialYPos - (height - 1.2f) / 2f, 0f);
background.size = new Vector2(width, height);
return false;
}
}