4 Commits
Author SHA1 Message Date
Daemon 216a639303 Merge pull request #30 from MoltenMods/2021
Added region menu editor and Przebot region
2021-05-01 22:07:53 +01:00
Daemon f44179c040 Merge pull request #29 from MoltenMods/2021
Tidied code, fixed bugs, and added IP and port under custom region names in regions menu
2021-04-21 22:30:39 +01:00
Daemon 04711c4369 Merge pull request #25 from MoltenMods/2021
Added Reactor back
2021-04-14 12:30:46 +01:00
Daemon 913a02ddb6 Merge pull request #23 from MoltenMods/2021
Updated code for Reactor 0.4.0-ci.53
2021-04-13 19:09:07 +01:00
8 changed files with 192 additions and 86 deletions

No files matched your search

+8 -29
View File
@@ -31,7 +31,7 @@ namespace Unify.Controls
public AspectPosition Position { get; }
public UnityEngine.UI.Button.ButtonClickedEvent OnClick { get; }
private Button(string text)
private Button(string text, Vector2 size, Vector2 position)
{
GameObject = Object.Instantiate(_instance).DontDestroy();
@@ -40,46 +40,25 @@ 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(Text.preferredWidth / 2f + 0.1f, Text.preferredHeight / 2f + 0.1f, -100f);
Position.DistanceFromEdge = new Vector3(position.x, position.y, -100f);
_spriteRenderer.size = size;
_boxCollider2D.size = size;
}
public static async Task<Button> Create(string text)
public static async Task<Button> Create(string text, Vector2 size, Vector2 position)
{
await Initialized.Task;
return new Button(text);
return new Button(text, size, position);
}
public Button SetText(string newText)
public static async void Create(string text, Vector2 size, Vector2 position, Action<Button> callback)
{
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;
var newButton = await Create(text, size, position);
callback(newButton);
}
public static void InitializeBaseButton()
@@ -117,7 +96,7 @@ namespace Unify.Controls
_instance.GetComponent<ConditionalHide>().Destroy();
_instance.GetComponentInChildren<TextTranslatorTMP>().Destroy();
_instance.GetComponentInChildren<TextMeshPro>().text = "Button";
Initialized.SetResult(true);
}
}
+77
View File
@@ -0,0 +1,77 @@
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);
}
}
}
}
+97 -52
View File
@@ -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,12 +130,11 @@ 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++)
{
@@ -145,12 +144,10 @@ 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 >= extraRegionCount;
bool isCustomUserRegion = i >= OldRegions.Length + NewRegions.Length + ModRegions.Count;
float x = (!isCustomRegion && !showExtras ? 3f : 0) + (isCustomRegion ? 3f : 0) +
(isCustomUserRegion ? 3f : 0) - 4.25f - (!showOfficials || OldRegions.Length == 0 ? 1.5f : 0) -
(!showExtras || extraRegionCount == 0 ? 1.5f : 0);
(isCustomUserRegion ? 3f : 0) - 4.25f - (showOfficials ? 0 : 1.5f) - (showExtras ? 0 : 1.5f);
float y = i - (isCustomRegion ? OldRegions.Length : 0) -
(isCustomUserRegion ? NewRegions.Length + ModRegions.Count : 0);
@@ -180,14 +177,17 @@ 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,7 +195,6 @@ 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;
@@ -207,6 +206,12 @@ 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);
}
}
}
@@ -217,51 +222,75 @@ 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;
internal static async void SetUp()
public static async void SetUp()
{
await SetUpSwitchButton();
await SetUpToggleOfficialsButton();
await SetUpToggleExtrasButton();
}
_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);
private static void SetRegionsEditorVisibility(bool visible)
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);
}
public static void ShowRegionsEditor()
{
IsActive = visible;
_toggleOfficialsButton.GameObject.SetActive(visible);
_toggleExtrasButton.GameObject.SetActive(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);*/
RegionsPatch.RegionMenuPatches.RefreshRegionMenu();
if (visible)
{
_switchButton.Text.text = "Back";
RegionsPatch.DirectConnect.gameObject.SetActive(false);
}
else
{
_switchButton.Text.text = "Edit";
RegionsPatch.RegionMenuPatches.RefreshDirectConnectButton();
}
RegionsPatch.DirectConnect.gameObject.SetActive(false);
}
private static async Task SetUpSwitchButton()
public static void HideRegionsEditor()
{
_switchButton = await Controls.Button.Create("Edit");
_switchButton.SetSize(new Vector2(0.8f, 0.4f)).SetDistanceFromEdge(new Vector2(0.5f, 0.3f));
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.OnClick.AddListener((Action) (() =>
{
SetRegionsEditorVisibility(!IsActive);
if (IsActive) HideRegionsEditor();
else ShowRegionsEditor();
}));
}
private static async Task SetUpToggleOfficialsButton()
private static void SetUpToggleOfficialsButton(Controls.Button button)
{
_toggleOfficialsButton = await Controls.Button.Create("Toggle Official Regions");
_toggleOfficialsButton.SetSize(new Vector2(2f, 0.4f)).SetDistanceFromEdge(new Vector2(1.1f, 1.3f));
_toggleOfficialsButton = button;
_toggleOfficialsButton.OnClick.AddListener((Action) (() =>
{
UnifyPlugin.ShowOfficialRegions.Value = !UnifyPlugin.ShowOfficialRegions.Value;
@@ -269,11 +298,10 @@ namespace Unify.Patches
}));
}
private static async Task SetUpToggleExtrasButton()
private static void SetUpToggleExtrasButton(Controls.Button button)
{
_toggleExtrasButton = await Controls.Button.Create("Toggle Extra Regions");
_toggleExtrasButton.SetSize(new Vector2(2f, 0.4f)).SetDistanceFromEdge(new Vector2(1.1f, 1.8f));
_toggleExtrasButton = button;
_toggleExtrasButton.OnClick.AddListener((Action) (() =>
{
UnifyPlugin.ShowExtraRegions.Value = !UnifyPlugin.ShowExtraRegions.Value;
@@ -281,13 +309,35 @@ 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);
}
}
@@ -306,17 +356,12 @@ namespace Unify.Patches
[HarmonyPrefix]
public static bool DisableRegionButtonsPatch()
{
if (IsActive) return false;
Hide();
return true;
return !IsActive;
}
private static void Hide()
{
if (!RegionsPatch.DirectConnect) return;
SetRegionsEditorVisibility(false);
HideRegionsEditor();
_switchButton.GameObject.SetActive(false);
RegionsPatch.DirectConnect.gameObject.SetActive(false);
+6 -1
View File
@@ -21,7 +21,7 @@ namespace Unify
{
public const string Id = "daemon.unify";
private const string Name = "Unify";
private const string Version = "5.0.0";
private const string Version = "4.2.0";
public static ConfigFile ConfigFile { get; private set; }
@@ -39,9 +39,14 @@ namespace Unify
ShowExtraRegions = ConfigFile.Bind("Preferences", "Show Extra Regions", true,
"If the extra regions added by default in Unify should be shown when displaying the regions menu");
// Unpatches the modded handshake, because Impostor is STILL not fully updated yet
Harmony.Unpatch(typeof(UdpConnection).GetMethod("HandleSend"), HarmonyPatchType.Prefix,
ReactorPlugin.Id);
Harmony.PatchAll();
Button.InitializeBaseButton();
// Popup.InitializeBasePopup();
RegionsEditor.SetUp();
}
+4 -4
View File
@@ -1,20 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Version>5.0.1</Version>
<Mappings>DaemonBeast/Mappings:0.6.0</Mappings>
<Version>4.2.0</Version>
<Mappings>NuclearPowered/Mappings:0.4.0</Mappings>
<Description>Region mod</Description>
<Authors>Daemon</Authors>
</PropertyGroup>
<PropertyGroup Condition="'$(GamePlatform)' == 'Steam'">
<GameVersion>2021.5.25s</GameVersion>
<GameVersion>2021.4.14s</GameVersion>
<DefineConstants>$(DefineConstants);STEAM</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(GamePlatform)' == 'Itch'">
<GameVersion>2021.5.25i</GameVersion>
<GameVersion>2021.4.14i</GameVersion>
<DefineConstants>$(DefineConstants);ITCH</DefineConstants>
</PropertyGroup>
Binary file not shown.
Binary file not shown.
Binary file not shown.