The BepInEx console will not appear when launching like it does for other games on Thunderstore (you can turn it back on in your BepInEx.cfg file). If your PEAK crashes on startup, add -dx12 to your launch parameters.
Decompiled source of SkinColorSliders v1.5.0
SkinColorSliders/SkinColorSliders.dll
Decompiled a month ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading; using BepInEx; using BepInEx.Configuration; using HSVPicker; using HarmonyLib; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Photon.Pun; using Photon.Realtime; using PhotonCustomPropsUtils; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SkinColorSliders")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.5.0")] [assembly: AssemblyInformationalVersion("1.5.0+b2d0e7e1863e404a8ec899a9086ff36892a54c90")] [assembly: AssemblyProduct("SkinColorSliders")] [assembly: AssemblyTitle("SkinColorSliders")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.5.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } [Serializable] public class ColorChangedEvent : UnityEvent<Color> { } public enum ColorValues { R, G, B, A, Hue, Saturation, Value } public class HSVChangedEvent : UnityEvent<float, float, float> { } public class SliderOnChangeEndEvent : UnityEvent<float> { } namespace HSVPicker { [AddComponentMenu("UI/BoxSlider", 35)] [RequireComponent(typeof(RectTransform))] public class BoxSlider : Selectable, IDragHandler, IEventSystemHandler, IInitializePotentialDragHandler, ICanvasElement { public enum Direction { LeftToRight, RightToLeft, BottomToTop, TopToBottom } [Serializable] public class BoxSliderEvent : UnityEvent<float, float> { } private enum Axis { Horizontal, Vertical } [SerializeField] private RectTransform m_HandleRect; [Space(6f)] [SerializeField] private float m_MinValue = 0f; [SerializeField] private float m_MaxValue = 1f; [SerializeField] private bool m_WholeNumbers = false; [SerializeField] private float m_Value = 1f; [SerializeField] private float m_ValueY = 1f; [Space(6f)] [SerializeField] private BoxSliderEvent m_OnValueChanged = new BoxSliderEvent(); private Transform m_HandleTransform; private RectTransform m_HandleContainerRect; private Vector2 m_Offset = Vector2.zero; private DrivenRectTransformTracker m_Tracker; public RectTransform handleRect { get { return m_HandleRect; } set { if (SetClass(ref m_HandleRect, value)) { UpdateCachedReferences(); UpdateVisuals(); } } } public float minValue { get { return m_MinValue; } set { if (SetStruct(ref m_MinValue, value)) { Set(m_Value); SetY(m_ValueY); UpdateVisuals(); } } } public float maxValue { get { return m_MaxValue; } set { if (SetStruct(ref m_MaxValue, value)) { Set(m_Value); SetY(m_ValueY); UpdateVisuals(); } } } public bool wholeNumbers { get { return m_WholeNumbers; } set { if (SetStruct(ref m_WholeNumbers, value)) { Set(m_Value); SetY(m_ValueY); UpdateVisuals(); } } } public float value { get { if (wholeNumbers) { return Mathf.Round(m_Value); } return m_Value; } set { Set(value); } } public float normalizedValue { get { if (Mathf.Approximately(minValue, maxValue)) { return 0f; } return Mathf.InverseLerp(minValue, maxValue, value); } set { this.value = Mathf.Lerp(minValue, maxValue, value); } } public float valueY { get { if (wholeNumbers) { return Mathf.Round(m_ValueY); } return m_ValueY; } set { SetY(value); } } public float normalizedValueY { get { if (Mathf.Approximately(minValue, maxValue)) { return 0f; } return Mathf.InverseLerp(minValue, maxValue, valueY); } set { valueY = Mathf.Lerp(minValue, maxValue, value); } } public BoxSliderEvent onValueChanged { get { return m_OnValueChanged; } set { m_OnValueChanged = value; } } private float stepSize => wholeNumbers ? 1f : ((maxValue - minValue) * 0.1f); protected BoxSlider() { }//IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) public virtual void Rebuild(CanvasUpdate executing) { } public void LayoutComplete() { } public void GraphicUpdateComplete() { } public static bool SetClass<T>(ref T currentValue, T newValue) where T : class { if ((currentValue == null && newValue == null) || (currentValue != null && currentValue.Equals(newValue))) { return false; } currentValue = newValue; return true; } public static bool SetStruct<T>(ref T currentValue, T newValue) where T : struct { if (currentValue.Equals(newValue)) { return false; } currentValue = newValue; return true; } protected override void OnEnable() { ((Selectable)this).OnEnable(); UpdateCachedReferences(); Set(m_Value, sendCallback: false); SetY(m_ValueY, sendCallback: false); UpdateVisuals(); } protected override void OnDisable() { ((DrivenRectTransformTracker)(ref m_Tracker)).Clear(); ((Selectable)this).OnDisable(); } private void UpdateCachedReferences() { if (Object.op_Implicit((Object)(object)m_HandleRect)) { m_HandleTransform = ((Component)m_HandleRect).transform; if ((Object)(object)m_HandleTransform.parent != (Object)null) { m_HandleContainerRect = ((Component)m_HandleTransform.parent).GetComponent<RectTransform>(); } } else { m_HandleContainerRect = null; } } private void Set(float input) { Set(input, sendCallback: true); } private void Set(float input, bool sendCallback) { float num = Mathf.Clamp(input, minValue, maxValue); if (wholeNumbers) { num = Mathf.Round(num); } if (!m_Value.Equals(num)) { m_Value = num; UpdateVisuals(); if (sendCallback) { ((UnityEvent<float, float>)m_OnValueChanged).Invoke(num, valueY); } } } private void SetY(float input) { SetY(input, sendCallback: true); } private void SetY(float input, bool sendCallback) { float num = Mathf.Clamp(input, minValue, maxValue); if (wholeNumbers) { num = Mathf.Round(num); } if (!m_ValueY.Equals(num)) { m_ValueY = num; UpdateVisuals(); if (sendCallback) { ((UnityEvent<float, float>)m_OnValueChanged).Invoke(value, num); } } } protected override void OnRectTransformDimensionsChange() { ((UIBehaviour)this).OnRectTransformDimensionsChange(); UpdateVisuals(); } private void UpdateVisuals() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) ((DrivenRectTransformTracker)(ref m_Tracker)).Clear(); if ((Object)(object)m_HandleContainerRect != (Object)null) { ((DrivenRectTransformTracker)(ref m_Tracker)).Add((Object)(object)this, m_HandleRect, (DrivenTransformProperties)3840); Vector2 zero = Vector2.zero; Vector2 one = Vector2.one; float num2 = (((Vector2)(ref one))[0] = normalizedValue); ((Vector2)(ref zero))[0] = num2; num2 = (((Vector2)(ref one))[1] = normalizedValueY); ((Vector2)(ref zero))[1] = num2; m_HandleRect.anchorMin = zero; m_HandleRect.anchorMax = one; } } private void UpdateDrag(PointerEventData eventData, Camera cam) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) RectTransform handleContainerRect = m_HandleContainerRect; if ((Object)(object)handleContainerRect != (Object)null) { Rect rect = handleContainerRect.rect; Vector2 val = ((Rect)(ref rect)).size; Vector2 val2 = default(Vector2); if (((Vector2)(ref val))[0] > 0f && RectTransformUtility.ScreenPointToLocalPointInRectangle(handleContainerRect, eventData.position, cam, ref val2)) { Vector2 val3 = val2; rect = handleContainerRect.rect; val2 = val3 - ((Rect)(ref rect)).position; val = val2 - m_Offset; float num = ((Vector2)(ref val))[0]; rect = handleContainerRect.rect; val = ((Rect)(ref rect)).size; float num2 = Mathf.Clamp01(num / ((Vector2)(ref val))[0]); normalizedValue = num2; val = val2 - m_Offset; float num3 = ((Vector2)(ref val))[1]; rect = handleContainerRect.rect; val = ((Rect)(ref rect)).size; float num4 = Mathf.Clamp01(num3 / ((Vector2)(ref val))[1]); normalizedValueY = num4; } } } private bool MayDrag(PointerEventData eventData) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Invalid comparison between Unknown and I4 return ((UIBehaviour)this).IsActive() && ((Selectable)this).IsInteractable() && (int)eventData.button == 0; } public override void OnPointerDown(PointerEventData eventData) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) if (!MayDrag(eventData)) { return; } ((Selectable)this).OnPointerDown(eventData); m_Offset = Vector2.zero; if ((Object)(object)m_HandleContainerRect != (Object)null && RectTransformUtility.RectangleContainsScreenPoint(m_HandleRect, eventData.position, eventData.enterEventCamera)) { Vector2 offset = default(Vector2); if (RectTransformUtility.ScreenPointToLocalPointInRectangle(m_HandleRect, eventData.position, eventData.pressEventCamera, ref offset)) { m_Offset = offset; } m_Offset.y = 0f - m_Offset.y; } else { UpdateDrag(eventData, eventData.pressEventCamera); } } public virtual void OnDrag(PointerEventData eventData) { if (MayDrag(eventData)) { UpdateDrag(eventData, eventData.pressEventCamera); } } public virtual void OnInitializePotentialDrag(PointerEventData eventData) { eventData.useDragThreshold = false; } Transform ICanvasElement.get_transform() { return ((Component)this).transform; } } [RequireComponent(typeof(Image))] public class ColorImage : MonoBehaviour { public ColorPicker picker; private Image image; private void Awake() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) image = ((Component)this).GetComponent<Image>(); ((UnityEvent<Color>)picker.onValueChanged).AddListener((UnityAction<Color>)ColorChanged); ColorChanged(picker.CurrentColor); } private void OnDestroy() { ((UnityEvent<Color>)picker.onValueChanged).RemoveListener((UnityAction<Color>)ColorChanged); } private void ColorChanged(Color newColor) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) ((Graphic)image).color = newColor; } } [RequireComponent(typeof(TMP_Text))] public class ColorLabel : MonoBehaviour { public ColorPicker picker; public ColorValues type; public string prefix = "R: "; public float minValue = 0f; public float maxValue = 255f; public int precision = 0; [SerializeField] [HideInInspector] private TMP_Text label; private void Awake() { label = ((Component)this).GetComponent<TMP_Text>(); } private void OnEnable() { if (Application.isPlaying && (Object)(object)picker != (Object)null) { ((UnityEvent<Color>)picker.onValueChanged).AddListener((UnityAction<Color>)ColorChanged); ((UnityEvent<float, float, float>)picker.onHSVChanged).AddListener((UnityAction<float, float, float>)HSVChanged); } } private void OnDestroy() { if ((Object)(object)picker != (Object)null) { ((UnityEvent<Color>)picker.onValueChanged).RemoveListener((UnityAction<Color>)ColorChanged); ((UnityEvent<float, float, float>)picker.onHSVChanged).RemoveListener((UnityAction<float, float, float>)HSVChanged); } } private void ColorChanged(Color color) { UpdateValue(); } private void HSVChanged(float hue, float sateration, float value) { UpdateValue(); } private void UpdateValue() { if (!((Object)(object)label == (Object)null)) { if ((Object)(object)picker == (Object)null) { label.text = prefix + "-"; return; } float value = minValue + picker.GetValue(type) * (maxValue - minValue); label.text = prefix + ConvertToDisplayString(value); } } private string ConvertToDisplayString(float value) { if (precision > 0) { return value.ToString("f " + precision); } return Mathf.FloorToInt(value).ToString(); } } [DefaultExecutionOrder(0)] public class ColorPicker : MonoBehaviour { private float _hue = 0f; private float _saturation = 0f; private float _brightness = 0f; [SerializeField] private Color _color = Color.red; [Header("Setup")] public ColorPickerSetup Setup; [Header("Event")] public ColorChangedEvent onValueChanged = new ColorChangedEvent(); public HSVChangedEvent onHSVChanged = new HSVChangedEvent(); public Color CurrentColor { get { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) return _color; } set { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (!(CurrentColor == value)) { _color = value; RGBChanged(); SendChangedEvent(); } } } public float H { get { return _hue; } set { if (_hue != value) { _hue = value; HSVChanged(); SendChangedEvent(); } } } public float S { get { return _saturation; } set { if (_saturation != value) { _saturation = value; HSVChanged(); SendChangedEvent(); } } } public float V { get { return _brightness; } set { if (_brightness != value) { _brightness = value; HSVChanged(); SendChangedEvent(); } } } public float R { get { return _color.r; } set { if (_color.r != value) { _color.r = value; RGBChanged(); SendChangedEvent(); } } } public float G { get { return _color.g; } set { if (_color.g != value) { _color.g = value; RGBChanged(); SendChangedEvent(); } } } public float B { get { return _color.b; } set { if (_color.b != value) { _color.b = value; RGBChanged(); SendChangedEvent(); } } } private float A { get { return _color.a; } set { if (_color.a != value) { _color.a = value; SendChangedEvent(); } } } private void Awake() { //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_039e: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"[ColorPicker] Awake start"); Transform val = ((Component)this).transform.Find("Sliders/R"); if ((Object)(object)val == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: Sliders/R"); } Transform val2 = ((Component)this).transform.Find("Sliders/G"); if ((Object)(object)val2 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: Sliders/G"); } Transform val3 = ((Component)this).transform.Find("Sliders/B"); if ((Object)(object)val3 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: Sliders/B"); } RectTransform[] elements = (RectTransform[])(object)new RectTransform[3] { (RectTransform)/*isinst with value type is only supported in some contexts*/, (RectTransform)/*isinst with value type is only supported in some contexts*/, (RectTransform)/*isinst with value type is only supported in some contexts*/ }; ColorPickerSetup.UiElements rgbSliders = new ColorPickerSetup.UiElements { Elements = elements }; Transform val4 = ((Component)this).transform.Find("Sliders/H"); if ((Object)(object)val4 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: Sliders/H"); } Transform val5 = ((Component)this).transform.Find("Sliders/S"); if ((Object)(object)val5 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: Sliders/S"); } Transform val6 = ((Component)this).transform.Find("Sliders/V"); if ((Object)(object)val6 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: Sliders/V"); } RectTransform[] elements2 = (RectTransform[])(object)new RectTransform[3] { (RectTransform)/*isinst with value type is only supported in some contexts*/, (RectTransform)/*isinst with value type is only supported in some contexts*/, (RectTransform)/*isinst with value type is only supported in some contexts*/ }; ColorPickerSetup.UiElements hsvSliders = new ColorPickerSetup.UiElements { Elements = elements2 }; Transform val7 = ((Component)this).transform.Find("Sliders/Toggle"); if ((Object)(object)val7 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: Sliders/Toggle"); } RectTransform[] elements3 = (RectTransform[])(object)new RectTransform[1] { (RectTransform)/*isinst with value type is only supported in some contexts*/ }; ColorPickerSetup.UiElements uiElements = new ColorPickerSetup.UiElements { Elements = elements3 }; Transform val8 = ((Component)this).transform.Find("ColorField"); if ((Object)(object)val8 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: ColorField"); } RectTransform[] elements4 = (RectTransform[])(object)new RectTransform[1] { (RectTransform)/*isinst with value type is only supported in some contexts*/ }; ColorPickerSetup.UiElements uiElements2 = new ColorPickerSetup.UiElements { Elements = elements4 }; Transform val9 = ((Component)this).transform.Find("ColorField/InputField (TMP)"); if ((Object)(object)val9 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: ColorField/InputField (TMP)"); } RectTransform[] elements5 = (RectTransform[])(object)new RectTransform[1] { (RectTransform)/*isinst with value type is only supported in some contexts*/ }; ColorPickerSetup.UiElements colorCode = new ColorPickerSetup.UiElements { Elements = elements5 }; Transform val10 = ((Component)this).transform.Find("HSVField"); if ((Object)(object)val10 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: HSVField"); } RectTransform[] elements6 = (RectTransform[])(object)new RectTransform[1] { (RectTransform)/*isinst with value type is only supported in some contexts*/ }; ColorPickerSetup.UiElements colorBox = new ColorPickerSetup.UiElements { Elements = elements6 }; Transform val11 = ((Component)this).transform.Find("Sliders/A"); if ((Object)(object)val11 == (Object)null) { Debug.LogError((object)"[ColorPicker] Missing transform: Sliders/A"); } RectTransform[] elements7 = (RectTransform[])(object)new RectTransform[1] { (RectTransform)/*isinst with value type is only supported in some contexts*/ }; ColorPickerSetup.UiElements alphaSlidiers = new ColorPickerSetup.UiElements { Elements = elements7 }; Color[] defaultPresetColors = (Color[])(object)new Color[3] { Color.red, Color.green, Color.blue }; Debug.Log((object)"[ColorPicker] Assigning Setup object"); ColorPickerSetup obj = new ColorPickerSetup { ShowRgb = true, ShowHsv = false, ShowAlpha = false, ShowColorBox = true, ShowColorSliderToggle = true, AlphaSlidiers = alphaSlidiers, DefaultPresetColors = defaultPresetColors, RegenerateOnOpen = false, UserCanAddPresets = true, ShowHeader = ColorPickerSetup.ColorHeaderShowing.ShowAll, RgbSliders = rgbSliders, HsvSliders = hsvSliders, ColorToggleElement = uiElements }; object sliderToggleButtonText; if (uiElements == null) { sliderToggleButtonText = null; } else { RectTransform obj2 = uiElements.Elements[0]; sliderToggleButtonText = ((obj2 != null) ? ((Component)obj2).GetComponent<TextMeshProUGUI>() : null); } obj.SliderToggleButtonText = (TMP_Text)sliderToggleButtonText; obj.ColorHeader = uiElements2; obj.ColorPreview = uiElements2; obj.ColorCode = colorCode; obj.ColorBox = colorBox; obj.PresetColorsId = "default"; Setup = obj; Debug.Log((object)"[ColorPicker] Setup assigned, calling Regenerate"); Regenerate(); Debug.Log((object)"[ColorPicker] Awake finished"); } private void OnEnable() { if (Setup.RegenerateOnOpen) { Regenerate(); } } private void Regenerate() { Setup.AlphaSlidiers.Toggle(Setup.ShowAlpha); Setup.ColorToggleElement.Toggle(Setup.ShowColorSliderToggle); Setup.RgbSliders.Toggle(Setup.ShowRgb); Setup.HsvSliders.Toggle(Setup.ShowHsv); Setup.ColorBox.Toggle(Setup.ShowColorBox); HandleHeaderSetting(Setup.ShowHeader); UpdateColorToggleText(); RGBChanged(); } private void RGBChanged() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) HsvColor hsvColor = HSVUtil.ConvertRgbToHsv(CurrentColor); _hue = hsvColor.normalizedH; _saturation = hsvColor.normalizedS; _brightness = hsvColor.normalizedV; } private void HSVChanged() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) Color color = HSVUtil.ConvertHsvToRgb(_hue * 360f, _saturation, _brightness, _color.a); _color = color; } private void SendChangedEvent() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) ((UnityEvent<Color>)onValueChanged).Invoke(CurrentColor); ((UnityEvent<float, float, float>)onHSVChanged).Invoke(_hue, _saturation, _brightness); } public void AssignColor(ColorValues type, float value) { switch (type) { case ColorValues.R: R = value; break; case ColorValues.G: G = value; break; case ColorValues.B: B = value; break; case ColorValues.A: A = value; break; case ColorValues.Hue: H = value; break; case ColorValues.Saturation: S = value; break; case ColorValues.Value: V = value; break; } } public void AssignColor(Color color) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) CurrentColor = color; } public float GetValue(ColorValues type) { return type switch { ColorValues.R => R, ColorValues.G => G, ColorValues.B => B, ColorValues.A => A, ColorValues.Hue => H, ColorValues.Saturation => S, ColorValues.Value => V, _ => throw new NotImplementedException(""), }; } public void ToggleColorSliders() { Setup.ShowHsv = !Setup.ShowHsv; Setup.ShowRgb = !Setup.ShowRgb; Setup.HsvSliders.Toggle(Setup.ShowHsv); Setup.RgbSliders.Toggle(Setup.ShowRgb); ((UnityEvent<float, float, float>)onHSVChanged).Invoke(_hue, _saturation, _brightness); UpdateColorToggleText(); } private void UpdateColorToggleText() { if (!((Object)(object)Setup.SliderToggleButtonText == (Object)null)) { if (Setup.ShowRgb) { Setup.SliderToggleButtonText.text = "RGB"; } if (Setup.ShowHsv) { Setup.SliderToggleButtonText.text = "HSV"; } } } private void HandleHeaderSetting(ColorPickerSetup.ColorHeaderShowing setupShowHeader) { if (setupShowHeader == ColorPickerSetup.ColorHeaderShowing.Hide) { Setup.ColorHeader.Toggle(active: false); return; } Setup.ColorHeader.Toggle(active: true); Setup.ColorPreview.Toggle(setupShowHeader != ColorPickerSetup.ColorHeaderShowing.ShowColorCode); Setup.ColorCode.Toggle(setupShowHeader != ColorPickerSetup.ColorHeaderShowing.ShowColor); } } [Serializable] public class ColorPickerSetup { public enum ColorHeaderShowing { Hide, ShowColor, ShowColorCode, ShowAll } [Serializable] public class UiElements { public RectTransform[] Elements; public void Toggle(bool active) { for (int i = 0; i < Elements.Length; i++) { ((Component)Elements[i]).gameObject.SetActive(active); } } } public bool ShowRgb = true; public bool ShowHsv; public bool ShowAlpha = true; public bool ShowColorBox = true; public bool ShowColorSliderToggle = true; [Tooltip("Re-initialise the colour picker settings every time the picker is made active.")] public bool RegenerateOnOpen = false; [Tooltip("Enable the user to add presets, up to the maximum preset limit.")] public bool UserCanAddPresets = true; public ColorHeaderShowing ShowHeader = ColorHeaderShowing.ShowAll; public UiElements RgbSliders; public UiElements HsvSliders; public UiElements ColorToggleElement; public UiElements AlphaSlidiers; public UiElements ColorHeader; public UiElements ColorCode; public UiElements ColorPreview; public UiElements ColorBox; public TMP_Text SliderToggleButtonText; public string PresetColorsId = "default"; public Color[] DefaultPresetColors; } public static class ColorPresetManager { private static Dictionary<string, ColorPresetList> _presets = new Dictionary<string, ColorPresetList>(); public static ColorPresetList Get(string listId = "default") { if (!_presets.TryGetValue(listId, out ColorPresetList value)) { value = new ColorPresetList(listId); _presets.Add(listId, value); } return value; } } public class ColorPresetList { [CompilerGenerated] [DebuggerBrowsable(DebuggerBrowsableState.Never)] private UnityAction<List<Color>> m_OnColorsUpdated; public string ListId { get; private set; } public List<Color> Colors { get; private set; } public event UnityAction<List<Color>> OnColorsUpdated { [CompilerGenerated] add { UnityAction<List<Color>> val = this.m_OnColorsUpdated; UnityAction<List<Color>> val2; do { val2 = val; UnityAction<List<Color>> value2 = (UnityAction<List<Color>>)(object)Delegate.Combine((Delegate?)(object)val2, (Delegate?)(object)value); val = Interlocked.CompareExchange(ref this.m_OnColorsUpdated, value2, val2); } while (val != val2); } [CompilerGenerated] remove { UnityAction<List<Color>> val = this.m_OnColorsUpdated; UnityAction<List<Color>> val2; do { val2 = val; UnityAction<List<Color>> value2 = (UnityAction<List<Color>>)(object)Delegate.Remove((Delegate?)(object)val2, (Delegate?)(object)value); val = Interlocked.CompareExchange(ref this.m_OnColorsUpdated, value2, val2); } while (val != val2); } } public ColorPresetList(string listId, List<Color> colors = null) { if (colors == null) { colors = new List<Color>(); } Colors = colors; ListId = listId; } public void AddColor(Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) Colors.Add(color); if (this.OnColorsUpdated != null) { this.OnColorsUpdated.Invoke(Colors); } } public void UpdateList(IEnumerable<Color> colors) { Colors.Clear(); Colors.AddRange(colors); if (this.OnColorsUpdated != null) { this.OnColorsUpdated.Invoke(Colors); } } } public class ColorPresets : MonoBehaviour { public ColorPicker picker; public GameObject[] presets; public Image createPresetImage; private ColorPresetList _colors; private void Awake() { ((UnityEvent<Color>)picker.onValueChanged).AddListener((UnityAction<Color>)ColorChanged); } private void Start() { GenerateDefaultPresetColours(); } private void OnEnable() { if (picker.Setup.RegenerateOnOpen) { GenerateDefaultPresetColours(); } } private void GenerateDefaultPresetColours() { List<Color> colors = new List<Color>(); _colors = ColorPresetManager.Get(picker.Setup.PresetColorsId); _colors.UpdateList(colors); if (_colors.Colors.Count < picker.Setup.DefaultPresetColors.Length) { _colors.UpdateList(picker.Setup.DefaultPresetColors); } _colors.OnColorsUpdated += OnColorsUpdate; OnColorsUpdate(_colors.Colors); } private void OnColorsUpdate(List<Color> colors) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < presets.Length; i++) { if (colors.Count <= i) { presets[i].SetActive(false); continue; } presets[i].SetActive(true); ((Graphic)presets[i].GetComponent<Image>()).color = colors[i]; } ((Component)createPresetImage).gameObject.SetActive(colors.Count < presets.Length && picker.Setup.UserCanAddPresets); } public void CreatePresetButton() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) _colors.AddColor(picker.CurrentColor); } public void PresetSelect(Image sender) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) picker.CurrentColor = ((Graphic)sender).color; } private void ColorChanged(Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) ((Graphic)createPresetImage).color = color; } private void OnDestroy() { ((UnityEvent<Color>)picker.onValueChanged).RemoveListener((UnityAction<Color>)ColorChanged); _colors.OnColorsUpdated -= OnColorsUpdate; } } [RequireComponent(typeof(Slider))] [DefaultExecutionOrder(10)] public class ColorSlider : MonoBehaviour, IEndDragHandler, IEventSystemHandler { public ColorPicker hsvpicker; public ColorValues type; private Slider slider; private bool listen = true; [Header("Event")] public SliderOnChangeEndEvent onSliderChangeEndEvent = new SliderOnChangeEndEvent(); private void Awake() { //IL_006b: Unknown result type (might be due to invalid IL or missing references) slider = ((Component)this).GetComponent<Slider>(); ((UnityEvent<Color>)hsvpicker.onValueChanged).AddListener((UnityAction<Color>)ColorChanged); ((UnityEvent<float, float, float>)hsvpicker.onHSVChanged).AddListener((UnityAction<float, float, float>)HSVChanged); ((UnityEvent<float>)(object)slider.onValueChanged).AddListener((UnityAction<float>)SliderChanged); ColorChanged(hsvpicker.CurrentColor); HSVChanged(hsvpicker.H, hsvpicker.S, hsvpicker.V); } private void OnDestroy() { ((UnityEvent<Color>)hsvpicker.onValueChanged).RemoveListener((UnityAction<Color>)ColorChanged); ((UnityEvent<float, float, float>)hsvpicker.onHSVChanged).RemoveListener((UnityAction<float, float, float>)HSVChanged); ((UnityEvent<float>)(object)slider.onValueChanged).RemoveListener((UnityAction<float>)SliderChanged); } private void ColorChanged(Color newColor) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) listen = false; switch (type) { case ColorValues.R: slider.normalizedValue = newColor.r; break; case ColorValues.G: slider.normalizedValue = newColor.g; break; case ColorValues.B: slider.normalizedValue = newColor.b; break; case ColorValues.A: slider.normalizedValue = newColor.a; break; } } private void HSVChanged(float hue, float saturation, float value) { listen = false; switch (type) { case ColorValues.Hue: slider.normalizedValue = hue; break; case ColorValues.Saturation: slider.normalizedValue = saturation; break; case ColorValues.Value: slider.normalizedValue = value; break; } } private void SliderChanged(float newValue) { if (listen) { newValue = slider.normalizedValue; hsvpicker.AssignColor(type, newValue); } listen = true; } public virtual void OnEndDrag(PointerEventData eventData) { ((UnityEvent<float>)onSliderChangeEndEvent).Invoke(slider.normalizedValue); } public void SliderClicked(BaseEventData data) { SliderChanged(slider.value); } } [RequireComponent(typeof(RawImage))] [ExecuteInEditMode] public class ColorSliderImage : MonoBehaviour { public ColorPicker picker; public ColorValues type; public Direction direction; private RawImage image; private RectTransform rectTransform { get { Transform transform = ((Component)this).transform; return (RectTransform)(object)((transform is RectTransform) ? transform : null); } } private void Awake() { image = ((Component)this).GetComponent<RawImage>(); if (Application.isPlaying) { RegenerateTexture(); } } private void OnEnable() { if ((Object)(object)picker != (Object)null && Application.isPlaying) { ((UnityEvent<Color>)picker.onValueChanged).AddListener((UnityAction<Color>)ColorChanged); ((UnityEvent<float, float, float>)picker.onHSVChanged).AddListener((UnityAction<float, float, float>)HSVChanged); } } private void OnDisable() { if ((Object)(object)picker != (Object)null) { ((UnityEvent<Color>)picker.onValueChanged).RemoveListener((UnityAction<Color>)ColorChanged); ((UnityEvent<float, float, float>)picker.onHSVChanged).RemoveListener((UnityAction<float, float, float>)HSVChanged); } } private void OnDestroy() { if ((Object)(object)image.texture != (Object)null) { Object.DestroyImmediate((Object)(object)image.texture); } } private void ColorChanged(Color newColor) { switch (type) { case ColorValues.R: case ColorValues.G: case ColorValues.B: case ColorValues.Saturation: case ColorValues.Value: RegenerateTexture(); break; case ColorValues.A: case ColorValues.Hue: break; } } private void HSVChanged(float hue, float saturation, float value) { switch (type) { case ColorValues.R: case ColorValues.G: case ColorValues.B: case ColorValues.Saturation: case ColorValues.Value: RegenerateTexture(); break; case ColorValues.A: case ColorValues.Hue: break; } } private void RegenerateTexture() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Invalid comparison between Unknown and I4 //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Invalid comparison between Unknown and I4 //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Invalid comparison between Unknown and I4 //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Expected O, but got Unknown //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_03fb: Unknown result type (might be due to invalid IL or missing references) //IL_03fd: Unknown result type (might be due to invalid IL or missing references) //IL_03ff: Unknown result type (might be due to invalid IL or missing references) //IL_0401: Unknown result type (might be due to invalid IL or missing references) //IL_0404: Invalid comparison between Unknown and I4 //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_0328: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Unknown result type (might be due to invalid IL or missing references) //IL_0375: Unknown result type (might be due to invalid IL or missing references) //IL_037a: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0452: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_040b: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Invalid comparison between Unknown and I4 //IL_042b: Unknown result type (might be due to invalid IL or missing references) Color32 val = Color32.op_Implicit(((Object)(object)picker != (Object)null) ? picker.CurrentColor : Color.black); float num = (((Object)(object)picker != (Object)null) ? picker.H : 0f); float num2 = (((Object)(object)picker != (Object)null) ? picker.S : 0f); float num3 = (((Object)(object)picker != (Object)null) ? picker.V : 0f); bool flag = (int)direction == 2 || (int)direction == 3; bool flag2 = (int)direction == 3 || (int)direction == 1; int num4; switch (type) { case ColorValues.R: case ColorValues.G: case ColorValues.B: case ColorValues.A: num4 = 255; break; case ColorValues.Hue: num4 = 360; break; case ColorValues.Saturation: case ColorValues.Value: num4 = 100; break; default: throw new NotImplementedException(""); } Texture2D val2 = ((!flag) ? new Texture2D(num4, 1) : new Texture2D(1, num4)); ((Object)val2).hideFlags = (HideFlags)52; Color32[] array = (Color32[])(object)new Color32[num4]; switch (type) { case ColorValues.R: { for (byte b3 = 0; b3 < num4; b3++) { array[flag2 ? (num4 - 1 - b3) : b3] = new Color32(b3, val.g, val.b, byte.MaxValue); } break; } case ColorValues.G: { for (byte b = 0; b < num4; b++) { array[flag2 ? (num4 - 1 - b) : b] = new Color32(val.r, b, val.b, byte.MaxValue); } break; } case ColorValues.B: { for (byte b2 = 0; b2 < num4; b2++) { array[flag2 ? (num4 - 1 - b2) : b2] = new Color32(val.r, val.g, b2, byte.MaxValue); } break; } case ColorValues.A: { for (byte b4 = 0; b4 < num4; b4++) { array[flag2 ? (num4 - 1 - b4) : b4] = new Color32(b4, b4, b4, byte.MaxValue); } break; } case ColorValues.Hue: { for (int k = 0; k < num4; k++) { array[flag2 ? (num4 - 1 - k) : k] = Color32.op_Implicit(HSVUtil.ConvertHsvToRgb(k, 1.0, 1.0, 1f)); } break; } case ColorValues.Saturation: { for (int j = 0; j < num4; j++) { array[flag2 ? (num4 - 1 - j) : j] = Color32.op_Implicit(HSVUtil.ConvertHsvToRgb(num * 360f, (float)j / (float)num4, num3, 1f)); } break; } case ColorValues.Value: { for (int i = 0; i < num4; i++) { array[flag2 ? (num4 - 1 - i) : i] = Color32.op_Implicit(HSVUtil.ConvertHsvToRgb(num * 360f, num2, (float)i / (float)num4, 1f)); } break; } default: throw new NotImplementedException(""); } ((Texture)val2).wrapMode = (TextureWrapMode)1; val2.SetPixels32(array); val2.Apply(); if ((Object)(object)image.texture != (Object)null) { Object.DestroyImmediate((Object)(object)image.texture); } image.texture = (Texture)(object)val2; Direction val3 = direction; Direction val4 = val3; if ((int)val4 > 1) { if (val4 - 2 <= 1) { image.uvRect = new Rect(0f, 0f, 2f, 1f); } } else { image.uvRect = new Rect(0f, 0f, 1f, 2f); } } } [RequireComponent(typeof(TMP_InputField))] [DefaultExecutionOrder(10)] public class HexColorField : MonoBehaviour { public ColorPicker hsvpicker; public bool displayAlpha; private TMP_InputField hexInputField; private void Start() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) hexInputField = ((Component)this).GetComponent<TMP_InputField>(); ((UnityEvent<string>)(object)hexInputField.onEndEdit).AddListener((UnityAction<string>)UpdateColor); ((UnityEvent<Color>)hsvpicker.onValueChanged).AddListener((UnityAction<Color>)UpdateHex); UpdateHex(hsvpicker.CurrentColor); } private void OnDestroy() { ((UnityEvent<string>)(object)hexInputField.onValueChanged).RemoveListener((UnityAction<string>)UpdateColor); ((UnityEvent<Color>)hsvpicker.onValueChanged).RemoveListener((UnityAction<Color>)UpdateHex); } private void UpdateHex(Color newColor) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) hexInputField.text = ColorToHex(Color32.op_Implicit(newColor)); } private void UpdateColor(string newHex) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) if (!newHex.StartsWith("#")) { newHex = "#" + newHex; } Color currentColor = default(Color); if (ColorUtility.TryParseHtmlString(newHex, ref currentColor)) { hsvpicker.CurrentColor = currentColor; } else { Debug.Log((object)"hex value is in the wrong format, valid formats are: #RGB, #RGBA, #RRGGBB and #RRGGBBAA (# is optional)"); } } private string ColorToHex(Color32 color) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) return displayAlpha ? $"#{color.r:X2}{color.g:X2}{color.b:X2}{color.a:X2}" : $"#{color.r:X2}{color.g:X2}{color.b:X2}"; } } public static class HSVUtil { public static HsvColor ConvertRgbToHsv(Color color) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) return ConvertRgbToHsv((int)(color.r * 255f), (int)(color.g * 255f), (int)(color.b * 255f)); } public static HsvColor ConvertRgbToHsv(double r, double b, double g) { double num = 0.0; double num2 = Math.Min(Math.Min(r, g), b); double num3 = Math.Max(Math.Max(r, g), b); double num4 = num3 - num2; double s = ((!num3.Equals(0.0)) ? (num4 / num3) : 0.0); if (s.Equals(0.0)) { num = 360.0; } else { if (r.Equals(num3)) { num = (g - b) / num4; } else if (g.Equals(num3)) { num = 2.0 + (b - r) / num4; } else if (b.Equals(num3)) { num = 4.0 + (r - g) / num4; } num *= 60.0; if (num <= 0.0) { num += 360.0; } } HsvColor result = default(HsvColor); result.H = 360.0 - num; result.S = s; result.V = num3 / 255.0; return result; } public static Color ConvertHsvToRgb(double h, double s, double v, float alpha) { //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) double num = 0.0; double num2 = 0.0; double num3 = 0.0; if (s.Equals(0.0)) { num = v; num2 = v; num3 = v; } else { h = ((!h.Equals(360.0)) ? (h / 60.0) : 0.0); int num4 = (int)h; double num5 = h - (double)num4; double num6 = v * (1.0 - s); double num7 = v * (1.0 - s * num5); double num8 = v * (1.0 - s * (1.0 - num5)); switch (num4) { case 0: num = v; num2 = num8; num3 = num6; break; case 1: num = num7; num2 = v; num3 = num6; break; case 2: num = num6; num2 = v; num3 = num8; break; case 3: num = num6; num2 = num7; num3 = v; break; case 4: num = num8; num2 = num6; num3 = v; break; default: num = v; num2 = num6; num3 = num7; break; } } return new Color((float)num, (float)num2, (float)num3, alpha); } } public struct HsvColor { public double H; public double S; public double V; public float normalizedH { get { return (float)H / 360f; } set { H = (double)value * 360.0; } } public float normalizedS { get { return (float)S; } set { S = value; } } public float normalizedV { get { return (float)V; } set { V = value; } } public HsvColor(double h, double s, double v) { H = h; S = s; V = v; } public override string ToString() { return "{" + H.ToString("f2") + "," + S.ToString("f2") + "," + V.ToString("f2") + "}"; } } [RequireComponent(typeof(BoxSlider), typeof(RawImage))] [ExecuteInEditMode] [DefaultExecutionOrder(10)] public class SVBoxSlider : MonoBehaviour, IEndDragHandler, IEventSystemHandler { public ColorPicker picker; private BoxSlider slider; private RawImage image; private int textureWidth = 128; private int textureHeight = 128; private float lastH = -1f; private bool listen = true; [Header("Event")] public SliderOnChangeEndEvent onSliderChangeEndEvent = new SliderOnChangeEndEvent(); public RectTransform rectTransform { get { Transform transform = ((Component)this).transform; return (RectTransform)(object)((transform is RectTransform) ? transform : null); } } private void Awake() { slider = ((Component)this).GetComponent<BoxSlider>(); image = ((Component)this).GetComponent<RawImage>(); } private void OnEnable() { if (Application.isPlaying && (Object)(object)picker != (Object)null) { ((UnityEvent<float, float>)slider.onValueChanged).AddListener((UnityAction<float, float>)SliderChanged); ((UnityEvent<float, float, float>)picker.onHSVChanged).AddListener((UnityAction<float, float, float>)HSVChanged); HSVChanged(picker.H, picker.S, picker.V); } if (Application.isPlaying) { RegenerateSVTexture(); } } private void OnDisable() { if ((Object)(object)picker != (Object)null) { ((UnityEvent<float, float>)slider.onValueChanged).RemoveListener((UnityAction<float, float>)SliderChanged); ((UnityEvent<float, float, float>)picker.onHSVChanged).RemoveListener((UnityAction<float, float, float>)HSVChanged); } } private void OnDestroy() { if ((Object)(object)image.texture != (Object)null) { Object.DestroyImmediate((Object)(object)image.texture); } } private void SliderChanged(float saturation, float value) { if (listen) { picker.AssignColor(ColorValues.Saturation, saturation); picker.AssignColor(ColorValues.Value, value); } listen = true; } private void HSVChanged(float h, float s, float v) { if (!lastH.Equals(h)) { lastH = h; RegenerateSVTexture(); } if (!s.Equals(slider.normalizedValue)) { listen = false; slider.normalizedValue = s; } if (!v.Equals(slider.normalizedValueY)) { listen = false; slider.normalizedValueY = v; } } private void RegenerateSVTexture() { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) double h = (((Object)(object)picker != (Object)null) ? (picker.H * 360f) : 0f); if ((Object)(object)image.texture != (Object)null) { Object.DestroyImmediate((Object)(object)image.texture); } Texture2D val = new Texture2D(textureWidth, textureHeight); ((Texture)val).wrapMode = (TextureWrapMode)1; ((Object)val).hideFlags = (HideFlags)52; for (int i = 0; i < textureWidth; i++) { Color[] array = (Color[])(object)new Color[textureHeight]; for (int j = 0; j < textureHeight; j++) { array[j] = HSVUtil.ConvertHsvToRgb(h, (float)i / (float)textureWidth, (float)j / (float)textureHeight, 1f); } val.SetPixels(i, 0, 1, textureHeight, array); } val.Apply(); image.texture = (Texture)(object)val; } public virtual void OnEndDrag(PointerEventData eventData) { ((UnityEvent<float>)onSliderChangeEndEvent).Invoke(slider.normalizedValue); } } } namespace SkinColorSliders { public class ColorWheelUI : MonoBehaviour { public SkinColorManager.SkinPart currentSkinPart = SkinColorManager.SkinPart.Face; public Button currentButton; public Button currentPresetButton; public Button[] presetButtons; public Toggle faceBodyMatchToggle; public Toggle blushMatchToggle; public Toggle wholeBodyMatchToggle; public TextMeshProUGUI nameText; private void Start() { //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) BindSkinPartButtons(); BindToggles(); BindApplyButton(); presetButtons = ((Component)((Component)this).transform.Find("PresetsPanel")).GetComponentsInChildren<Button>(); nameText = ((Component)((Component)this).transform.Find("NamePanel/NameDisplay")).GetComponentInChildren<TextMeshProUGUI>(); TextMeshProUGUI text = GUIManager.instance.playerNames.playerNameText[0].text; ((TMP_Text)nameText).font = ((TMP_Text)text).font; ((TMP_Text)nameText).fontMaterial = Object.Instantiate<Material>(((TMP_Text)text).fontMaterial); ((Graphic)nameText).color = SkinColorManager.dummyColors.Get(SkinColorManager.SkinPart.NameFill); ((TMP_Text)nameText).fontMaterial.SetColor(ShaderUtilities.ID_OutlineColor, SkinColorManager.dummyColors.Get(SkinColorManager.SkinPart.NameOutline)); ((TMP_Text)nameText).ForceMeshUpdate(false, false); ((TMP_Text)nameText).text = Character.localCharacter.characterName; InitializePresets(); ((UnityEvent<Color>)SkinColorSliders.Instance.colorPicker.onValueChanged).AddListener((UnityAction<Color>)delegate { UpdatePreview(useAppliedLocal: false); }); } private void BindSkinPartButtons() { BindButton("TabPanel/FaceButton", delegate(Button btn) { BindSkinPart(btn, SkinColorManager.SkinPart.Face); }); BindButton("TabPanel/BodyButton", delegate(Button btn) { BindSkinPart(btn, SkinColorManager.SkinPart.Body); }); BindButton("TabPanel/BlushLButton", delegate(Button btn) { BindSkinPart(btn, SkinColorManager.SkinPart.Blush_L); }); BindButton("TabPanel/BlushRButton", delegate(Button btn) { BindSkinPart(btn, SkinColorManager.SkinPart.Blush_R); }); BindButton("TabPanel/SashButton", delegate(Button btn) { BindSkinPart(btn, SkinColorManager.SkinPart.Sash); }); BindButton("NamePanel/NameButtons/FillButton", delegate(Button btn) { BindSkinPart(btn, SkinColorManager.SkinPart.NameFill); }); BindButton("NamePanel/NameButtons/OutlineButton", delegate(Button btn) { BindSkinPart(btn, SkinColorManager.SkinPart.NameOutline); }); } private void BindToggles() { BindToggle("SettingsPanel/LeftPanel/FaceBodyMatchPanel/Toggle", delegate(Toggle t) { faceBodyMatchToggle = t; ((UnityEvent<bool>)(object)t.onValueChanged).AddListener((UnityAction<bool>)OnFaceBodyMatchChanged); }); BindToggle("SettingsPanel/LeftPanel/BlushMatchPanel/Toggle", delegate(Toggle t) { blushMatchToggle = t; ((UnityEvent<bool>)(object)t.onValueChanged).AddListener((UnityAction<bool>)OnBlushMatchChanged); }); BindToggle("SettingsPanel/LeftPanel/WholeBodyMatchPanel/Toggle", delegate(Toggle t) { wholeBodyMatchToggle = t; ((UnityEvent<bool>)(object)t.onValueChanged).AddListener((UnityAction<bool>)OnMatchEverythingChanged); }); } private void BindApplyButton() { BindButton("SettingsPanel/RightPanel/ApplyButtonContainer/ApplyButton", delegate(Button btn) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown ((UnityEvent)btn.onClick).AddListener(new UnityAction(OnApplyButtonClicked)); }); } private void BindSkinPart(Button button, SkinColorManager.SkinPart part) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown Button button2 = button; ((UnityEvent)button2.onClick).AddListener((UnityAction)delegate { OnSkinPartSelected(button2, part); }); } private void BindButton(string path, Action<Button> action) { Transform obj = ((Component)this).transform.Find(path); Button val = ((obj != null) ? ((Component)obj).GetComponent<Button>() : null); if ((Object)(object)val != (Object)null) { action(val); } } private void BindToggle(string path, Action<Toggle> action) { Transform obj = ((Component)this).transform.Find(path); Toggle val = ((obj != null) ? ((Component)obj).GetComponent<Toggle>() : null); if ((Object)(object)val != (Object)null) { action(val); } } private void InitializePresets() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown SetActivePresetButton(SkinColorSliders.Instance.configPresetIndex.Value); for (int i = 0; i < presetButtons.Length; i++) { int index = i; ((UnityEvent)presetButtons[i].onClick).AddListener((UnityAction)delegate { SetActivePresetButton(index); }); UpdatePresetButtonPreview(index); } } public void SetActivePresetButton(int index) { //IL_00b0: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)currentPresetButton != (Object)null) { ((Behaviour)((Component)currentPresetButton).GetComponent<Outline>()).enabled = false; } currentPresetButton = presetButtons[index]; ((Behaviour)((Component)currentPresetButton).GetComponent<Outline>()).enabled = true; SkinColorManager.SetCurrentPreset(index); SkinColorSliders.Instance.configPresetIndex.Value = index; SkinColorManager.SkinPartColorSet orCreatePreset = SkinColorManager.GetOrCreatePreset(index); faceBodyMatchToggle.isOn = orCreatePreset.faceBodyMatch; blushMatchToggle.isOn = orCreatePreset.blushMatch; wholeBodyMatchToggle.isOn = orCreatePreset.matchEverything; SkinColorManager.SetLocalColors(orCreatePreset); SkinColorSliders.Instance.colorPicker.CurrentColor = orCreatePreset.Get(currentSkinPart); UpdatePresetButtonPreview(index); UpdatePreview(useAppliedLocal: false); } public void UpdatePresetButtonPreview(int index) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) if (SkinColorManager.localPresets.TryGetValue(index, out SkinColorManager.SkinPartColorSet value)) { ((Graphic)((Component)((Component)presetButtons[index]).transform.Find("PresetColors/PresetFacePreview")).GetComponent<Image>()).color = value.colors[SkinColorManager.SkinPart.Face]; ((Graphic)((Component)((Component)presetButtons[index]).transform.Find("PresetColors/PresetBodyPreview")).GetComponent<Image>()).color = value.colors[SkinColorManager.SkinPart.Body]; ((Graphic)((Component)((Component)presetButtons[index]).transform.Find("PresetColors/PresetBlushLPreview")).GetComponent<Image>()).color = value.colors[SkinColorManager.SkinPart.Blush_L]; ((Graphic)((Component)((Component)presetButtons[index]).transform.Find("PresetColors/PresetBlushRPreview")).GetComponent<Image>()).color = value.colors[SkinColorManager.SkinPart.Blush_R]; } } private void OnSkinPartSelected(Button button, SkinColorManager.SkinPart part) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) currentSkinPart = part; if ((Object)(object)currentButton != (Object)null) { ((Graphic)((Component)currentButton).GetComponent<Image>()).color = Color.white; } currentButton = button; ((Graphic)((Component)button).GetComponent<Image>()).color = Color.clear; SkinColorSliders.Instance.colorPicker.CurrentColor = SkinColorManager.GetColors(PhotonNetwork.LocalPlayer.ActorNumber)?.Get(currentSkinPart) ?? Color.white; UpdatePreview(useAppliedLocal: false); } private void OnFaceBodyMatchChanged(bool value) { SkinColorManager.SetMatchFlag(SkinColorManager.currentPresetIndex, value); } private void OnBlushMatchChanged(bool value) { int currentPresetIndex = SkinColorManager.currentPresetIndex; bool? matchBlush = value; SkinColorManager.SetMatchFlag(currentPresetIndex, null, matchBlush); } private void OnMatchEverythingChanged(bool value) { int currentPresetIndex = SkinColorManager.currentPresetIndex; bool? matchEverything = value; SkinColorManager.SetMatchFlag(currentPresetIndex, null, null, matchEverything); } private void OnApplyButtonClicked() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) Color currentColor = SkinColorSliders.Instance.colorPicker.CurrentColor; SkinColorManager.ApplyColor(currentSkinPart, currentColor, SkinColorManager.currentPresetIndex, faceBodyMatchToggle.isOn, blushMatchToggle.isOn, wholeBodyMatchToggle.isOn); UpdatePresetButtonPreview(SkinColorManager.currentPresetIndex); UpdatePreview(useAppliedLocal: false); } private void UpdatePreview(bool useAppliedLocal) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) SkinColorManager.UpdateDummyColors(currentSkinPart, SkinColorSliders.Instance.colorPicker.CurrentColor, useAppliedLocal); if (currentSkinPart == SkinColorManager.SkinPart.NameFill) { ((Graphic)nameText).color = SkinColorSliders.Instance.colorPicker.CurrentColor; ((TMP_Text)nameText).fontMaterial.SetColor(ShaderUtilities.ID_OutlineColor, SkinColorManager.GetOrCreatePreset(SkinColorManager.currentPresetIndex).Get(SkinColorManager.SkinPart.NameOutline)); } else if (currentSkinPart == SkinColorManager.SkinPart.NameOutline) { ((Graphic)nameText).color = SkinColorManager.GetOrCreatePreset(SkinColorManager.currentPresetIndex).Get(SkinColorManager.SkinPart.NameFill); ((TMP_Text)nameText).fontMaterial.SetColor(ShaderUtilities.ID_OutlineColor, SkinColorSliders.Instance.colorPicker.CurrentColor); } else { ((Graphic)nameText).color = SkinColorManager.GetOrCreatePreset(SkinColorManager.currentPresetIndex).Get(SkinColorManager.SkinPart.NameFill); ((TMP_Text)nameText).fontMaterial.SetColor(ShaderUtilities.ID_OutlineColor, SkinColorManager.GetOrCreatePreset(SkinColorManager.currentPresetIndex).Get(SkinColorManager.SkinPart.NameOutline)); } ((TMP_Text)nameText).ForceMeshUpdate(false, false); } } [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resource1 { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { ResourceManager resourceManager = new ResourceManager("SkinColorSliders.Resource1", typeof(Resource1).Assembly); resourceMan = resourceManager; } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static byte[] colorsliders { get { object @object = ResourceManager.GetObject("colorsliders", resourceCulture); return (byte[])@object; } } internal Resource1() { } } public static class SkinColorManager { public enum SkinPart { Face, Body, Blush_L, Blush_R, Sash, NameFill, NameOutline } [Serializable] public class SkinPartColorSet { public Dictionary<SkinPart, Color> colors = new Dictionary<SkinPart, Color>(); public bool matchEverything; public bool blushMatch; public bool faceBodyMatch; public SkinPartColorSet() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) foreach (SkinPart value in Enum.GetValues(typeof(SkinPart))) { colors[value] = Color.white; } } public Color Get(SkinPart part) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) return colors[part]; } public void Set(SkinPart part, Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) colors[part] = color; } } public static SkinPartColorSet dummyColors = new SkinPartColorSet(); public static int currentIndex; public static int currentSashIndex; public static int currentPresetIndex = 0; public static bool currentFaceBodyMatch = false; public static bool currentBlushMatch = false; public static bool currentWholeBodyMatch = false; public static Dictionary<int, SkinPartColorSet> colorTable = new Dictionary<int, SkinPartColorSet>(); public static Dictionary<int, SkinPartColorSet> localPresets = new Dictionary<int, SkinPartColorSet>(); private static readonly string OldSavePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "presets.json"); private static readonly string SavePath = Path.Combine(Application.persistentDataPath, "SkinColorSliders", "presets.json"); public static SkinPartColorSet GetOrCreatePreset(int index) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) if (!localPresets.TryGetValue(index, out SkinPartColorSet value)) { value = new SkinPartColorSet(); value.Set(SkinPart.NameOutline, Color.black); localPresets[index] = value; SavePresets(); } return value; } public static SkinPartColorSet GetCurrentPreset() { return GetOrCreatePreset(currentPresetIndex); } public static void SetMatchFlag(int presetIndex, bool? matchFaceBody = null, bool? matchBlush = null, bool? matchEverything = null) { SkinPartColorSet orCreatePreset = GetOrCreatePreset(presetIndex); if (matchFaceBody.HasValue) { orCreatePreset.faceBodyMatch = matchFaceBody.Value; } if (matchBlush.HasValue) { orCreatePreset.blushMatch = matchBlush.Value; } if (matchEverything.HasValue) { orCreatePreset.matchEverything = matchEverything.Value; } SavePresets(); if (presetIndex == currentPresetIndex) { if (matchFaceBody.HasValue) { currentFaceBodyMatch = matchFaceBody.Value; } if (matchBlush.HasValue) { currentBlushMatch = matchBlush.Value; } if (matchEverything.HasValue) { currentWholeBodyMatch = matchEverything.Value; } } } public static void SetCurrentPresetMatchFlags(bool? matchFaceBody = null, bool? matchBlush = null, bool? matchEverything = null) { SetMatchFlag(currentPresetIndex, matchFaceBody, matchBlush, matchEverything); } public static void SetCurrentPreset(int presetIndex) { currentPresetIndex = presetIndex; SkinPartColorSet orCreatePreset = GetOrCreatePreset(presetIndex); currentFaceBodyMatch = orCreatePreset.faceBodyMatch; currentBlushMatch = orCreatePreset.blushMatch; currentWholeBodyMatch = orCreatePreset.matchEverything; } public static void ApplyColor(SkinPart part, Color color, int presetIndex, bool faceBodyMatch, bool blushMatch, bool matchEverything) { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) int actorNumber = PhotonNetwork.LocalPlayer.ActorNumber; SkinPartColorSet skinPartColorSet = GetColors(actorNumber) ?? new SkinPartColorSet(); if (matchEverything) { foreach (SkinPart value in Enum.GetValues(typeof(SkinPart))) { Color val = skinPartColorSet.Get(value); skinPartColorSet.Set(value, color); } } else { Color val2 = skinPartColorSet.Get(part); skinPartColorSet.Set(part, color); if (faceBodyMatch && (part == SkinPart.Face || part == SkinPart.Body)) { SkinPart part3 = ((part == SkinPart.Face) ? SkinPart.Body : SkinPart.Face); Color val3 = skinPartColorSet.Get(part3); skinPartColorSet.Set(part3, color); } if (blushMatch && (part == SkinPart.Blush_L || part == SkinPart.Blush_R)) { SkinPart part4 = ((part == SkinPart.Blush_L) ? SkinPart.Blush_R : SkinPart.Blush_L); Color val4 = skinPartColorSet.Get(part4); skinPartColorSet.Set(part4, color); } } SetLocalColors(skinPartColorSet); localPresets[presetIndex].colors = skinPartColorSet.colors; SavePresets(); } public static void ApplyColor(SkinPart part, Color color) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) ApplyColor(part, color, currentPresetIndex, currentFaceBodyMatch, currentBlushMatch, currentWholeBodyMatch); } public static void UpdateDummyColors(SkinPart currentPart, Color currentColor, bool faceBodyMatch, bool blushMatch, bool matchEverything, bool useAppliedLocal) { //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) SkinPartColorSet skinPartColorSet = GetColors(PhotonNetwork.LocalPlayer.ActorNumber) ?? new SkinPartColorSet(); SkinPartColorSet skinPartColorSet2 = new SkinPartColorSet(); if (useAppliedLocal || matchEverything) { foreach (SkinPart value in Enum.GetValues(typeof(SkinPart))) { skinPartColorSet2.Set(value, currentColor); } } else { foreach (SkinPart value2 in Enum.GetValues(typeof(SkinPart))) { Color color = skinPartColorSet.Get(value2); if (value2 == currentPart) { color = currentColor; } if (faceBodyMatch && (value2 == SkinPart.Face || value2 == SkinPart.Body) && (currentPart == SkinPart.Face || currentPart == SkinPart.Body)) { color = currentColor; } if (blushMatch && (value2 == SkinPart.Blush_L || value2 == SkinPart.Blush_R) && (currentPart == SkinPart.Blush_L || currentPart == SkinPart.Blush_R)) { color = currentColor; } skinPartColorSet2.Set(value2, color); } } SetDummyColors(skinPartColorSet2); } public static void UpdateDummyColors(SkinPart currentPart, Color currentColor, bool useAppliedLocal = false) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) UpdateDummyColors(currentPart, currentColor, currentFaceBodyMatch, currentBlushMatch, currentWholeBodyMatch, useAppliedLocal); } public static void SetDummyColors(SkinPartColorSet colors) { dummyColors = colors; PassportManager.instance.dummy.SetPlayerColor(0); } public static void SetLocalColors(SkinPartColorSet colorSet) { int actorNumber = PhotonNetwork.LocalPlayer.ActorNumber; bool isMasterClient = PhotonNetwork.IsMasterClient; foreach (KeyValuePair<SkinPart, Color> color in colorSet.colors) { } if (!colorTable.ContainsKey(actorNumber)) { colorTable[actorNumber] = new SkinPartColorSet(); } colorTable[actorNumber] = colorSet; SyncColorsToPhoton(actorNumber); CharacterCustomization.SetCharacterSkinColor(currentIndex); CharacterCustomization.SetCharacterSash(currentSashIndex); } private static void SyncColorsToPhoton(int actor) { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) if (!colorTable.TryGetValue(actor, out SkinPartColorSet value)) { return; } foreach (KeyValuePair<SkinPart, Color> color in value.colors) { } float[] array = new float[Enum.GetValues(typeof(SkinPart)).Length * 3]; int num = 0; foreach (SkinPart value2 in Enum.GetValues(typeof(SkinPart))) { Color val = value.Get(value2); array[num++] = val.r; array[num++] = val.g; array[num++] = val.b; } SkinColorSliders.Instance.manager.SetPlayerProperty("customSkinColors", (object)array); } public static Color? GetColor(int actorNumber, SkinPart part) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (colorTable.TryGetValue(actorNumber, out SkinPartColorSet value)) { return value.Get(part); } return null; } public static Color GetCurrentPresetColor(SkinPart part) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) SkinPartColorSet currentPreset = GetCurrentPreset(); return currentPreset.Get(part); } public static SkinPartColorSet GetColors(int actorNumber) { if (colorTable.TryGetValue(actorNumber, out SkinPartColorSet value)) { } return value; } public static void SavePresets() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown string contents = JsonConvert.SerializeObject((object)localPresets, new JsonSerializerSettings { Formatting = (Formatting)1, Converters = new List<JsonConverter> { (JsonConverter)(object)new ColorHexConverter() } }); File.WriteAllText(SavePath, contents); } public static void LoadPresets() { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown string directoryName = Path.GetDirectoryName(SavePath); if (!Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } if (!File.Exists(SavePath) && File.Exists(OldSavePath)) { try { File.Move(OldSavePath, SavePath); } catch (IOException) { File.Copy(OldSavePath, SavePath, overwrite: true); } } if (!File.Exists(SavePath)) { localPresets = new Dictionary<int, SkinPartColorSet>(); return; } string text = File.ReadAllText(SavePath); localPresets = JsonConvert.DeserializeObject<Dictionary<int, SkinPartColorSet>>(text, new JsonSerializerSettings { Converters = new List<JsonConverter> { (JsonConverter)(object)new ColorHexConverter() } }) ?? new Dictionary<int, SkinPartColorSet>(); if (localPresets.Count > 0) { SetCurrentPreset(0); } } } public class ColorHexConverter : JsonConverter<Color> { public override void WriteJson(JsonWriter writer, Color value, JsonSerializer serializer) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) writer.WriteValue("#" + ColorUtility.ToHtmlStringRGBA(value)); } public override Color ReadJson(JsonReader reader, Type objectType, Color existingValue, bool hasExistingValue, JsonSerializer serializer) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) Color result = default(Color); if (ColorUtility.TryParseHtmlString((string)reader.Value, ref result)) { result.a = 1f; return result; } return Color.white; } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.snosz.skincolorsliders", "SkinColorSliders", "1.5.0")] public class SkinColorSliders : BaseUnityPlugin { [HarmonyPatch(typeof(Character), "Awake")] private class CharacterAwakePatch { private static void Postfix(Character __instance) { if (__instance.IsLocal) { InitializeLocalCharacterColors(); } } } public static SkinColorSliders Instance; private static Harmony _harmony; public ConfigEntry<Color> configFaceColor; public ConfigEntry<Color> configBodyColor; public ConfigEntry<Color> configBlushLeftColor; public ConfigEntry<Color> configBlushRightColor; public ConfigEntry<int> configPresetIndex; public AssetBundle colorWheelUIBundle; public PhotonScopedManager manager; public GameObject colorWheelUI; public ColorWheelUI colorWheel; public ColorPicker colorPicker; private void Awake() { Instance = this; byte[] colorsliders = Resource1.colorsliders; colorWheelUIBundle = AssetBundle.LoadFromMemory(colorsliders); InitializeConfig(); AddPhotonManager(); _harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "com.snosz.skincolorsliders"); } private void InitializeConfig() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) configPresetIndex = ((BaseUnityPlugin)this).Config.Bind<int>("General", "ChosenPresetIndex", 0, "Index of preset to load first (0-6)"); configFaceColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "SkinColor", Color.white, "Face color to apply."); configBodyColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "BodyColor", Color.white, "Body color to apply."); configBlushLeftColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "BlushLeftColor", Color.white, "BlushLeft color to apply."); configBlushRightColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "BlushRightColor", Color.white, "BlushRight color to apply."); ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void AddPhotonManager() { manager = PhotonCustomPropsUtilsPlugin.GetManager("com.snosz.skincolorsliders"); manager.RegisterPlayerProperty<float[]>("customSkinColors", (PlayerEventType)1, (Action<Player, float[]>)delegate(Player targetPlayer, float[] val) { //IL_00a0: Unknown result type (might be due to invalid IL or missing references) int actorNumber2 = targetPlayer.ActorNumber; bool isLocal = targetPlayer.IsLocal; bool isMasterClient = PhotonNetwork.IsMasterClient; if (val != null) { SkinColorManager.SkinPartColorSet skinPartColorSet2 = new SkinColorManager.SkinPartColorSet(); int num5 = 0; Color color2 = default(Color); foreach (SkinColorManager.SkinPart value2 in Enum.GetValues(typeof(SkinColorManager.SkinPart))) { if (num5 + 2 >= val.Length) { break; } float num6 = val[num5++]; float num7 = val[num5++]; float num8 = val[num5++]; ((Color)(ref color2))..ctor(num6, num7, num8, 1f); skinPartColorSet2.Set(value2, color2); } SkinColorManager.colorTable[actorNumber2] = skinPartColorSet2; } }); manager.RegisterOnJoinedRoom((Action<Player>)delegate { //IL_00d4: Unknown result type (might be due to invalid IL or missing references) Dictionary<Player, float[]> allPlayerProperties = Instance.manager.GetAllPlayerProperties<float[]>("customSkinColors"); Color color = default(Color); foreach (KeyValuePair<Player, float[]> item in allPlayerProperties) { int actorNumber = item.Key.ActorNumber; float[] value = item.Value; if (value != null) { SkinColorManager.SkinPartColorSet skinPartColorSet = new SkinColorManager.SkinPartColorSet(); int num = 0; foreach (SkinColorManager.SkinPart value3 in Enum.GetValues(typeof(SkinColorManager.SkinPart))) { if (num + 2 >= value.Length) { break; } float num2 = value[num++]; float num3 = value[num++]; float num4 = value[num++]; ((Color)(ref color))..ctor(num2, num3, num4, 1f); skinPartColorSet.Set(value3, color); } SkinColorManager.colorTable[actorNumber] = skinPartColorSet; } } }); } public void CreateAndInitializeColorWheel(PassportManager passportManager) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Expected O, but got Unknown AssetBundle val = Instance.colorWheelUIBundle; GameObject val2 = val.LoadAsset<GameObject>("SkinColorSlidersUIThemed"); GameObject val3 = val.LoadAsset<GameObject>("SkinColorSlidersUIToggle"); GameObject wheelUI = Object.Instantiate<GameObject>(val2, ((Component)passportManager).transform.Find("PassportUI/Canvas/Panel")); wheelUI.transform.localScale = new Vector3(0.75f, 0.75f, 1f); wheelUI.transform.localPosition = new Vector3(-543.8375f, -8.1966f, 0f); wheelUI.SetActive(false); Instance.colorWheelUI = wheelUI; Instance.colorWheel = wheelUI.AddComponent<ColorWheelUI>(); Instance.colorPicker = wheelUI.GetComponentInChildren<ColorPicker>(); Instance.colorPicker.CurrentColor = Instance.configFaceColor.Value; GameObject val4 = Object.Instantiate<GameObject>(val3, ((Component)passportManager).transform.Find("PassportUI/Canvas/Panel/Panel/BG")); val4.transform.localScale = Vector3.one; val4.transform.localPosition = new Vector3(-317.2037f, -101.0918f, 0f); Button componentInChildren = val4.GetComponentInChildren<Button>(); ((UnityEvent)componentInChildren.onClick).AddListener((UnityAction)delegate { wheelUI.SetActive(!wheelUI.activeSelf); }); } public static void InitializeLocalCharacterColors() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) SkinColorManager.LoadPresets(); Dictionary<int, SkinColorManager.SkinPartColorSet> localPresets = SkinColorManager.localPresets; SkinColorManager.SkinPartColorSet value; if (localPresets.Count == 0) { value = new SkinColorManager.SkinPartColorSet(); value.Set(SkinColorManager.SkinPart.Face, Instance.configFaceColor.Value); value.Set(SkinColorManager.SkinPart.Body, Instance.configBodyColor.Value); value.Set(SkinColorManager.SkinPart.Blush_L, Instance.configBlushLeftColor.Value); value.Set(SkinColorManager.SkinPart.Blush_R, Instance.configBlushRightColor.Value); value.Set(SkinColorManager.SkinPart.NameFill, new Color(1f, 1f, 1f, 1f)); value.Set(SkinColorManager.SkinPart.NameOutline, new Color(0f, 0f, 0f, 1f)); localPresets[0] = value; SkinColorManager.SetCurrentPreset(0); } else { int num = Instance.configPresetIndex.Value; if (!localPresets.TryGetValue(num, out value)) { num = 0; value = localPresets[0]; } Instance.configPresetIndex.Value = num; SkinColorManager.SetCurrentPreset(num); } SkinColorManager.SetDummyColors(value); SkinColorManager.SetLocalColors(value); } public static void ApplyColorsToPartRenderers(Renderer[] playerRenderers, SkinColorManager.SkinPartColorSet colorSet, int shaderID) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) if (playerRenderers != null && colorSet != null && playerRenderers.Length >= 4) { Color val = colorSet.Get(SkinColorManager.SkinPart.Face); playerRenderers[0].material.SetColor(shaderID, val); Color val2 = colorSet.Get(SkinColorManager.SkinPart.Body); playerRenderers[1].material.SetColor(shaderID, val2); Color val3 = colorSet.Get(SkinColorManager.SkinPart.Blush_L); playerRenderers[2].material.SetColor(shaderID, val3); Color val4 = colorSet.Get(SkinColorManager.SkinPart.Blush_R); playerRenderers[3].material.SetColor(shaderID, val4); } } public static void ApplyColorToSashRenderer(Renderer sashRenderer, SkinColorManager.SkinPartColorSet colorSet, int shaderID) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) sashRenderer.materials[1].SetColor(shaderID, colorSet.Get(SkinColorManager.SkinPart.Sash)); } public static void ApplyColorsToPlayerNameText(CharacterCustomization characterCustomization) { //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) CharacterInteractible component = ((Component)characterCustomization).GetComponent<CharacterInteractible>(); int actorNumber = characterCustomization._character.view.Owner.ActorNumber; bool isMine = characterCustomization._character.view.IsMine; PlayerName[] componentsInChildren = ((Component)GUIManager.instance.playerNames).GetComponentsInChildren<PlayerName>(true); PlayerName[] array = componentsInChildren; foreach (PlayerName val in array) { if (!((Object)(object)val.characterInteractable == (Object)(object)component)) { continue; } TextMeshProUGUI componentInChildren = ((Component)val).GetComponentInChildren<TextMeshProUGUI>(); if (!((Object)(object)componentInChildren != (Object)null)) { break; } SkinColorManager.SkinPartColorSet colors = SkinColorManager.GetColors(actorNumber); if (colors != null) { foreach (KeyValuePair<SkinColorManager.SkinPart, Color> color4 in colors.colors) { } } Color color = ((Graphic)componentInChildren).color; Color color2 = ((TMP_Text)componentInChildren).fontMaterial.GetColor(ShaderUtilities.ID_OutlineColor); Color color3 = colors?.Get(SkinColorManager.SkinPart.NameFill) ?? Color.white; Color val2 = colors?.Get(SkinColorManager.SkinPart.NameOutline) ?? Color.black; ((Graphic)componentInChildren).color = color3; ((TMP_Text)componentInChildren).fontMaterial.SetColor(ShaderUtilities.ID_OutlineColor, val2); ((TMP_Text)componentInChildren).ForceMeshUpdate(false, false); break; } } public static void ApplyColorsToGhostPartRenderers(Renderer[] playerRenderers, Renderer[] eyeRenderers, SkinColorManager.SkinPartColorSet colorSet, int playerShaderID, int eyeShaderID) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) if (playerRenderers != null) { Color val = colorSet.Get(SkinColorManager.SkinPart.Face); playerRenderers[0].material.SetColor(playerShaderID, val); Color val2 = colorSet.Get(SkinColorManager.SkinPart.Blush_L); eyeRenderers[0].material.SetColor(eyeShaderID, val2); Color val3 = colorSet.Get(SkinColorManager.SkinPart.Blush_R); eyeRenderers[1].material.SetColor(eyeShaderID, val3); } } } } namespace SkinColorSliders.Patches { public static class CustomizationPatches { [HarmonyPatch(typeof(CharacterCustomization), "OnPlayerDataChange")] public static class CharacterCustomization_OnPlayerDataChange_Patch { private static void Postfix(CharacterCustomization __instance, PersistentPlayerData playerData) { if (!((Object)(object)__instance.refs.PlayerRenderers[0] == (Object)null) && !__instance._character.isBot) { PhotonView component = ((Component)__instance).gameObject.GetComponent<PhotonView>(); int actorNumber = component.Owner.ActorNumber; SkinColorManager.SkinPartColorSet colors = SkinColorManager.GetColors(actorNumber); if (colors != null) { int shaderID = Shader.PropertyToID("_SkinColor"); SkinColorSliders.ApplyColorsToPartRenderers(__instance.refs.PlayerRenderers, colors, shaderID); int shaderID2 = Shader.PropertyToID("_Tint"); SkinColorSliders.ApplyColorToSashRenderer(__instance.refs.sashRenderer, colors, shaderID2); SkinColorSliders.ApplyColorsToPlayerNameText(__instance); } } } } [HarmonyPatch(typeof(PersistentPlayerDataService))] [HarmonyPatch("OnSyncReceived")] private class PersistentPlayerDataService_OnSyncReceived_Patch { private static bool Prefix(SyncPersistentPlayerDataPackage package, PersistentPlayerDataService __instance) { if (package == null) { return false; } if (__instance.PersistentPlayerDatas == null) { return false; } __instance.PersistentPlayerDatas[package.ActorNumber] = package.Data; if (__instance.OnChangeActions != null && __instance.OnChangeActions.ContainsKey(package.ActorNumber)) { try { __instance.OnChangeActions[package.ActorNumber]?.Invoke(package.Data); } catch (Exception) { } } return false; } } [HarmonyPatch(/*Could not decode attribute arguments.*/)] public class PlayerColorPatch { private static bool Prefix(CharacterCustomization __instance, ref Color __result) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) Color? color = SkinColorManager.GetColor(((MonoBehaviourPun)__instance._character).photonView.Owner.ActorNumber, SkinColorManager.SkinPart.Face); if (color.HasValue) { __result = color.Value; return false; } return true; } } [HarmonyPatch(typeof(PlayerGhost), "CustomizeGhost")] private static class CustomizeGhostPatch { private static void Postfix(PlayerGhost __instance, CharacterCustomizationData data) { SkinColorManager.SkinPartColorSet colors = SkinColorManager.GetColors(((MonoBehaviourPun)__instance.m_owner).photonView.Owner.ActorNumber); if (colors != null) { SkinColorSliders.ApplyColorsToGhostPartRenderers(__instance.PlayerRenderers, __instance.EyeRenderers, colors, Shader.PropertyToID("_PlayerColor"), Shader.PropertyToID("_SkinColor")); } } } [HarmonyPatch(typeof(PlayerCustomizationDummy), "SetPlayerColor")] private static class SetPlayerDummyColorPatch { private static void Postfix(PlayerCustomizationDummy __instance, int index) { SkinColorManager.SkinPartColorSet dummyColors = SkinColorManager.dummyColors; SkinColorSliders.ApplyColorsToPartRenderers(__instance.refs.PlayerRenderers, dummyColors, Shader.PropertyToID("_SkinColor")); SkinColorSliders.ApplyColorToSashRenderer(__instance.refs.sashRenderer, dummyColors, Shader.PropertyToID("_Tint")); } } [HarmonyPatch(typeof(PlayerCustomizationDummy), "UpdateDummy")] private static class UpdateDummyPatch { private static void Postfix(PlayerCustomizationDummy __instance) { SkinColorManager.SkinPartColorSet dummyColors = SkinColorManager.dummyColors; SkinColorSliders.ApplyColorToSashRenderer(__instance.refs.sashRenderer, dummyColors, Shader.PropertyToID("_Tint")); } } } public static class UIPatches { [HarmonyPatch(typeof(UIPlayerNames), "Init")] public static class InitPatch { private static void Postfix(UIPlayerNames __instance, CharacterInteractible characterInteractable) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing ref