Support parent settings

This commit is contained in:
D1GQ committed 2024-08-25 22:01:14 -05:00
1 parent 4e3ae4d99a
commit d8391b28e7
10 files changed
+111 -48

No files matched your search

@@ -4,7 +4,6 @@ namespace BetterAmongUs;
public class BetterOptionCheckboxItem : BetterOptionItem
{
public BetterOptionItem? ThisParent;
private ToggleOption? ThisOption;
private bool? IsChecked;
@@ -24,7 +23,7 @@ public class BetterOptionCheckboxItem : BetterOptionItem
}
ToggleOption optionBehaviour = UnityEngine.Object.Instantiate<ToggleOption>(gameOptionsMenu.checkboxOrigin, Vector3.zero, Quaternion.identity, gameOptionsMenu.settingsContainer);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f - StaticSpacingNum * SpacingNum, -2f);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f, -2f);
SetUp(optionBehaviour);
optionBehaviour.OnValueChanged = new Action<OptionBehaviour>((option) => ValueChanged(id, option));
@@ -45,6 +44,7 @@ public class BetterOptionCheckboxItem : BetterOptionItem
Load(DefaultValue);
BetterOptionItems.Add(this);
obj = optionBehaviour.gameObject;
if (Parent != null)
{
@@ -53,10 +53,6 @@ public class BetterOptionCheckboxItem : BetterOptionItem
ThisParent = Parent;
Parent.ChildrenList.Add(this);
}
else
{
SpacingNum += StaticSpacingNumPlus;
}
return this;
}
@@ -102,5 +98,15 @@ public class BetterOptionCheckboxItem : BetterOptionItem
{
IsChecked = !IsChecked;
BetterDataManager.SaveSetting(Id, IsChecked.ToString());
if (IsParent)
{
bool Bool = ShowChildrenCondition();
foreach (var item in ChildrenList)
{
item.obj.SetActive(Bool);
}
UpdatePositions();
}
}
}
+11 -6
View File
@@ -5,7 +5,6 @@ namespace BetterAmongUs;
public class BetterOptionFloatItem : BetterOptionItem
{
public BetterOptionItem? ThisParent;
private NumberOption? ThisOption;
public float CurrentValue;
public FloatRange floatRange = new(0f, 180f);
@@ -33,7 +32,7 @@ public class BetterOptionFloatItem : BetterOptionItem
if (values.Length is < 3 or > 3) return null;
NumberOption optionBehaviour = UnityEngine.Object.Instantiate<NumberOption>(gameOptionsMenu.numberOptionOrigin, Vector3.zero, Quaternion.identity, gameOptionsMenu.settingsContainer);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f - StaticSpacingNum * SpacingNum, -2f);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f, -2f);
SetUp(optionBehaviour);
optionBehaviour.OnValueChanged = new Action<OptionBehaviour>((option) => ValueChanged(id, option));
@@ -69,6 +68,7 @@ public class BetterOptionFloatItem : BetterOptionItem
AdjustButtonsActiveState();
BetterOptionItems.Add(this);
obj = optionBehaviour.gameObject;
if (Parent != null)
{
@@ -77,10 +77,6 @@ public class BetterOptionFloatItem : BetterOptionItem
ThisParent = Parent;
Parent.ChildrenList.Add(this);
}
else
{
SpacingNum += StaticSpacingNumPlus;
}
return this;
}
@@ -197,5 +193,14 @@ public class BetterOptionFloatItem : BetterOptionItem
public override void ValueChanged(int id, OptionBehaviour optionBehaviour)
{
if (IsParent)
{
bool Bool = ShowChildrenCondition();
foreach (var item in ChildrenList)
{
item.obj.SetActive(Bool);
}
UpdatePositions();
}
}
}
+11 -6
View File
@@ -4,7 +4,6 @@ namespace BetterAmongUs;
public class BetterOptionIntItem : BetterOptionItem
{
public BetterOptionItem? ThisParent;
private NumberOption? ThisOption;
public int CurrentValue;
public IntRange intRange = new(0, 180);
@@ -32,7 +31,7 @@ public class BetterOptionIntItem : BetterOptionItem
if (values.Length is < 3 or > 3) return null;
NumberOption optionBehaviour = UnityEngine.Object.Instantiate<NumberOption>(gameOptionsMenu.numberOptionOrigin, Vector3.zero, Quaternion.identity, gameOptionsMenu.settingsContainer);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f - StaticSpacingNum * SpacingNum, -2f);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f, -2f);
SetUp(optionBehaviour);
optionBehaviour.OnValueChanged = new Action<OptionBehaviour>((option) => ValueChanged(id, option));
@@ -68,6 +67,7 @@ public class BetterOptionIntItem : BetterOptionItem
AdjustButtonsActiveState();
BetterOptionItems.Add(this);
obj = optionBehaviour.gameObject;
if (Parent != null)
{
@@ -76,10 +76,6 @@ public class BetterOptionIntItem : BetterOptionItem
ThisParent = Parent;
Parent.ChildrenList.Add(this);
}
else
{
SpacingNum += StaticSpacingNumPlus;
}
return this;
}
@@ -196,5 +192,14 @@ public class BetterOptionIntItem : BetterOptionItem
public override void ValueChanged(int id, OptionBehaviour optionBehaviour)
{
if (IsParent)
{
bool Bool = ShowChildrenCondition();
foreach (var item in ChildrenList)
{
item.obj.SetActive(Bool);
}
UpdatePositions();
}
}
}
+39 -1
View File
@@ -1,4 +1,5 @@
using TMPro;
using BetterAmongUs.Patches;
using TMPro;
using UnityEngine;
namespace BetterAmongUs;
@@ -16,11 +17,48 @@ public class BetterOptionItem
public OptionBehaviour? Option;
public string? Name = "None";
public TextMeshPro? TitleText;
public GameObject? obj;
public BetterOptionItem? ThisParent;
public bool IsParent => ChildrenList.Count > 0;
public List<BetterOptionItem> ChildrenList = [];
public virtual bool ShowChildrenCondition() => false;
public static void UpdatePositions()
{
SpacingNum = 0f;
foreach (var item in BetterOptionItems)
{
try
{
item.obj.transform.SetLocalY(2f);
SpacingNum += item switch
{
BetterOptionHeaderItem => 0.1f,
BetterOptionDividerItem => 0.15f,
_ => 0f,
};
item.obj.transform.SetLocalY(2f - 1f * SpacingNum);
if (item.obj.active == false) continue;
SpacingNum += item switch
{
BetterOptionHeaderItem => 0.75f,
BetterOptionDividerItem => 0.45f,
_ => 0.45f,
};
}
catch { }
}
GameSettingMenuPatch.BetterSettingsTab.scrollBar.SetYBoundsMax(1.25f * SpacingNum / 2);
GameSettingMenuPatch.BetterSettingsTab.scrollBar.ScrollRelative(new(0f, 0f));
}
public void SetUp(OptionBehaviour optionBehaviour)
{
SetData(optionBehaviour);
+11 -6
View File
@@ -4,7 +4,6 @@ namespace BetterAmongUs;
public class BetterOptionStringItem : BetterOptionItem
{
public BetterOptionItem? ThisParent;
private StringOption? ThisOption;
public string[] Values = [];
public int CurrentValue;
@@ -28,7 +27,7 @@ public class BetterOptionStringItem : BetterOptionItem
}
StringOption optionBehaviour = UnityEngine.Object.Instantiate<StringOption>(gameOptionsMenu.stringOptionOrigin, Vector3.zero, Quaternion.identity, gameOptionsMenu.settingsContainer);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f - StaticSpacingNum * SpacingNum, -2f);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f, -2f);
SetUp(optionBehaviour);
optionBehaviour.OnValueChanged = new Action<OptionBehaviour>((option) => ValueChanged(id, option));
@@ -60,6 +59,7 @@ public class BetterOptionStringItem : BetterOptionItem
AdjustButtonsActiveState();
BetterOptionItems.Add(this);
obj = optionBehaviour.gameObject;
if (Parent != null)
{
@@ -68,10 +68,6 @@ public class BetterOptionStringItem : BetterOptionItem
ThisParent = Parent;
Parent.ChildrenList.Add(this);
}
else
{
SpacingNum += StaticSpacingNumPlus;
}
return this;
}
@@ -165,5 +161,14 @@ public class BetterOptionStringItem : BetterOptionItem
public override void ValueChanged(int id, OptionBehaviour optionBehaviour)
{
if (IsParent)
{
bool Bool = ShowChildrenCondition();
foreach (var item in ChildrenList)
{
item.obj.SetActive(Bool);
}
UpdatePositions();
}
}
}
@@ -11,13 +11,11 @@ public class BetterOptionDividerItem : BetterOptionItem
return this;
}
SpacingNum += 0.15f;
Tab = gameOptionsMenu;
Name = "Divider";
CategoryHeaderMasked categoryHeaderMasked = UnityEngine.Object.Instantiate<CategoryHeaderMasked>(gameOptionsMenu.categoryHeaderOrigin, Vector3.zero, Quaternion.identity, gameOptionsMenu.settingsContainer);
categoryHeaderMasked.transform.localScale = Vector3.one * 0.63f;
categoryHeaderMasked.transform.localPosition = new Vector3(-0.903f, 2f - StaticSpacingNum * SpacingNum, -2f);
categoryHeaderMasked.transform.localPosition = new Vector3(-0.903f, 2f, -2f);
UnityEngine.Object.Destroy(categoryHeaderMasked.Background.gameObject);
UnityEngine.Object.Destroy(categoryHeaderMasked.Title.gameObject);
if (categoryHeaderMasked.Divider != null)
@@ -25,7 +23,8 @@ public class BetterOptionDividerItem : BetterOptionItem
categoryHeaderMasked.Divider.material.SetInt(PlayerMaterial.MaskLayer, maskLayer);
}
SpacingNum += 0.45f;
BetterOptionItems.Add(this);
obj = categoryHeaderMasked.gameObject;
return this;
}
@@ -11,13 +11,11 @@ public class BetterOptionHeaderItem : BetterOptionItem
return this;
}
SpacingNum += 0.1f;
Tab = gameOptionsMenu;
Name = name;
CategoryHeaderMasked categoryHeaderMasked = UnityEngine.Object.Instantiate<CategoryHeaderMasked>(gameOptionsMenu.categoryHeaderOrigin, Vector3.zero, Quaternion.identity, gameOptionsMenu.settingsContainer);
categoryHeaderMasked.transform.localScale = Vector3.one * 0.63f;
categoryHeaderMasked.transform.localPosition = new Vector3(-0.903f, 2f - StaticSpacingNum * SpacingNum, -2f);
categoryHeaderMasked.transform.localPosition = new Vector3(-0.903f, 2f, -2f);
categoryHeaderMasked.Title.text = name;
categoryHeaderMasked.Background.material.SetInt(PlayerMaterial.MaskLayer, maskLayer);
if (categoryHeaderMasked.Divider != null)
@@ -27,7 +25,8 @@ public class BetterOptionHeaderItem : BetterOptionItem
categoryHeaderMasked.Title.fontMaterial.SetFloat("_StencilComp", 3f);
categoryHeaderMasked.Title.fontMaterial.SetFloat("_Stencil", maskLayer);
SpacingNum += 0.75f;
BetterOptionItems.Add(this);
obj = categoryHeaderMasked.gameObject;
return this;
}
@@ -12,9 +12,8 @@ public class BetterOptionTitleItem : BetterOptionItem
}
ToggleOption optionBehaviour = UnityEngine.Object.Instantiate<ToggleOption>(gameOptionsMenu.checkboxOrigin, Vector3.zero, Quaternion.identity, gameOptionsMenu.settingsContainer);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f - StaticSpacingNum * SpacingNum, -2f);
optionBehaviour.transform.localPosition = new Vector3(0.952f, 2f, -2f);
SetUp(optionBehaviour);
SpacingNum += StaticSpacingNumPlus;
UnityEngine.Object.Destroy(optionBehaviour.CheckMark.transform.parent.gameObject);
UnityEngine.Object.Destroy(optionBehaviour.GetComponent<ToggleOption>());
@@ -40,6 +39,8 @@ public class BetterOptionTitleItem : BetterOptionItem
TitleText = optionBehaviour.TitleText;
BetterOptionItems.Add(this);
obj = optionBehaviour.gameObject;
return this;
}
+16 -11
View File
@@ -29,7 +29,6 @@ static class GameSettingMenuPatch
public static void SetupSettings(bool IsPreload = false)
{
BetterOptionItem.SpacingNum = 0;
BetterOptionItem.BetterOptionItems.Clear();
TitleList.Clear();
@@ -56,6 +55,10 @@ static class GameSettingMenuPatch
TitleList.Add(new BetterOptionDividerItem().Create(BetterSettingsTab));
TitleList.Add(new BetterOptionTitleItem().Create(BetterSettingsTab, $"<color=#f20>Experimental</color>"));
BetterGameSettings.ExperimentalDetectInvalidSabotage = new BetterOptionCheckboxItem().Create(100000, BetterSettingsTab, "Detect Invalid Sabotages", false);
new BetterOptionCheckboxItem().Create(10000, BetterSettingsTab, "CheckBox Test", true, BetterGameSettings.ExperimentalDetectInvalidSabotage);
new BetterOptionStringItem().Create(10001, BetterSettingsTab, "String Test", ["Test 1", "Test 2", "Test 3"], 0, BetterGameSettings.ExperimentalDetectInvalidSabotage);
new BetterOptionFloatItem().Create(10002, BetterSettingsTab, "Float Test 1", [0f, 180f, 2.5f], 0f, "", "", BetterGameSettings.ExperimentalDetectInvalidSabotage);
new BetterOptionIntItem().Create(10003, BetterSettingsTab, "Int Test", [0, 5, 1], 0, "", "", BetterGameSettings.ExperimentalDetectInvalidSabotage);
}
// Gameplay Settings
@@ -76,18 +79,12 @@ static class GameSettingMenuPatch
}
/*
new BetterOptionCheckboxItem().Create(0, BetterSettingsTab, "CheckBox Test", true);
new BetterOptionStringItem().Create(1, BetterSettingsTab, "String Test", ["Test 1", "Test 2", "Test 3"]);
new BetterOptionFloatItem().Create(2, BetterSettingsTab, "Float Test 1", [0f, 180f, 2.5f], 0f, "");
new BetterOptionIntItem().Create(5, BetterSettingsTab, "Int Test", [0, 5, 1], 0, "");
new BetterOptionCheckboxItem().Create(10000, BetterSettingsTab, "CheckBox Test", true);
new BetterOptionStringItem().Create(10001, BetterSettingsTab, "String Test", ["Test 1", "Test 2", "Test 3"], 0);
new BetterOptionFloatItem().Create(10002, BetterSettingsTab, "Float Test 1", [0f, 180f, 2.5f], 0f, "", "");
new BetterOptionIntItem().Create(10003, BetterSettingsTab, "Int Test", [0, 5, 1], 0, "", "");
new BetterOptionHeaderItem().Create(BetterSettingsTab, "<color=#4f92ff>Test Settings 2</color>");
*/
if (BetterSettingsTab != null)
{
BetterSettingsTab.scrollBar.SetYBoundsMax(1.25f * BetterOptionItem.SpacingNum / 2);
BetterSettingsTab.InitializeControllerNavigation();
}
}
private static void Initialize()
@@ -102,8 +99,15 @@ static class GameSettingMenuPatch
{
item.TitleText.text = item.Name;
}
if (item.ThisParent != null)
{
item.obj.SetActive(item.ThisParent.ShowChildrenCondition());
}
}
}
BetterOptionItem.UpdatePositions();
}, 0.005f, shoudLog: false);
}
@@ -156,6 +160,7 @@ static class GameSettingMenuPatch
BetterSettingsButton.OnClick.AddListener(new Action(() =>
{
__instance.ChangeTab(3, false);
BetterOptionItem.UpdatePositions();
}));
BetterSettingsTab = UnityEngine.Object.Instantiate(__instance.GameSettingsTab, __instance.GameSettingsTab.transform.parent);
+2 -2
View File
@@ -27,8 +27,8 @@ public class Main : BasePlugin
public const string HotfixNum = "0";
public const bool IsHotFix = false;
public const string PluginGuid = "com.d1gq.betteramongus";
public const string PluginVersion = "1.1.0";
public const string ReleaseDate = "08.24.2024"; // mm/dd/yyyy
public const string PluginVersion = "1.1.1";
public const string ReleaseDate = "08.25.2024"; // mm/dd/yyyy
public const string Github = "https://github.com/D1GQ/BetterAmongUs-Public";
public const string Discord = "https://discord.gg/vjYrXpzNAn";