public static void Postfix(HatsTab __instance) { var allHats = DestroyableSingleton <HatManager> .Instance.GetUnlockedHats(); var hatGroups = new SortedList <string, List <HatBehaviour> >( new PaddedComparer <string>("Vanilla", "") ); foreach (var hat in allHats) { if (!hatGroups.ContainsKey(hat.StoreName)) { hatGroups[hat.StoreName] = new List <HatBehaviour>(); } hatGroups[hat.StoreName].Add(hat); } foreach (ColorChip instanceColorChip in __instance.ColorChips) { instanceColorChip.gameObject.Destroy(); } __instance.ColorChips.Clear(); var groupNameText = __instance.transform.parent.parent.GetComponentInChildren <GameSettingMenu>(true).GetComponentInChildren <TextMeshPro>(true); int hatIdx = 0; foreach ((string groupName, List <HatBehaviour> hats) in hatGroups) { var text = Object.Instantiate(groupNameText.gameObject); text.transform.localScale = Vector3.one; text.transform.parent = __instance.scroller.Inner; var tmp = text.GetComponent <TextMeshPro>(); tmp.text = groupName; tmp.alignment = TextAlignmentOptions.Center; tmp.fontSize = 3f; tmp.fontSizeMax = 3f; tmp.fontSizeMin = 0f; hatIdx = (hatIdx + 3) / 4 * 4; float xLerp = __instance.XRange.Lerp(0.5f); float yLerp = __instance.YStart - (hatIdx / __instance.NumPerRow) * __instance.YOffset; text.transform.localPosition = new Vector3(xLerp, yLerp, -1f); hatIdx += 4; foreach (var hat in hats.OrderBy(HatManager.Instance.GetIdFromHat)) { float num = __instance.XRange.Lerp(hatIdx % __instance.NumPerRow / (__instance.NumPerRow - 1f)); float num2 = __instance.YStart - hatIdx / __instance.NumPerRow * __instance.YOffset; ColorChip colorChip = Object.Instantiate(__instance.ColorTabPrefab, __instance.scroller.Inner); colorChip.transform.localPosition = new Vector3(num, num2, -1f); colorChip.Button.OnClick.AddListener((Action)(() => __instance.SelectHat(hat))); colorChip.Inner.SetHat(hat, PlayerControl.LocalPlayer.Data.ColorId); colorChip.Inner.transform.localPosition = hat.ChipOffset + new Vector2(0f, -0.3f); colorChip.Tag = hat; __instance.ColorChips.Add(colorChip); hatIdx += 1; } } __instance.scroller.YBounds.max = -(__instance.YStart - (hatIdx + 1) / __instance.NumPerRow * __instance.YOffset) - 3f; }
public static float createHatPackage(List <System.Tuple <HatData, HatExtension> > hats, string packageName, float YStart, HatsTab __instance) { float offset = YStart; if (textTemplate != null) { TMPro.TMP_Text title = UnityEngine.Object.Instantiate <TMPro.TMP_Text>(textTemplate, __instance.scroller.Inner); title.transform.parent = __instance.scroller.Inner; title.transform.localPosition = new Vector3(headerX, YStart, inventoryZ); title.alignment = TMPro.TextAlignmentOptions.Center; title.fontSize *= 1.25f; title.fontWeight = TMPro.FontWeight.Thin; title.enableAutoSizing = false; title.autoSizeTextContainer = true; title.text = ModTranslation.getString(packageName); offset -= headerSize * __instance.YOffset; hatsTabCustomTexts.Add(title); } var numHats = hats.Count; for (int i = 0; i < hats.Count; i++) { HatData hat = hats[i].Item1; HatExtension ext = hats[i].Item2; float xpos = __instance.XRange.Lerp((i % __instance.NumPerRow) / (__instance.NumPerRow - 1f)); float ypos = offset - (i / __instance.NumPerRow) * __instance.YOffset; ColorChip colorChip = UnityEngine.Object.Instantiate <ColorChip>(__instance.ColorTabPrefab, __instance.scroller.Inner); int color = __instance.HasLocalPlayer() ? PlayerControl.LocalPlayer.Data.DefaultOutfit.ColorId : SaveManager.BodyColor; colorChip.transform.localPosition = new Vector3(xpos, ypos, inventoryZ); if (ActiveInputManager.currentControlType == ActiveInputManager.InputType.Keyboard) { colorChip.Button.OnMouseOver.AddListener((UnityEngine.Events.UnityAction)(() => __instance.SelectHat(hat))); colorChip.Button.OnMouseOut.AddListener((UnityEngine.Events.UnityAction)(() => __instance.SelectHat(DestroyableSingleton <HatManager> .Instance.GetHatById(SaveManager.LastHat)))); colorChip.Button.OnClick.AddListener((UnityEngine.Events.UnityAction)(() => __instance.ClickEquip())); } else { colorChip.Button.OnClick.AddListener((UnityEngine.Events.UnityAction)(() => __instance.SelectHat(hat))); } colorChip.Inner.SetHat(hat, color); colorChip.Inner.transform.localPosition = hat.ChipOffset; colorChip.Tag = hat; colorChip.Button.ClickMask = __instance.scroller.Hitbox; __instance.ColorChips.Add(colorChip); } return(offset - ((numHats - 1) / __instance.NumPerRow) * __instance.YOffset - headerSize); }
public static float createHatPackage(List <System.Tuple <HatBehaviour, HatExtension> > hats, string packageName, float YStart, HatsTab __instance) { bool isDefaultPackage = innerslothPackageName == packageName; float offset = YStart; if (textTemplate != null) { TMPro.TMP_Text title = UnityEngine.Object.Instantiate <TMPro.TMP_Text>(textTemplate, __instance.scroller.Inner); title.transform.localPosition = new Vector3(2.25f, YStart, -1f); title.transform.localScale = Vector3.one * 1.5f; // title.currentFontSize title.fontSize *= 0.5f; title.enableAutoSizing = false; __instance.StartCoroutine(Effects.Lerp(0.1f, new System.Action <float>((p) => { title.SetText(packageName); }))); offset -= 0.8f * __instance.YOffset; hatsTabCustomTexts.Add(title); } for (int i = 0; i < hats.Count; i++) { HatBehaviour hat = hats[i].Item1; HatExtension ext = hats[i].Item2; float xpos = __instance.XRange.Lerp((i % __instance.NumPerRow) / (__instance.NumPerRow - 1f)); float ypos = offset - (i / __instance.NumPerRow) * (isDefaultPackage ? 1f : 1.5f) * __instance.YOffset; ColorChip colorChip = UnityEngine.Object.Instantiate <ColorChip>(__instance.ColorTabPrefab, __instance.scroller.Inner); if (ext != null) { Transform background = colorChip.transform.FindChild("Background"); Transform foreground = colorChip.transform.FindChild("ForeGround"); if (background != null) { background.localScale = new Vector3(1, 1.5f, 1); background.localPosition = Vector3.down * 0.243f; } if (foreground != null) { foreground.localPosition = Vector3.down * 0.243f; } if (textTemplate != null) { TMPro.TMP_Text description = UnityEngine.Object.Instantiate <TMPro.TMP_Text>(textTemplate, colorChip.transform); description.transform.localPosition = new Vector3(0f, -0.75f, -1f); description.transform.localScale = Vector3.one * 0.7f; __instance.StartCoroutine(Effects.Lerp(0.1f, new System.Action <float>((p) => { description.SetText($"{hat.name}\nby {ext.author}"); }))); hatsTabCustomTexts.Add(description); } if (!ext.isUnlocked()) // Hat is locked { UnityEngine.Object.Destroy(colorChip.Button); var overlay = UnityEngine.Object.Instantiate(colorChip.InUseForeground, colorChip.transform); overlay.SetActive(true); } } colorChip.transform.localPosition = new Vector3(xpos, ypos, -1f); colorChip.Button.OnClick.AddListener((UnityEngine.Events.UnityAction)(() => { __instance.SelectHat(hat); })); colorChip.Inner.SetHat(hat, PlayerControl.LocalPlayer.Data.ColorId); colorChip.Inner.transform.localPosition = hat.ChipOffset; colorChip.Tag = hat; __instance.ColorChips.Add(colorChip); } return(offset - ((hats.Count - 1) / __instance.NumPerRow) * (isDefaultPackage ? 1f : 1.5f) * __instance.YOffset - 0.85f); }