Skip to content
This repository has been archived by the owner on Jan 24, 2023. It is now read-only.

Commit

Permalink
Added ability to disable/move user icon camera and VRC+ pet.
Browse files Browse the repository at this point in the history
  • Loading branch information
RequiDev committed Aug 21, 2021
1 parent 08f86c6 commit f1b0fe0
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 39 deletions.
107 changes: 68 additions & 39 deletions ReModCE/Components/ButtonAdjustmentsComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,93 +22,122 @@ internal class ButtonAdjustmentsComponent : ModComponent

private bool _canMoveButtons = true;

private ReQuickMenu _disablerMenu;
private ReQuickMenu _moverMenu;
private ReQuickMenu _sizerMenu;

public override void OnUiManagerInit(UiManager uiManager)
{
var menu = uiManager.MainMenu.AddSubMenu("Button Adjustments",
"Disable or move buttons around as you please");

var disablerMenu = menu.AddSubMenu("Disabler", "Disable VRChat buttons in your Quick Menu");
var moverMenu = menu.AddSubMenu("Mover", "Move buttons around in your Qick Menu");
var sizeMenu = menu.AddSubMenu("Sizer", "Make any button half size if needed");
_disablerMenu = menu.AddSubMenu("Disabler", "Disable VRChat buttons in your Quick Menu");
_moverMenu = menu.AddSubMenu("Mover", "Move buttons around in your Qick Menu");
_sizerMenu = menu.AddSubMenu("Sizer", "Make any button half size if needed");
var shortcutMenu = ExtendedQuickMenu.ShortcutMenu;
var childrenButtons = shortcutMenu.gameObject.GetComponentsInDirectChildren<Button>();
foreach (var button in childrenButtons)
{
var name = button.name;
if (name == "DevToolsButton") continue;

ReQuickToggle buttonToggle = null;
var buttonEnabled = new ConfigValue<bool>($"{name}Enabled", button.gameObject.activeSelf);
var buttonPosX = new ConfigValue<float>($"{name}PosX", button.transform.localPosition.x, isHidden:true);
var buttonPosY = new ConfigValue<float>($"{name}PosY", button.transform.localPosition.y, isHidden: true);
var buttonHalfSize = new ConfigValue<bool>($"{name}HalfSize", false, isHidden: true);
var text = button.gameObject.GetComponentsInDirectChildren<Text>();
if (text == null || text.Length == 0)
{
continue;
}

CreateUiForButton(button.gameObject, text[0].text);
}

CreateUiForButton(ExtendedQuickMenu.UserIconCameraButton.gameObject, "Camera Icon Button", size: false);
CreateUiForButton(ExtendedQuickMenu.VRCPlusPet.gameObject, "VRC+ Pet", false, size: false);
}

private void CreateUiForButton(GameObject gameObject, string name, bool hasButton = true, bool disable = true, bool move = true, bool size = true)
{
ReQuickToggle buttonToggle = null;
var buttonHalfSize = new ConfigValue<bool>($"{gameObject.name}HalfSize", false, isHidden: true);

if (disable)
{
var buttonEnabled = new ConfigValue<bool>($"{gameObject.name}Enabled", gameObject.gameObject.activeSelf);
buttonEnabled.OnValueChanged += () =>
{
buttonToggle.Toggle(buttonEnabled);
button.gameObject.SetActive(buttonEnabled);
gameObject.gameObject.SetActive(buttonEnabled);
};

var text = button.gameObject.GetComponentsInDirectChildren<Text>();
if (text == null || text.Length == 0)
buttonToggle = _disablerMenu.AddToggle($"{name}", $"Enable/Disable \"{name}\" button.",
buttonEnabled.SetValue, buttonEnabled);

if (buttonEnabled != gameObject.gameObject.activeSelf)
{
continue;
gameObject.gameObject.SetActive(buttonEnabled);
}
var buttonName = text[0].text;
}

buttonToggle = disablerMenu.AddToggle($"{buttonName}", $"Enable/Disable \"{buttonName}\" button.",
buttonEnabled.SetValue, buttonEnabled);
if (move)
{
var buttonPosX = new ConfigValue<float>($"{gameObject.name}PosX", gameObject.transform.localPosition.x,
isHidden: true);
var buttonPosY = new ConfigValue<float>($"{gameObject.name}PosY", gameObject.transform.localPosition.y,
isHidden: true);

moverMenu.AddButton($"{buttonName}", $"Move \"{buttonName}\" button", () =>
_moverMenu.AddButton($"{name}", $"Move \"{name}\" button", () =>
{
if (!_canMoveButtons) return;
if (_movingButton) return;
_originalButtonClickedEvent = button.onClick;
button.onClick = new Button.ButtonClickedEvent();

if (hasButton)
{
_originalButtonClickedEvent = gameObject.GetComponent<Button>().onClick;
gameObject.GetComponent<Button>().onClick = new Button.ButtonClickedEvent();
}

_movingButton = true;
_canMoveButtons = false;

ExtendedQuickMenu.Instance.SetCurrentPage(shortcutMenu.name);
MelonCoroutines.Start(MoveButtonCoroutine(button.gameObject, (openPrevMenu) =>
ExtendedQuickMenu.Instance.SetCurrentPage(ExtendedQuickMenu.ShortcutMenu.name);
MelonCoroutines.Start(MoveButtonCoroutine(gameObject.gameObject, (openPrevMenu) =>
{
button.onClick = _originalButtonClickedEvent;
buttonPosX.SetValue(button.transform.localPosition.x);
buttonPosY.SetValue(button.transform.localPosition.y);
button.transform.localPosition = new Vector3(button.transform.localPosition.x, button.transform.localPosition.y, 0f);
if (hasButton)
{
gameObject.GetComponent<Button>().onClick = _originalButtonClickedEvent;
}

buttonPosX.SetValue(gameObject.transform.localPosition.x);
buttonPosY.SetValue(gameObject.transform.localPosition.y);
gameObject.transform.localPosition = new Vector3(gameObject.transform.localPosition.x,
gameObject.transform.localPosition.y, 0f);
MelonCoroutines.Start(EnableCanMoveButtonsDelayed());
if (openPrevMenu)
{
moverMenu.Open();
_moverMenu.Open();
}
}));
});

gameObject.transform.localPosition = new Vector3(buttonPosX, buttonPosY);
}

sizeMenu.AddToggle($"{buttonName}", $"Half \"{buttonName}\" button", b =>
if (size)
{
_sizerMenu.AddToggle($"{name}", $"Half \"{name}\" button", b =>
{
buttonHalfSize.SetValue(b);
if (b)
{
button.GetComponent<RectTransform>().sizeDelta *= new Vector2(1f, 0.5f);
gameObject.GetComponent<RectTransform>().sizeDelta *= new Vector2(1f, 0.5f);
}
else
{
button.GetComponent<RectTransform>().sizeDelta *= new Vector2(1f, 2f);
gameObject.GetComponent<RectTransform>().sizeDelta *= new Vector2(1f, 2f);
}
}, buttonHalfSize);

var buttonPos = new Vector3(buttonPosX, buttonPosY);
if (buttonPos != Vector3.zero)
{
button.transform.localPosition = buttonPos;
}
if (buttonEnabled != button.gameObject.activeSelf)
{
button.gameObject.SetActive(buttonEnabled);
}
if (buttonHalfSize)
{
button.GetComponent<RectTransform>().sizeDelta *= new Vector2(1f, 0.5f);
gameObject.GetComponent<RectTransform>().sizeDelta *= new Vector2(1f, 0.5f);
}
}
}
Expand Down
24 changes: 24 additions & 0 deletions ReModCE/VRChat/ExtendedQuickMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ internal static class ExtendedQuickMenu
private static Transform _newElements;
private static Transform _infoBar;

private static Transform _userIconCameraButton;
private static Transform _vrcPlusPet;
private static Transform _reportWorldButton;
private static GameObject _blockButton;

Expand Down Expand Up @@ -92,6 +94,28 @@ public static Transform ReportWorldButton
return _reportWorldButton;
}
}
public static Transform VRCPlusPet
{
get
{
if (_vrcPlusPet == null)
{
_vrcPlusPet = ShortcutMenu.Find("VRCPlusThankYou");
}
return _vrcPlusPet;
}
}
public static Transform UserIconCameraButton
{
get
{
if (_userIconCameraButton == null)
{
_userIconCameraButton = ShortcutMenu.Find("UserIconCameraButton");
}
return _userIconCameraButton;
}
}

public static GameObject BlockButton
{
Expand Down

0 comments on commit f1b0fe0

Please sign in to comment.