mirror of
https://github.com/MoltenMods/Unify.git
synced 2026-10-22 15:41:21 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ab366ccef | ||
|
|
6620784255 | ||
|
|
0bafcc4c6b | ||
|
|
e651954ba7 | ||
|
|
3c5dc2566a | ||
|
|
3feb94b45d |
No files matched your search
+6
-1
@@ -64,6 +64,11 @@ library then selecting `Manage > Browse local files`.
|
||||
|
||||
## Installing Reactor
|
||||
|
||||
> If you're using version 2021.5.10 or newer, download the Reactor
|
||||
> located here instead:
|
||||
> https://github.com/DaemonBeast/Reactor/releases/tag/0.6.0, then
|
||||
> skip to step 4 below.
|
||||
|
||||
1. Go to the
|
||||
[Reactor CI](https://github.com/NuclearPowered/Reactor/actions)
|
||||
page.
|
||||
@@ -74,4 +79,4 @@ library then selecting `Manage > Browse local files`.
|
||||
5. Launch the game. The top left of the game menu should look
|
||||
something like this:
|
||||
|
||||

|
||||

|
||||
@@ -1,3 +1,5 @@
|
||||
> This mod is not affiliated with Among Us or Innersloth LLC, and the content contained therein is not endorsed or otherwise sponsored by Innersloth LLC. Portions of the materials contained herein are property of Innersloth LLC. © Innersloth LLC.
|
||||
|
||||
# Unify
|
||||
|
||||
An Among Us mod to add extra regions to the region menu.
|
||||
@@ -30,7 +32,7 @@ Other mods can add regions via the
|
||||
|
||||
> **⚠ WARNING**
|
||||
>
|
||||
> This mod only has compiled releases for the steam release of the game.
|
||||
> This mod is compiled against the steam edition of the game, but should work on any edition on a version between 2021.5.10 and 2021.5.25.2, including the Itch and Epic Games editions.
|
||||
|
||||
> If you are still using 2020.12.9s and Reactor fails to load, try using the Reactor version located
|
||||
> here: https://github.com/NuclearPowered/Reactor/actions/runs/593649307.
|
||||
@@ -38,6 +40,9 @@ Other mods can add regions via the
|
||||
> If you are still using 2021.3.5s and Reactor fails to load, try using the Reactor version located
|
||||
> here: https://github.com/NuclearPowered/Reactor/actions/runs/636023321.
|
||||
|
||||
> If you are still using 2021.4.12s-2021.4.14s and Reactor fails to load, try using the Reactor
|
||||
> version located here: https://github.com/NuclearPowered/Reactor/actions/runs/827746360
|
||||
|
||||
1. Ensure that BepInEx and Reactor (Reactor is not required for pre releases) are installed
|
||||
([installation guide](INSTALLATION.md)).
|
||||
2. Download the latest mod on the [releases](https://github.com/DaemonBeast/Unify/releases) page
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Unify.Controls
|
||||
public AspectPosition Position { get; }
|
||||
public UnityEngine.UI.Button.ButtonClickedEvent OnClick { get; }
|
||||
|
||||
private Button(string text, Vector2 size, Vector2 position)
|
||||
private Button(string text)
|
||||
{
|
||||
GameObject = Object.Instantiate(_instance).DontDestroy();
|
||||
|
||||
@@ -40,25 +40,46 @@ namespace Unify.Controls
|
||||
OnClick = GameObject.GetComponent<PassiveButton>().OnClick;
|
||||
_spriteRenderer = GameObject.GetComponent<SpriteRenderer>();
|
||||
_boxCollider2D = GameObject.GetComponent<BoxCollider2D>();
|
||||
|
||||
var size = new Vector2(Text.preferredWidth, Text.preferredHeight);
|
||||
|
||||
Text.text = text;
|
||||
Text.rectTransform.sizeDelta = size;
|
||||
Position.DistanceFromEdge = new Vector3(position.x, position.y, -100f);
|
||||
Position.DistanceFromEdge =
|
||||
new Vector3(Text.preferredWidth / 2f + 0.1f, Text.preferredHeight / 2f + 0.1f, -100f);
|
||||
_spriteRenderer.size = size;
|
||||
_boxCollider2D.size = size;
|
||||
}
|
||||
|
||||
public static async Task<Button> Create(string text, Vector2 size, Vector2 position)
|
||||
public static async Task<Button> Create(string text)
|
||||
{
|
||||
await Initialized.Task;
|
||||
|
||||
return new Button(text, size, position);
|
||||
return new Button(text);
|
||||
}
|
||||
|
||||
public static async void Create(string text, Vector2 size, Vector2 position, Action<Button> callback)
|
||||
public Button SetText(string newText)
|
||||
{
|
||||
var newButton = await Create(text, size, position);
|
||||
callback(newButton);
|
||||
Text.text = newText;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Button SetSize(Vector2 newSize)
|
||||
{
|
||||
Size = newSize;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Button SetDistanceFromEdge(Vector2 newPosition)
|
||||
{
|
||||
Position.DistanceFromEdge = new Vector3(newPosition.x, newPosition.y, -100f);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Button SetAlignment(AspectPosition.EdgeAlignments newAlignment)
|
||||
{
|
||||
Position.Alignment = newAlignment;
|
||||
return this;
|
||||
}
|
||||
|
||||
public static void InitializeBaseButton()
|
||||
@@ -96,7 +117,7 @@ namespace Unify.Controls
|
||||
_instance.GetComponent<ConditionalHide>().Destroy();
|
||||
_instance.GetComponentInChildren<TextTranslatorTMP>().Destroy();
|
||||
_instance.GetComponentInChildren<TextMeshPro>().text = "Button";
|
||||
|
||||
|
||||
Initialized.SetResult(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Reactor.Extensions;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace Unify.Controls
|
||||
{
|
||||
public class Popup
|
||||
{
|
||||
private static readonly TaskCompletionSource<bool> Initialized = new TaskCompletionSource<bool>();
|
||||
private static GameObject _instance;
|
||||
|
||||
public GameObject GameObject { get; }
|
||||
public TextMeshPro Text { get; }
|
||||
|
||||
private Popup(string text)
|
||||
{
|
||||
GameObject = Object.Instantiate(_instance).DontDestroy();
|
||||
|
||||
Text = GameObject.GetComponentInChildren<TextMeshPro>();
|
||||
|
||||
Text.text = text;
|
||||
}
|
||||
|
||||
public static async Task<Popup> Create(string text)
|
||||
{
|
||||
await Initialized.Task;
|
||||
|
||||
return new Popup(text);
|
||||
}
|
||||
|
||||
public static async void Create(string text, Action<Popup> callback)
|
||||
{
|
||||
var newPopup = await Create(text);
|
||||
callback(newPopup);
|
||||
}
|
||||
|
||||
public static void InitializeBasePopup()
|
||||
{
|
||||
BasePopup.Initialize();
|
||||
}
|
||||
|
||||
private static class BasePopup
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
SceneManager.add_sceneLoaded((Action<Scene, LoadSceneMode>) OnSceneLoaded);
|
||||
}
|
||||
|
||||
private static void OnSceneLoaded(Scene scene, LoadSceneMode loadSceneMode)
|
||||
{
|
||||
Instantiate();
|
||||
|
||||
SceneManager.remove_sceneLoaded((Action<Scene, LoadSceneMode>) OnSceneLoaded);
|
||||
}
|
||||
|
||||
private static void Instantiate()
|
||||
{
|
||||
if (Initialized.Task.IsCompleted) return;
|
||||
|
||||
var disconnectPopup = GameObject.Find("DisconnectPopup");
|
||||
if (!disconnectPopup) return;
|
||||
|
||||
_instance = Object.Instantiate(disconnectPopup).DontDestroy();
|
||||
_instance.SetActive(false);
|
||||
_instance.name = "Popup";
|
||||
|
||||
_instance.GetComponentInChildren<TextMeshPro>().text = "Popup";
|
||||
|
||||
Initialized.SetResult(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+52
-97
@@ -1,9 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using BepInEx.Configuration;
|
||||
using HarmonyLib;
|
||||
using Reactor.Extensions;
|
||||
using Unify.Controls;
|
||||
using UnityEngine;
|
||||
using Button = UnityEngine.UI.Button;
|
||||
using Object = UnityEngine.Object;
|
||||
@@ -130,11 +130,12 @@ namespace Unify.Patches
|
||||
|
||||
internal static void RefreshRegionMenu()
|
||||
{
|
||||
if (!GameObject.Find("RegionMenu")) return;
|
||||
|
||||
var regionButtons = DestroyableSingleton<RegionMenu>.Instance.ButtonPool.activeChildren.ToArray();
|
||||
var defaultRegions = ServerManager.DefaultRegions;
|
||||
var showOfficials = UnifyPlugin.ShowOfficialRegions.Value;
|
||||
var showExtras = UnifyPlugin.ShowExtraRegions.Value;
|
||||
var firstCustomRegionIndex = OldRegions.Length + NewRegions.Length + ModRegions.Count;
|
||||
|
||||
for (int i = 0; i < regionButtons.Length; i++)
|
||||
{
|
||||
@@ -144,10 +145,12 @@ namespace Unify.Patches
|
||||
var textTranslatorTemp = regionButton.GetComponentInChildren<TextTranslatorTMP>();
|
||||
if (textTranslatorTemp) textTranslatorTemp.Destroy();
|
||||
|
||||
int extraRegionCount = OldRegions.Length + NewRegions.Length + ModRegions.Count;
|
||||
bool isCustomRegion = i >= OldRegions.Length;
|
||||
bool isCustomUserRegion = i >= OldRegions.Length + NewRegions.Length + ModRegions.Count;
|
||||
bool isCustomUserRegion = i >= extraRegionCount;
|
||||
float x = (!isCustomRegion && !showExtras ? 3f : 0) + (isCustomRegion ? 3f : 0) +
|
||||
(isCustomUserRegion ? 3f : 0) - 4.25f - (showOfficials ? 0 : 1.5f) - (showExtras ? 0 : 1.5f);
|
||||
(isCustomUserRegion ? 3f : 0) - 4.25f - (!showOfficials || OldRegions.Length == 0 ? 1.5f : 0) -
|
||||
(!showExtras || extraRegionCount == 0 ? 1.5f : 0);
|
||||
float y = i - (isCustomRegion ? OldRegions.Length : 0) -
|
||||
(isCustomUserRegion ? NewRegions.Length + ModRegions.Count : 0);
|
||||
|
||||
@@ -177,17 +180,14 @@ namespace Unify.Patches
|
||||
regionButton.Text.text =
|
||||
RegionsEditor.IsActive ? $"{region.Name}\n{region.PingServer} {region.Servers[0].Port}" :
|
||||
region.Name;
|
||||
|
||||
if (i != firstCustomRegionIndex) continue;
|
||||
|
||||
PositionMoveButton(RegionsEditor.MoveUpButton, regionButtonPosition);
|
||||
PositionMoveButton(RegionsEditor.MoveDownButton, regionButtonPosition, -0.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static void RefreshDirectConnectButton()
|
||||
{
|
||||
if (!GameObject.Find("RegionMenu")) return;
|
||||
|
||||
if (DirectConnect) DirectConnect.gameObject.Destroy();
|
||||
|
||||
RegionMenu regionMenu = DestroyableSingleton<RegionMenu>.Instance;
|
||||
@@ -195,6 +195,7 @@ namespace Unify.Patches
|
||||
|
||||
DirectConnect = Object.Instantiate(joinGameButton.GameIdText, regionMenu.transform);
|
||||
DirectConnect.GetComponentInChildren<TextTranslatorTMP>().Destroy();
|
||||
DirectConnect.GetComponent<JoinGameButton>().Destroy();
|
||||
DirectConnect.outputText.text = "Enter IP";
|
||||
DirectConnect.IpMode = true;
|
||||
DirectConnect.characterLimit = 15;
|
||||
@@ -206,12 +207,6 @@ namespace Unify.Patches
|
||||
int offset = NewRegions.Length + ModRegions.Count;
|
||||
DirectConnect.transform.localPosition = new Vector3(0, 1f - (offset / 2f), -100f);
|
||||
}
|
||||
|
||||
private static void PositionMoveButton(Controls.Button button, Vector3 regionButtonPosition, float yOffset=0)
|
||||
{
|
||||
button.GameObject.transform.localPosition =
|
||||
new Vector3(regionButtonPosition.x + 1.45f, regionButtonPosition.y + yOffset, -100f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,75 +217,51 @@ namespace Unify.Patches
|
||||
private static Controls.Button _toggleOfficialsButton;
|
||||
private static Controls.Button _toggleExtrasButton;
|
||||
|
||||
private static Controls.Button _addRegionButton;
|
||||
|
||||
internal static Controls.Button MoveUpButton;
|
||||
internal static Controls.Button MoveDownButton;
|
||||
|
||||
private static Popup _addRegionPopup;
|
||||
|
||||
internal static bool IsActive;
|
||||
|
||||
public static async void SetUp()
|
||||
internal static async void SetUp()
|
||||
{
|
||||
_addRegionPopup = await Popup.Create("Some text");
|
||||
|
||||
Controls.Button.Create("Edit", new Vector2(0.8f, 0.4f), new Vector2(0.5f, 0.3f), SetUpSwitchButton);
|
||||
|
||||
Controls.Button.Create("Toggle Official Regions", new Vector2(2f, 0.4f), new Vector2(1.1f, 1.3f),
|
||||
SetUpToggleOfficialsButton);
|
||||
Controls.Button.Create("Toggle Extra Regions", new Vector2(2f, 0.4f), new Vector2(1.1f, 1.8f),
|
||||
SetUpToggleExtrasButton);
|
||||
|
||||
Controls.Button.Create("Add Region", new Vector2(2f, 0.4f), new Vector2(1.1f, 2.3f), SetUpAddRegionButton);
|
||||
|
||||
Controls.Button.Create("↑", new Vector2(0.4f, 0.4f), Vector2.zero, SetUpMoveUpButton);
|
||||
Controls.Button.Create("↓", new Vector2(0.4f, 0.4f), Vector2.zero, SetUpMoveDownButton);
|
||||
await SetUpSwitchButton();
|
||||
await SetUpToggleOfficialsButton();
|
||||
await SetUpToggleExtrasButton();
|
||||
}
|
||||
|
||||
public static void ShowRegionsEditor()
|
||||
|
||||
private static void SetRegionsEditorVisibility(bool visible)
|
||||
{
|
||||
IsActive = true;
|
||||
_switchButton.Text.text = "Back";
|
||||
_toggleOfficialsButton.GameObject.SetActive(true);
|
||||
_toggleExtrasButton.GameObject.SetActive(true);
|
||||
/*MoveUpButton.GameObject.SetActive(true);
|
||||
MoveDownButton.GameObject.SetActive(true);
|
||||
_addRegionButton.GameObject.SetActive(true);*/
|
||||
IsActive = visible;
|
||||
_toggleOfficialsButton.GameObject.SetActive(visible);
|
||||
_toggleExtrasButton.GameObject.SetActive(visible);
|
||||
|
||||
RegionsPatch.RegionMenuPatches.RefreshRegionMenu();
|
||||
RegionsPatch.DirectConnect.gameObject.SetActive(false);
|
||||
|
||||
if (visible)
|
||||
{
|
||||
_switchButton.Text.text = "Back";
|
||||
RegionsPatch.DirectConnect.gameObject.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
_switchButton.Text.text = "Edit";
|
||||
RegionsPatch.RegionMenuPatches.RefreshDirectConnectButton();
|
||||
}
|
||||
}
|
||||
|
||||
public static void HideRegionsEditor()
|
||||
private static async Task SetUpSwitchButton()
|
||||
{
|
||||
IsActive = false;
|
||||
_switchButton.Text.text = "Edit";
|
||||
_toggleOfficialsButton.GameObject.SetActive(false);
|
||||
_toggleExtrasButton.GameObject.SetActive(false);
|
||||
/*MoveUpButton.GameObject.SetActive(false);
|
||||
MoveDownButton.GameObject.SetActive(false);
|
||||
_addRegionButton.GameObject.SetActive(false);*/
|
||||
|
||||
RegionsPatch.RegionMenuPatches.RefreshRegionMenu();
|
||||
RegionsPatch.RegionMenuPatches.RefreshDirectConnectButton();
|
||||
}
|
||||
|
||||
private static void SetUpSwitchButton(Controls.Button button)
|
||||
{
|
||||
_switchButton = button;
|
||||
|
||||
_switchButton = await Controls.Button.Create("Edit");
|
||||
_switchButton.SetSize(new Vector2(0.8f, 0.4f)).SetDistanceFromEdge(new Vector2(0.5f, 0.3f));
|
||||
|
||||
_switchButton.OnClick.AddListener((Action) (() =>
|
||||
{
|
||||
if (IsActive) HideRegionsEditor();
|
||||
else ShowRegionsEditor();
|
||||
SetRegionsEditorVisibility(!IsActive);
|
||||
}));
|
||||
}
|
||||
|
||||
private static void SetUpToggleOfficialsButton(Controls.Button button)
|
||||
private static async Task SetUpToggleOfficialsButton()
|
||||
{
|
||||
_toggleOfficialsButton = button;
|
||||
|
||||
_toggleOfficialsButton = await Controls.Button.Create("Toggle Official Regions");
|
||||
_toggleOfficialsButton.SetSize(new Vector2(2f, 0.4f)).SetDistanceFromEdge(new Vector2(1.1f, 1.3f));
|
||||
|
||||
_toggleOfficialsButton.OnClick.AddListener((Action) (() =>
|
||||
{
|
||||
UnifyPlugin.ShowOfficialRegions.Value = !UnifyPlugin.ShowOfficialRegions.Value;
|
||||
@@ -298,10 +269,11 @@ namespace Unify.Patches
|
||||
}));
|
||||
}
|
||||
|
||||
private static void SetUpToggleExtrasButton(Controls.Button button)
|
||||
private static async Task SetUpToggleExtrasButton()
|
||||
{
|
||||
_toggleExtrasButton = button;
|
||||
|
||||
_toggleExtrasButton = await Controls.Button.Create("Toggle Extra Regions");
|
||||
_toggleExtrasButton.SetSize(new Vector2(2f, 0.4f)).SetDistanceFromEdge(new Vector2(1.1f, 1.8f));
|
||||
|
||||
_toggleExtrasButton.OnClick.AddListener((Action) (() =>
|
||||
{
|
||||
UnifyPlugin.ShowExtraRegions.Value = !UnifyPlugin.ShowExtraRegions.Value;
|
||||
@@ -309,35 +281,13 @@ namespace Unify.Patches
|
||||
}));
|
||||
}
|
||||
|
||||
private static void SetUpMoveUpButton(Controls.Button button)
|
||||
{
|
||||
MoveUpButton = button;
|
||||
|
||||
MoveUpButton.GameObject.transform.position = DestroyableSingleton<RegionMenu>.Instance.transform.position;
|
||||
}
|
||||
|
||||
private static void SetUpMoveDownButton(Controls.Button button)
|
||||
{
|
||||
MoveDownButton = button;
|
||||
|
||||
MoveDownButton.GameObject.transform.position = DestroyableSingleton<RegionMenu>.Instance.transform.position;
|
||||
}
|
||||
|
||||
private static void SetUpAddRegionButton(Controls.Button button)
|
||||
{
|
||||
_addRegionButton = button;
|
||||
|
||||
_addRegionButton.OnClick.AddListener((Action) (() =>
|
||||
{
|
||||
_addRegionPopup.GameObject.SetActive(true);
|
||||
}));
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(RegionMenu), nameof(RegionMenu.Open))]
|
||||
public static class OpenRegionsEditorPatch
|
||||
{
|
||||
public static void Postfix()
|
||||
{
|
||||
if (!GameObject.Find("RegionMenu")) return;
|
||||
|
||||
_switchButton.GameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
@@ -356,12 +306,17 @@ namespace Unify.Patches
|
||||
[HarmonyPrefix]
|
||||
public static bool DisableRegionButtonsPatch()
|
||||
{
|
||||
return !IsActive;
|
||||
if (IsActive) return false;
|
||||
|
||||
Hide();
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void Hide()
|
||||
{
|
||||
HideRegionsEditor();
|
||||
if (!RegionsPatch.DirectConnect) return;
|
||||
|
||||
SetRegionsEditorVisibility(false);
|
||||
|
||||
_switchButton.GameObject.SetActive(false);
|
||||
RegionsPatch.DirectConnect.gameObject.SetActive(false);
|
||||
|
||||
+1
-2
@@ -21,7 +21,7 @@ namespace Unify
|
||||
{
|
||||
public const string Id = "daemon.unify";
|
||||
private const string Name = "Unify";
|
||||
private const string Version = "4.2.0";
|
||||
private const string Version = "5.0.0";
|
||||
|
||||
public static ConfigFile ConfigFile { get; private set; }
|
||||
|
||||
@@ -46,7 +46,6 @@ namespace Unify
|
||||
Harmony.PatchAll();
|
||||
|
||||
Button.InitializeBaseButton();
|
||||
// Popup.InitializeBasePopup();
|
||||
RegionsEditor.SetUp();
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -1,20 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<Version>4.2.0</Version>
|
||||
<Mappings>NuclearPowered/Mappings:0.4.0</Mappings>
|
||||
<Version>5.0.0</Version>
|
||||
<Mappings>DaemonBeast/Mappings:0.5.0</Mappings>
|
||||
|
||||
<Description>Region mod</Description>
|
||||
<Authors>Daemon</Authors>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(GamePlatform)' == 'Steam'">
|
||||
<GameVersion>2021.4.14s</GameVersion>
|
||||
<GameVersion>2021.5.10s</GameVersion>
|
||||
<DefineConstants>$(DefineConstants);STEAM</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(GamePlatform)' == 'Itch'">
|
||||
<GameVersion>2021.4.14i</GameVersion>
|
||||
<GameVersion>2021.5.10i</GameVersion>
|
||||
<DefineConstants>$(DefineConstants);ITCH</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user