using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using Pigeon.Math;
using Pigeon.Movement;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("SkinGenerator")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("SkinGenerator")]
[assembly: AssemblyTitle("SkinGenerator")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace SkinGenerator
{
public sealed class SkinGeneratorGui
{
private sealed class SpecialModifierFilter
{
private readonly string[] ids;
private readonly string[] propertyTypeNames;
public string Label { get; }
public float Width { get; }
public SpecialModifierFilter(string label, params string[] ids)
: this(label, ids, Array.Empty<string>())
{
}
public SpecialModifierFilter(string label, string[] ids, string[] propertyTypeNames)
{
Label = label;
this.ids = ids;
this.propertyTypeNames = propertyTypeNames;
Width = Mathf.Max(82f, (float)label.Length * 8f + 28f);
}
public bool Matches(string id)
{
if (string.IsNullOrEmpty(id))
{
return false;
}
for (int i = 0; i < ids.Length; i++)
{
if (string.Equals(ids[i], id, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
return false;
}
public bool Matches(SkinUpgradeProperty property)
{
if (property == null)
{
return false;
}
string name = ((object)property).GetType().Name;
for (int i = 0; i < propertyTypeNames.Length; i++)
{
if (string.Equals(propertyTypeNames[i], name, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
return false;
}
}
private static readonly string[] RarityNames;
private static readonly Rarity[] Rarities;
private static readonly SpecialModifierFilter[] SpecialModifierFilters;
private readonly ManualLogSource logger;
private readonly int windowId = "SkinGenerator".GetHashCode();
private readonly List<IUpgradable> categories = new List<IUpgradable>();
private readonly List<SkinUpgrade> skins = new List<SkinUpgrade>();
private readonly List<string> categoryNames = new List<string>();
private readonly List<string> skinNames = new List<string>();
private readonly bool[] specialModifierEnabled = new bool[SpecialModifierFilters.Length];
private readonly Vector2[] scroll = (Vector2[])(object)new Vector2[3];
private const int SpecialSeedSearchAttempts = 4096;
private Rect window = new Rect(20f, 120f, 920f, 116f);
private bool initialized;
private bool visible;
private int selectedCategory;
private int selectedRarity;
private int selectedSkin;
private int openDropdown = -1;
private string countText = "1";
private string seedText = "0";
private string seedStepText = "1";
private bool useExactSeed;
private bool onlyNewRandom = true;
private bool randomSpecialOnly;
private string lastMessage = "Ready";
private GUIStyle windowStyle;
private GUIStyle buttonStyle;
private GUIStyle textFieldStyle;
private GUIStyle labelStyle;
private GUIStyle toggleStyle;
private GUIStyle boxStyle;
private Texture2D windowTexture;
private Texture2D buttonTexture;
private Texture2D buttonHoverTexture;
private Texture2D buttonActiveTexture;
private Texture2D textFieldTexture;
private Texture2D textFieldFocusedTexture;
private Texture2D boxTexture;
public bool Visible
{
get
{
return visible;
}
set
{
if (visible != value)
{
visible = value;
if (visible)
{
initialized = false;
selectedCategory = 0;
selectedSkin = 0;
openDropdown = -1;
}
}
}
}
public SkinGeneratorGui(ManualLogSource logger)
{
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
this.logger = logger;
}
public void Draw()
{
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Expected O, but got Unknown
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
if (visible)
{
if (!LevelData.IsHub)
{
visible = false;
return;
}
EnsureInitialized();
EnsureStyles();
((Rect)(ref window)).height = ((openDropdown >= 0) ? 464f : 164f);
window = GUI.Window(windowId, window, new WindowFunction(DrawWindow), "Hub skin generator", windowStyle);
}
}
public void Dispose()
{
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
visible = false;
initialized = false;
categories.Clear();
skins.Clear();
categoryNames.Clear();
skinNames.Clear();
selectedCategory = 0;
selectedRarity = 0;
selectedSkin = 0;
openDropdown = -1;
countText = "1";
seedText = "0";
seedStepText = "1";
useExactSeed = false;
onlyNewRandom = true;
randomSpecialOnly = false;
lastMessage = "Ready";
for (int i = 0; i < scroll.Length; i++)
{
scroll[i] = Vector2.zero;
}
for (int j = 0; j < specialModifierEnabled.Length; j++)
{
specialModifierEnabled[j] = false;
}
DestroyTexture(ref windowTexture);
DestroyTexture(ref buttonTexture);
DestroyTexture(ref buttonHoverTexture);
DestroyTexture(ref buttonActiveTexture);
DestroyTexture(ref textFieldTexture);
DestroyTexture(ref textFieldFocusedTexture);
DestroyTexture(ref boxTexture);
windowStyle = null;
buttonStyle = null;
textFieldStyle = null;
labelStyle = null;
toggleStyle = null;
boxStyle = null;
}
private void DrawWindow(int id)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_01be: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
//IL_021a: Unknown result type (might be due to invalid IL or missing references)
//IL_024b: Unknown result type (might be due to invalid IL or missing references)
//IL_0280: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02f8: Unknown result type (might be due to invalid IL or missing references)
float num = 12f;
DrawDropdown(0, new Rect(num, 28f, 190f, 28f), GetSelected(categoryNames, selectedCategory, "Category"), categoryNames, delegate(int index)
{
selectedCategory = index;
selectedSkin = 0;
RefreshSkins();
});
num += 198f;
DrawDropdown(1, new Rect(num, 28f, 120f, 28f), RarityNames[selectedRarity], RarityNames, delegate(int index)
{
selectedRarity = index;
selectedSkin = 0;
RefreshSkins();
});
num += 128f;
DrawDropdown(2, new Rect(num, 28f, 260f, 28f), GetSelected(skinNames, selectedSkin, "Skin"), skinNames, delegate(int index)
{
selectedSkin = index;
});
num += 268f;
countText = GUI.TextField(new Rect(num, 28f, 48f, 28f), countText, 4, textFieldStyle);
num += 56f;
if (GUI.Button(new Rect(num, 28f, 118f, 28f), "Generate", buttonStyle))
{
Generate();
}
useExactSeed = GUI.Toggle(new Rect(12f, 62f, 96f, 20f), useExactSeed, "Exact seed", toggleStyle);
GUI.Label(new Rect(112f, 62f, 38f, 20f), "Seed", labelStyle);
seedText = GUI.TextField(new Rect(150f, 58f, 90f, 24f), seedText, 11, textFieldStyle);
GUI.Label(new Rect(248f, 62f, 34f, 20f), "Step", labelStyle);
seedStepText = GUI.TextField(new Rect(282f, 58f, 60f, 24f), seedStepText, 6, textFieldStyle);
onlyNewRandom = GUI.Toggle(new Rect(354f, 62f, 160f, 20f), onlyNewRandom, "Random only new", toggleStyle);
randomSpecialOnly = GUI.Toggle(new Rect(524f, 62f, 190f, 20f), randomSpecialOnly, "Random special only", toggleStyle);
DrawSpecialModifierToggles();
GUI.Label(new Rect(12f, 136f, ((Rect)(ref window)).width - 24f, 20f), lastMessage, labelStyle);
GUI.DragWindow(new Rect(0f, 0f, ((Rect)(ref window)).width, 22f));
}
private void DrawSpecialModifierToggles()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
GUI.Label(new Rect(12f, 88f, 58f, 20f), "Special", labelStyle);
float num = 72f;
float num2 = 88f;
for (int i = 0; i < SpecialModifierFilters.Length; i++)
{
SpecialModifierFilter specialModifierFilter = SpecialModifierFilters[i];
float width = specialModifierFilter.Width;
if (num + width > ((Rect)(ref window)).width - 12f)
{
num = 72f;
num2 += 22f;
}
specialModifierEnabled[i] = GUI.Toggle(new Rect(num, num2, width, 20f), specialModifierEnabled[i], specialModifierFilter.Label, toggleStyle);
num += width + 6f;
}
}
private void Generate()
{
if (selectedCategory < 0 || selectedCategory >= categories.Count)
{
lastMessage = "Select category.";
return;
}
int num = ParseInt(countText, 1, 1, 999);
int num2 = ParseInt(seedText, 0, int.MinValue, int.MaxValue);
int num3 = ParseInt(seedStepText, 1, -100000, 100000);
IUpgradable prefab = categories[selectedCategory].GetPrefab();
int num4 = 0;
try
{
for (int i = 0; i < num; i++)
{
int specialSeed = 0;
SkinUpgrade val = (randomSpecialOnly ? GetRandomSpecialSkin(prefab, out specialSeed) : GetSkinForGeneration(prefab));
if ((Object)(object)val == (Object)null)
{
break;
}
UpgradeInstance val2 = PlayerData.CreateUpgradeInstance(prefab, (Upgrade)(object)val, true);
val2.CanScrap = true;
if (randomSpecialOnly)
{
val2.Seed = specialSeed;
}
else if (useExactSeed)
{
val2.Seed = num2 + num3 * i;
}
PlayerData.CollectInstance(val2, (UnlockFlags)1);
num4++;
}
lastMessage = ((num4 > 0) ? $"Generated {num4} skin(s)." : "No matching skins found.");
RefreshSkins();
}
catch (Exception ex)
{
lastMessage = "Skin generation failed. See BepInEx log.";
logger.LogError((object)ex);
}
}
private SkinUpgrade GetSkinForGeneration(IUpgradable category)
{
if (selectedSkin > 0)
{
int num = selectedSkin - 1;
return (num >= 0 && num < skins.Count) ? skins[num] : null;
}
List<SkinUpgrade> list = new List<SkinUpgrade>(skins.Count);
for (int i = 0; i < skins.Count; i++)
{
if (!onlyNewRandom || PlayerData.GetUpgradeInfo(category, (Upgrade)(object)skins[i]).TotalInstancesCollected == 0)
{
list.Add(skins[i]);
}
}
if (list.Count == 0 && onlyNewRandom)
{
list.AddRange(skins);
}
return (list.Count == 0) ? null : list[Random.Range(0, list.Count)];
}
private SkinUpgrade GetRandomSpecialSkin(IUpgradable category, out int specialSeed)
{
specialSeed = 0;
List<SkinUpgrade> list = new List<SkinUpgrade>(skins.Count);
for (int i = 0; i < skins.Count; i++)
{
if (!onlyNewRandom || PlayerData.GetUpgradeInfo(category, (Upgrade)(object)skins[i]).TotalInstancesCollected == 0)
{
list.Add(skins[i]);
}
}
if (list.Count == 0 && onlyNewRandom)
{
list.AddRange(skins);
}
for (int j = 0; j < 4096; j++)
{
if (list.Count <= 0)
{
break;
}
SkinUpgrade val = list[Random.Range(0, list.Count)];
int num = Random.Range(int.MinValue, int.MaxValue);
if (HasSpecialAttribute(val, num, out var _))
{
specialSeed = num;
return val;
}
}
return null;
}
private bool HasSpecialAttribute(SkinUpgrade skin, int seed, out string modifierId)
{
//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_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
modifierId = null;
if ((Object)(object)skin == (Object)null)
{
return false;
}
string empty = string.Empty;
int num = 0;
Enumerator properties = ((Upgrade)skin).GetProperties();
Random val2 = default(Random);
ModifierInfo val3 = default(ModifierInfo);
while (((Enumerator)(ref properties)).MoveNext())
{
num++;
UpgradeProperty current = ((Enumerator)(ref properties)).Current;
SkinUpgradeProperty val = (SkinUpgradeProperty)(object)((current is SkinUpgradeProperty) ? current : null);
if (val == null)
{
continue;
}
((Random)(ref val2))..ctor(Upgrade.ModifyPropertySeed(seed, num));
try
{
string nameModifier = val.GetNameModifier((Upgrade)(object)skin, empty, val2, seed, ref val3);
if (!string.IsNullOrEmpty(nameModifier) && (MatchesEnabledSpecialModifier(val3.ID) || MatchesEnabledSpecialModifier(val)))
{
modifierId = (string.IsNullOrEmpty(val3.ID) ? ((object)val).GetType().Name : val3.ID);
return true;
}
}
catch (Exception)
{
}
}
return false;
}
private bool MatchesEnabledSpecialModifier(SkinUpgradeProperty property)
{
bool flag = false;
for (int i = 0; i < specialModifierEnabled.Length; i++)
{
if (specialModifierEnabled[i])
{
flag = true;
break;
}
}
if (!flag)
{
return false;
}
for (int j = 0; j < specialModifierEnabled.Length; j++)
{
if (specialModifierEnabled[j] && SpecialModifierFilters[j].Matches(property))
{
return true;
}
}
return false;
}
private bool MatchesEnabledSpecialModifier(string modifierId)
{
bool flag = false;
for (int i = 0; i < specialModifierEnabled.Length; i++)
{
if (specialModifierEnabled[i])
{
flag = true;
break;
}
}
if (!flag)
{
return true;
}
for (int j = 0; j < specialModifierEnabled.Length; j++)
{
if (specialModifierEnabled[j] && SpecialModifierFilters[j].Matches(modifierId))
{
return true;
}
}
return false;
}
private void EnsureInitialized()
{
if (!initialized || categories.Count <= 0)
{
initialized = true;
RefreshCategories();
RefreshSkins();
}
}
private void RefreshCategories()
{
categories.Clear();
categoryNames.Clear();
Player localPlayer = Player.LocalPlayer;
if ((Object)(object)localPlayer == (Object)null)
{
lastMessage = "Local player is not ready.";
return;
}
AddCategory((IUpgradable)(object)localPlayer.Character);
IUpgradable[] gear = (IUpgradable[])(object)localPlayer.Gear;
IUpgradable[] array = gear;
if (array != null)
{
for (int i = 0; i < array.Length; i++)
{
AddCategory(array[i]);
}
}
if (categories.Count == 0)
{
lastMessage = "No equipped gear with skins found.";
}
}
private void AddCategory(IUpgradable item)
{
if (item == null)
{
return;
}
IUpgradable prefab = item.GetPrefab();
object obj;
if (prefab == null)
{
obj = null;
}
else
{
GearInfo info = prefab.Info;
obj = ((info != null) ? info.Upgrades : null);
}
if (obj == null || !HasSkin(prefab))
{
return;
}
for (int i = 0; i < categories.Count; i++)
{
if (categories[i] == prefab || categories[i].Info.ID == prefab.Info.ID)
{
return;
}
}
categories.Add(prefab);
categoryNames.Add(prefab.Info.Name + " [" + prefab.Info.APIName + "]");
}
private void RefreshSkins()
{
//IL_0080: 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)
skins.Clear();
skinNames.Clear();
skinNames.Add("Random skin");
if (selectedCategory < 0 || selectedCategory >= categories.Count)
{
return;
}
IUpgradable val = categories[selectedCategory];
List<Upgrade> upgrades = val.Info.Upgrades;
Rarity val2 = Rarities[selectedRarity];
for (int i = 0; i < upgrades.Count; i++)
{
Upgrade obj = upgrades[i];
SkinUpgrade val3 = (SkinUpgrade)(object)((obj is SkinUpgrade) ? obj : null);
if (val3 != null && ((Upgrade)val3).Rarity == val2)
{
skins.Add(val3);
}
}
skins.Sort((SkinUpgrade a, SkinUpgrade b) => string.Compare(((Upgrade)a).Name, ((Upgrade)b).Name, StringComparison.OrdinalIgnoreCase));
for (int j = 0; j < skins.Count; j++)
{
skinNames.Add(((Upgrade)skins[j]).Name + " [" + ((Upgrade)skins[j]).APIName + "]");
}
}
private static bool HasSkin(IUpgradable item)
{
List<Upgrade> upgrades = item.Info.Upgrades;
for (int i = 0; i < upgrades.Count; i++)
{
if (upgrades[i] is SkinUpgrade)
{
return true;
}
}
return false;
}
private void DrawDropdown(int id, Rect rect, string label, IReadOnlyList<string> options, Action<int> onSelected)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: 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)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: 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_0156: Unknown result type (might be due to invalid IL or missing references)
if (GUI.Button(rect, label, buttonStyle))
{
openDropdown = ((openDropdown == id) ? (-1) : id);
}
if (openDropdown != id)
{
return;
}
int num = Mathf.Min(Mathf.Max(options.Count, 1), 12);
Rect val = default(Rect);
((Rect)(ref val))..ctor(((Rect)(ref rect)).x, 160f, ((Rect)(ref rect)).width, (float)num * 24f + 4f);
Rect val2 = default(Rect);
((Rect)(ref val2))..ctor(0f, 0f, ((Rect)(ref rect)).width - 20f, (float)Mathf.Max(1, options.Count) * 24f);
GUI.Box(val, GUIContent.none, boxStyle);
scroll[id] = GUI.BeginScrollView(val, scroll[id], val2);
if (options.Count == 0)
{
GUI.Label(new Rect(4f, 4f, ((Rect)(ref val2)).width - 8f, 22f), "No items", labelStyle);
}
Rect val3 = default(Rect);
for (int i = 0; i < options.Count; i++)
{
((Rect)(ref val3))..ctor(2f, (float)i * 24f + 2f, ((Rect)(ref val2)).width - 4f, 22f);
if (GUI.Button(val3, options[i], buttonStyle))
{
onSelected(i);
openDropdown = -1;
}
}
GUI.EndScrollView();
}
private void EnsureStyles()
{
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_0152: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Expected O, but got Unknown
//IL_0177: Unknown result type (might be due to invalid IL or missing references)
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Expected O, but got Unknown
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_022f: Unknown result type (might be due to invalid IL or missing references)
//IL_0239: Expected O, but got Unknown
//IL_0245: Unknown result type (might be due to invalid IL or missing references)
//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c1: Expected O, but got Unknown
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02ec: Unknown result type (might be due to invalid IL or missing references)
//IL_02f6: Expected O, but got Unknown
//IL_030b: Unknown result type (might be due to invalid IL or missing references)
//IL_032e: Unknown result type (might be due to invalid IL or missing references)
//IL_0338: Expected O, but got Unknown
//IL_0344: Unknown result type (might be due to invalid IL or missing references)
if (windowStyle == null)
{
Color color = default(Color);
((Color)(ref color))..ctor(0.035f, 0.105f, 0.21f, 0.96f);
Color color2 = default(Color);
((Color)(ref color2))..ctor(0.08f, 0.32f, 0.62f, 1f);
Color color3 = default(Color);
((Color)(ref color3))..ctor(0.12f, 0.48f, 0.82f, 1f);
Color color4 = default(Color);
((Color)(ref color4))..ctor(0.04f, 0.23f, 0.48f, 1f);
Color textColor = default(Color);
((Color)(ref textColor))..ctor(0.24f, 0.72f, 1f, 1f);
windowTexture = MakeTex(1, 1, color);
buttonTexture = MakeTex(1, 1, color2);
buttonHoverTexture = MakeTex(1, 1, color3);
buttonActiveTexture = MakeTex(1, 1, color4);
textFieldTexture = MakeTex(1, 1, new Color(0.02f, 0.08f, 0.16f, 1f));
textFieldFocusedTexture = MakeTex(1, 1, new Color(0.03f, 0.14f, 0.28f, 1f));
boxTexture = MakeTex(1, 1, new Color(0.025f, 0.12f, 0.25f, 0.98f));
windowStyle = new GUIStyle(GUI.skin.window);
SetAllStates(windowStyle, windowTexture, new Color(0.82f, 0.95f, 1f));
windowStyle.fontStyle = (FontStyle)1;
buttonStyle = new GUIStyle(GUI.skin.button);
SetAllStates(buttonStyle, buttonTexture, Color.white);
buttonStyle.hover.background = buttonHoverTexture;
buttonStyle.active.background = buttonActiveTexture;
buttonStyle.onHover.background = buttonHoverTexture;
buttonStyle.onActive.background = buttonActiveTexture;
buttonStyle.alignment = (TextAnchor)4;
textFieldStyle = new GUIStyle(GUI.skin.textField);
SetAllStates(textFieldStyle, textFieldTexture, Color.white);
textFieldStyle.focused.background = textFieldFocusedTexture;
textFieldStyle.active.background = textFieldFocusedTexture;
textFieldStyle.onFocused.background = textFieldFocusedTexture;
textFieldStyle.onActive.background = textFieldFocusedTexture;
labelStyle = new GUIStyle(GUI.skin.label);
SetTextColor(labelStyle, new Color(0.76f, 0.92f, 1f));
toggleStyle = new GUIStyle(GUI.skin.toggle);
SetTextColor(toggleStyle, new Color(0.76f, 0.92f, 1f));
toggleStyle.alignment = (TextAnchor)3;
boxStyle = new GUIStyle(GUI.skin.box);
SetAllStates(boxStyle, boxTexture, textColor);
}
}
private static int ParseInt(string text, int fallback, int min, int max)
{
if (!int.TryParse(text, out var result))
{
result = fallback;
}
return Mathf.Clamp(result, min, max);
}
private static string GetSelected(IReadOnlyList<string> values, int index, string fallback)
{
return (index >= 0 && index < values.Count) ? values[index] : fallback;
}
private static void SetAllStates(GUIStyle style, Texture2D background, Color textColor)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_0032: 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_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
SetState(style.normal, background, textColor);
SetState(style.hover, background, textColor);
SetState(style.active, background, textColor);
SetState(style.focused, background, textColor);
SetState(style.onNormal, background, textColor);
SetState(style.onHover, background, textColor);
SetState(style.onActive, background, textColor);
SetState(style.onFocused, background, textColor);
}
private static void SetState(GUIStyleState state, Texture2D background, Color textColor)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
state.background = background;
state.textColor = textColor;
}
private static void SetTextColor(GUIStyle style, Color textColor)
{
//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_0021: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: 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)
style.normal.textColor = textColor;
style.hover.textColor = textColor;
style.active.textColor = textColor;
style.focused.textColor = textColor;
style.onNormal.textColor = textColor;
style.onHover.textColor = textColor;
style.onActive.textColor = textColor;
style.onFocused.textColor = textColor;
}
private static Texture2D MakeTex(int width, int height, Color color)
{
//IL_0011: 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_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Expected O, but got Unknown
Color[] array = (Color[])(object)new Color[width * height];
for (int i = 0; i < array.Length; i++)
{
array[i] = color;
}
Texture2D val = new Texture2D(width, height);
val.SetPixels(array);
val.Apply();
return val;
}
private static void DestroyTexture(ref Texture2D texture)
{
if (!((Object)(object)texture == (Object)null))
{
Object.Destroy((Object)(object)texture);
texture = null;
}
}
static SkinGeneratorGui()
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: 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)
string[] array = new string[3];
Rarity val = (Rarity)1;
array[0] = ((object)(Rarity)(ref val)).ToString();
val = (Rarity)2;
array[1] = ((object)(Rarity)(ref val)).ToString();
val = (Rarity)3;
array[2] = ((object)(Rarity)(ref val)).ToString();
RarityNames = array;
Rarity[] array2 = new Rarity[3];
RuntimeHelpers.InitializeArray(array2, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
Rarities = (Rarity[])(object)array2;
SpecialModifierFilters = new SpecialModifierFilter[11]
{
new SpecialModifierFilter("Entombed", "entombed"),
new SpecialModifierFilter("Spectral", "spectral"),
new SpecialModifierFilter("Shifted", new string[1] { "shifted" }, new string[3] { "SkinUpgradeProperty_ColorCycling", "SkinUpgradeProperty_Hue", "SkinUpgradeProperty_ColorTossing" }),
new SpecialModifierFilter("Color cycle", Array.Empty<string>(), new string[1] { "SkinUpgradeProperty_ColorCycling" }),
new SpecialModifierFilter("Negative", "negative", "inverted"),
new SpecialModifierFilter("Chroma", "chroma"),
new SpecialModifierFilter("Pixelated", "pixelated"),
new SpecialModifierFilter("Trick/Treat", "trickortreat", "trick", "treat"),
new SpecialModifierFilter("Neon", "neon_r", "neon_g", "neon_b", "neon_y", "neon_m"),
new SpecialModifierFilter("Infected", "infected"),
new SpecialModifierFilter("Bloodmetal", "bloodmetal")
};
}
}
[MycoMod(/*Could not decode attribute arguments.*/)]
[BepInPlugin("skingenerator", "SkinGenerator", "1.0.0")]
public sealed class SkinGeneratorPlugin : BaseUnityPlugin
{
public const string PluginGuid = "skingenerator";
public const string PluginName = "SkinGenerator";
public const string PluginVersion = "1.0.0";
private ConfigEntry<KeyboardShortcut> toggleKey;
private SkinGeneratorGui gui;
internal static ManualLogSource Log { get; private set; }
private void Awake()
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
Log = ((BaseUnityPlugin)this).Logger;
toggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Interface", "ToggleKey", new KeyboardShortcut((KeyCode)257, Array.Empty<KeyCode>()), "Key used to show or hide the hub skin generator interface. Format: Unity KeyCode names like Keypad1, F8, Insert. For shortcuts use: LeftControl + F8.");
Log.LogInfo((object)"SkinGenerator loaded.");
}
private void Update()
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
if (gui != null && !LevelData.IsHub)
{
UnloadInterface();
SetCursor(visible: false);
}
KeyboardShortcut value = toggleKey.Value;
if (!((KeyboardShortcut)(ref value)).IsDown())
{
return;
}
if (LevelData.IsHub)
{
if (gui == null || !gui.Visible)
{
EnsureInterface();
gui.Visible = true;
SetCursor(visible: true);
}
else
{
UnloadInterface();
SetCursor(visible: false);
}
}
else
{
UnloadInterface();
SetCursor(visible: false);
Log.LogMessage((object)"Skin generator works only in hub.");
}
}
private void OnGUI()
{
gui?.Draw();
}
private void OnDestroy()
{
UnloadInterface();
}
private void EnsureInterface()
{
if (gui == null)
{
gui = new SkinGeneratorGui(Log);
}
}
private void UnloadInterface()
{
gui?.Dispose();
gui = null;
GC.Collect();
}
private void SetCursor(bool visible)
{
if (visible)
{
Cursor.visible = true;
Cursor.lockState = (CursorLockMode)0;
}
else if (PlayerInput.IsPlayerEnabled && !PlayerInput.IsMenuEnabled)
{
Cursor.visible = false;
Cursor.lockState = (CursorLockMode)1;
}
}
}
}