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

Commit 115a142

Browse files
authored
Merge pull request #2 from imxLucid/master
Add Funny Slider
2 parents 392ef24 + 5104ca0 commit 115a142

File tree

7 files changed

+185
-4
lines changed

7 files changed

+185
-4
lines changed

ReMod.Core.csproj

+2
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@
127127
<Compile Include="UI\QuickMenu\ReMenuButton.cs" />
128128
<Compile Include="UI\QuickMenu\ReMenuCategory.cs" />
129129
<Compile Include="UI\QuickMenu\ReMenuPage.cs" />
130+
<Compile Include="UI\QuickMenu\ReMenuSlider.cs" />
130131
<Compile Include="UI\QuickMenu\ReMenuToggle.cs" />
132+
<Compile Include="UI\QuickMenu\ReSliderCategory.cs" />
131133
<Compile Include="UI\QuickMenu\ReTabButton.cs" />
132134
<Compile Include="UI\ReUiButton.cs" />
133135
<Compile Include="UI\ReUiText.cs" />

UI/QuickMenu/ReCategoryPage.cs

+17-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public ReCategoryPage(string text, bool isRoot = false) : base(MenuPrefab, Quick
5252
Object.DestroyImmediate(GameObject.GetComponent<LaunchPadQMMenu>());
5353

5454
RectTransform.SetSiblingIndex(SiblingIndex);
55-
55+
5656
_isRoot = isRoot;
5757
var headerTransform = RectTransform.GetChild(0);
5858
Object.DestroyImmediate(headerTransform.Find("RightItemContainer/Button_QM_Expand").gameObject);
@@ -138,6 +138,21 @@ public ReMenuCategory GetCategory(string name)
138138
return new ReMenuCategory(header, buttonContainer);
139139
}
140140

141+
public ReMenuSliderCategory AddSliderCategory(string title)
142+
{
143+
return GetSliderCategory(title) ?? new ReMenuSliderCategory(title, _container);
144+
}
145+
146+
public ReMenuSliderCategory GetSliderCategory(string name)
147+
{
148+
var headerTransform = _container.Find($"Header_{GetCleanName(name)}");
149+
if (headerTransform == null) return null;
150+
151+
var header = new ReMenuHeader(headerTransform);
152+
var sliderContainer = new ReMenuSliderContainer(_container.Find($"Buttons_{GetCleanName(name)}"));
153+
return new ReMenuSliderCategory(header, sliderContainer);
154+
}
155+
141156
public static ReCategoryPage Create(string text, bool isRoot)
142157
{
143158
return new ReCategoryPage(text, isRoot);
@@ -148,7 +163,7 @@ private static void FixLaunchpadScrolling()
148163
{
149164
var dashboard = QuickMenuEx.Instance.field_Public_Transform_0.Find("Window/QMParent/Menu_Dashboard").GetComponent<UIPage>();
150165
var scrollRect = dashboard.GetComponentInChildren<ScrollRect>();
151-
166+
152167
scrollRect.content.GetComponent<VerticalLayoutGroup>().childControlHeight = true;
153168
scrollRect.enabled = true;
154169
scrollRect.verticalScrollbar = scrollRect.transform.Find("Scrollbar").GetComponent<Scrollbar>(); ;

UI/QuickMenu/ReMenuCategory.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public ReMenuHeader(Transform transform) : base(transform)
4747
}
4848

4949
protected ReMenuHeader(GameObject original, Transform parent, Vector3 pos, string name, bool defaultState = true) : base(original, parent, pos, name, defaultState) { }
50-
protected ReMenuHeader(GameObject original, Transform parent, string name, bool defaultState = true) : base(original, parent, name, defaultState){}
50+
protected ReMenuHeader(GameObject original, Transform parent, string name, bool defaultState = true) : base(original, parent, name, defaultState) { }
5151
}
5252

5353
public class ReMenuHeaderCollapsible : ReMenuHeader

UI/QuickMenu/ReMenuPage.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public ReMenuPage(string text, bool isRoot = false) : base(MenuPrefab, QuickMenu
7878
// Get scroll stuff
7979
var scrollRect = RectTransform.Find("Scrollrect").GetComponent<ScrollRect>();
8080
_container = scrollRect.content;
81-
81+
8282
// copy properties of old grid layout
8383
var gridLayoutGroup = _container.Find("Buttons").GetComponent<GridLayoutGroup>();
8484

UI/QuickMenu/ReMenuSlider.cs

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using ReMod.Core.Unity;
3+
using ReMod.Core.VRChat;
4+
using TMPro;
5+
using UnityEngine;
6+
using UnityEngine.UI;
7+
using VRC.UI.Elements.Controls;
8+
9+
namespace ReMod.Core.UI.QuickMenu
10+
{
11+
public class ReMenuSlider : UiElement
12+
{
13+
private readonly Slider _sliderComponent;
14+
15+
private float _valueHolder;
16+
17+
public ReMenuSlider(string text, string tooltip, Action<float> onSlide, Transform parent, float defaultValue = 0, float minValue = 0, float maxValue = 10) : base(QuickMenuEx.SliderPrefab, parent, $"Slider_{text}")
18+
{
19+
GameObject.DestroyImmediate(GameObject.GetComponent<UIInvisibleGraphic>()); // Fix for having clickable area overlap main quickmenu ui
20+
21+
var name = GameObject.transform.GetChild(0).GetComponentInChildren<TextMeshProUGUI>();
22+
name.text = text;
23+
24+
var value = GameObject.transform.GetChild(1).GetComponentInChildren<TextMeshProUGUI>();
25+
value.text = defaultValue.ToString(); //This shit don't work
26+
27+
_sliderComponent = GameObject.GetComponentInChildren<Slider>();
28+
_sliderComponent.onValueChanged = new Slider.SliderEvent();
29+
_sliderComponent.onValueChanged.AddListener(new Action<float>(onSlide));
30+
_sliderComponent.onValueChanged.AddListener((Action<float>)delegate (float val) { value.text = val.ToString(); });
31+
_sliderComponent.minValue = minValue;
32+
_sliderComponent.maxValue = maxValue;
33+
_sliderComponent.value = defaultValue;
34+
35+
var uiTooltip = GameObject.GetComponent<VRC.UI.Elements.Tooltips.UiTooltip>();
36+
uiTooltip.field_Public_String_0 = tooltip;
37+
uiTooltip.field_Public_String_1 = tooltip;
38+
39+
Slide(defaultValue,false);
40+
41+
EnableDisableListener.RegisterSafe();
42+
var edl = GameObject.AddComponent<EnableDisableListener>();
43+
}
44+
45+
public void Slide(float value, bool callback = true)
46+
{
47+
_valueHolder = value;
48+
_sliderComponent.Set(value, callback);
49+
}
50+
}
51+
}

UI/QuickMenu/ReSliderCategory.cs

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using ReMod.Core.VRChat;
5+
using TMPro;
6+
using UnityEngine;
7+
using UnityEngine.UI;
8+
using VRC.UI.Elements;
9+
using Object = UnityEngine.Object;
10+
11+
namespace ReMod.Core.UI.QuickMenu
12+
{
13+
public class ReMenuSliderContainer : UiElement
14+
{
15+
private static GameObject _ContainerPrefab;
16+
internal static GameObject ContainerPrefab
17+
{
18+
get
19+
{
20+
if (_ContainerPrefab == null)
21+
{
22+
_ContainerPrefab = QuickMenuEx.Instance.field_Public_Transform_0
23+
.Find("Window/QMParent/Menu_AudioSettings/Content").gameObject;
24+
}
25+
return _ContainerPrefab;
26+
}
27+
}
28+
29+
public ReMenuSliderContainer(string name, Transform parent = null) : base(ContainerPrefab, parent == null ? ContainerPrefab.transform.parent : parent, $"Sliders_{name}")
30+
{
31+
foreach (var obj in RectTransform)
32+
{
33+
var control = obj.Cast<Transform>();
34+
if (control == null)
35+
{
36+
continue;
37+
}
38+
Object.Destroy(control.gameObject);
39+
}
40+
41+
var vlg = GameObject.GetComponent<VerticalLayoutGroup>();
42+
vlg.m_Padding = new RectOffset(64, 64, 0, 0);
43+
}
44+
45+
public ReMenuSliderContainer(Transform transform) : base(transform)
46+
{
47+
}
48+
}
49+
50+
public class ReMenuSliderCategory
51+
{
52+
public readonly ReMenuHeader Header;
53+
private readonly ReMenuSliderContainer _sliderContainer;
54+
55+
public string Title
56+
{
57+
get => Header.Title;
58+
set => Header.Title = value;
59+
}
60+
61+
public ReMenuSliderCategory(string title, Transform parent = null, bool collapsible = true)
62+
{
63+
if (collapsible)
64+
{
65+
var header = new ReMenuHeaderCollapsible(title, parent);
66+
header.OnToggle += b => _sliderContainer!.GameObject.SetActive(b);
67+
Header = header;
68+
}
69+
70+
else
71+
{
72+
var header = new ReMenuHeader(title, parent);
73+
Header = header;
74+
}
75+
_sliderContainer = new ReMenuSliderContainer(title, parent);
76+
77+
}
78+
79+
public ReMenuSliderCategory(ReMenuHeader headerElement, ReMenuSliderContainer container)
80+
{
81+
Header = headerElement;
82+
_sliderContainer = container;
83+
}
84+
85+
public ReMenuSlider AddSlider(string text, string tooltip, Action<float> onSlide, float defaultValue = 0, float minValue = 0, float maxValue = 10)
86+
{
87+
var slider = new ReMenuSlider(text, tooltip, onSlide, _sliderContainer.RectTransform, defaultValue, minValue, maxValue);
88+
return slider;
89+
}
90+
91+
public ReMenuSlider AddSlider(string text, string tooltip, ConfigValue<float> configValue, float defaultValue = 0, float minValue = 0, float maxValue = 10)
92+
{
93+
var slider = new ReMenuSlider(text, tooltip, configValue.SetValue, _sliderContainer.RectTransform, configValue, minValue, maxValue);
94+
return slider;
95+
}
96+
97+
}
98+
}

VRChat/QuickMenuEx.cs

+15
Original file line numberDiff line numberDiff line change
@@ -162,5 +162,20 @@ public static GameObject TogglePrefab
162162
return _togglePrefab;
163163
}
164164
}
165+
166+
private static GameObject _sliderPrefab;
167+
public static GameObject SliderPrefab
168+
{
169+
get
170+
{
171+
if (_sliderPrefab == null)
172+
{
173+
_sliderPrefab = QuickMenuEx.Instance.field_Public_Transform_0
174+
//UserInterface/Canvas_QuickMenu(Clone)/Container/Window/QMParent/Menu_AudioSettings/Content/Audio/VolumeSlider_Master/Slider/
175+
.Find("Window/QMParent/Menu_AudioSettings/Content/Audio/VolumeSlider_Master").gameObject;
176+
}
177+
return _sliderPrefab;
178+
}
179+
}
165180
}
166181
}

0 commit comments

Comments
 (0)