Merge pull request #19 from MoltenMods/2021

Fixed bug caused by reckless code, tidied code and changed way regions menu is displayed
This commit is contained in:
Daemon authored and GitHub committed 2021-04-11 14:19:39 +01:00
commit 6f266f7f93
5 files changed
+56 -44

No files matched your search

+4 -1
View File
@@ -27,6 +27,9 @@ Regions can be connected to directly using an IP address.
Custom regions can be added as detailed below in the
[configuration](#configuration) section.
Other mods can add regions via the
`AddRegion(string name, string ip)` method.
## Installation
> **⚠ WARNING**
@@ -60,7 +63,7 @@ The configuration file is located at
### Custom regions
Custom regions can be added by modifying the `[Region 1]`,
`[Region 2]` ... `[Region 10]` sections of the configuration file.
`[Region 2]` ... `[Region 9]` sections of the configuration file.
You can modify the display name of the region,
the IP address of the region and the port of the region.
+47 -26
View File
@@ -27,16 +27,17 @@ namespace Unify.Patches
public static IRegionInfo DirectRegion { get; set; }
private static TextBox directConnect { get; set; }
private static TextBox DirectConnect { get; set; }
public static void Patch()
{
ServerManager serverManager = ServerManager.Instance;
IRegionInfo[] customRegions = UnifyPlugin.MergeRegions(_newRegions, ModRegions.ToArray());
customRegions = UnifyPlugin.MergeRegions(customRegions, LoadCustomUserRegions());
if (DirectRegion != null) customRegions = customRegions.AddToArray(DirectRegion);
IRegionInfo[] patchedRegions = UnifyPlugin.MergeRegions(_oldRegions, customRegions);
IRegionInfo[] patchedRegions = _oldRegions
.AddRangeToArray(_newRegions)
.AddRangeToArray(ModRegions.ToArray())
.AddRangeToArray(LoadCustomUserRegions());
if (DirectRegion != null) patchedRegions = patchedRegions.AddToArray(DirectRegion);
ServerManager.DefaultRegions = patchedRegions;
serverManager.AvailableRegions = patchedRegions;
@@ -47,7 +48,7 @@ namespace Unify.Patches
{
List<IRegionInfo> customRegions = new List<IRegionInfo>();
for (int x = 0; x < 10; x++)
for (int x = 0; x < 9; x++)
{
ConfigEntry<string> regionName = UnifyPlugin.ConfigFile.Bind(
$"Region {x + 1}", $"Name", "custom region");
@@ -72,11 +73,11 @@ namespace Unify.Patches
{
RegionMenu regionMenu = GameObject.Find("RegionMenu").GetComponent<RegionMenu>();
bool success = UnifyPlugin.SetDirectRegion(directConnect.text, out IRegionInfo newRegion);
bool success = UnifyPlugin.SetDirectRegion(DirectConnect.text, out IRegionInfo newRegion);
if (!success)
{
directConnect.StartCoroutine(Effects.FIJHCJMBGFP(directConnect.transform, 0.75f, 0.25f));
DirectConnect.StartCoroutine(Effects.FIJHCJMBGFP(DirectConnect.transform, 0.75f, 0.25f));
return;
}
@@ -92,17 +93,17 @@ namespace Unify.Patches
JoinGameButton joinGameButton = DestroyableSingleton<JoinGameButton>.Instance;
RegionMenu regionMenu = DestroyableSingleton<RegionMenu>.Instance;
directConnect = Object.Instantiate(joinGameButton.GameIdText, regionMenu.transform);
directConnect.gameObject.SetActive(false);
directConnect.IpMode = true;
directConnect.characterLimit = 15;
directConnect.ClearOnFocus = false;
DirectConnect = Object.Instantiate(joinGameButton.GameIdText, regionMenu.transform);
DirectConnect.gameObject.SetActive(false);
DirectConnect.IpMode = true;
DirectConnect.characterLimit = 15;
DirectConnect.ClearOnFocus = false;
directConnect.OnEnter = new Button.ButtonClickedEvent();
directConnect.OnEnter.AddListener((Action) UpdateRegion);
DirectConnect.OnEnter = new Button.ButtonClickedEvent();
DirectConnect.OnEnter.AddListener((Action) UpdateRegion);
int offset = ((ServerManager.DefaultRegions.Length + 1) / 2) + 1;
directConnect.transform.localPosition = new Vector3(0, 2f - (offset / 2f), -100f);
int offset = _newRegions.Length + ModRegions.Count;
DirectConnect.transform.localPosition = new Vector3(0, 1f - (offset / 2f), -100f);
}
}
@@ -111,18 +112,38 @@ namespace Unify.Patches
{
public static void Postfix(RegionMenu __instance)
{
directConnect.gameObject.SetActive(true);
DirectConnect.gameObject.SetActive(true);
var regionButtons = __instance.ButtonPool.activeChildren.ToArray();
int half = (regionButtons.Length + 1) / 2;
for (int x = 0; x < regionButtons.Length; x++)
{
ServerListButton regionButton = regionButtons[x].Cast<ServerListButton>();
regionButton.transform.localPosition = new Vector3(1.25f * ((x < half)? -1: 1), 2f - 0.5f * (x - ((x < half)? 0 : half)), 0f);
for (int i = 0; i < regionButtons.Length; i++)
{
ServerListButton regionButton = regionButtons[i].Cast<ServerListButton>();
(float x, float y) = CalculatePosition(i);
regionButton.transform.localPosition = new Vector3(1.25f + x, 2f - 0.5f * y, 0f);
}
}
private static (float x, float y) CalculatePosition(int index)
{
// currently broken
/*if (DirectRegion != null && ServerManager.DefaultRegions[index].Name == DirectRegion.Name)
{
int offset = Math.Max(
Math.Max(LoadCustomUserRegions().Length, _newRegions.Length + ModRegions.Count),
_oldRegions.Length);
return (1.25f, 2f - offset);
}*/
bool isCustomRegion = index >= _oldRegions.Length;
bool isCustomUserRegion = index >= _oldRegions.Length + _newRegions.Length + ModRegions.Count;
float x = (isCustomRegion ? 3f : 0) + (isCustomUserRegion ? 3f : 0) - 4.25f;
float y = index - (isCustomRegion ? _oldRegions.Length : 0) -
(isCustomUserRegion ? _newRegions.Length + ModRegions.Count : 0);
return (x, y);
}
}
[HarmonyPatch(typeof(JoinGameButton), nameof(JoinGameButton.OnClick))]
@@ -144,7 +165,7 @@ namespace Unify.Patches
{
public static void Postfix()
{
directConnect.gameObject.SetActive(false);
DirectConnect.gameObject.SetActive(false);
}
}
@@ -153,7 +174,7 @@ namespace Unify.Patches
{
public static void Postfix()
{
directConnect.gameObject.SetActive(false);
DirectConnect.gameObject.SetActive(false);
}
}
}
+4 -16
View File
@@ -6,6 +6,7 @@ using BepInEx;
using BepInEx.Configuration;
using BepInEx.IL2CPP;
using HarmonyLib;
using Hazel.Udp;
using Reactor;
using Unify.Patches;
@@ -19,15 +20,10 @@ namespace Unify
{
public const string Id = "daemon.unify";
private const string Name = "Unify";
private const string Version = "3.0.0";
private const string Version = "3.0.1";
public static ConfigFile ConfigFile { get; private set; }
// public static readonly bool HandshakeDisabled = !PluginSingleton<ReactorPlugin>.Instance.ModdedHandshake.Value;
/*public static readonly string[] NormalHandshake =
new string[] {"North America", "Europe", "Asia", "skeld.net"};*/
public Harmony Harmony { get; } = new Harmony(Id);
public override void Load()
@@ -47,20 +43,12 @@ namespace Unify
RegionsPatch.Patch();
Harmony.UnpatchAll(ReactorPlugin.Id);
// Unpatches the modded handshake, because Impostor is STILL not fully updated yet
Harmony.Unpatch(typeof(UdpConnection).GetMethod("HandleSend"), HarmonyPatchType.Prefix, ReactorPlugin.Id);
Harmony.PatchAll();
}
public static IRegionInfo[] MergeRegions(IRegionInfo[] oldRegions, IRegionInfo[] newRegions)
{
IRegionInfo[] patchedRegions = new IRegionInfo[oldRegions.Length + newRegions.Length];
Array.Copy(oldRegions, patchedRegions, oldRegions.Length);
Array.Copy(newRegions, 0, patchedRegions, oldRegions.Length, newRegions.Length);
return patchedRegions;
}
public static IRegionInfo AddRegion(string name, string ip)
{
if (Uri.CheckHostName(ip) != UriHostNameType.IPv4) return ServerManager.Instance.CurrentRegion;
+1 -1
View File
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Version>3.0.0</Version>
<Version>3.0.1</Version>
<Mappings>NuclearPowered/Mappings:0.3.0</Mappings>
<Description>Region mod</Description>
Binary file not shown.