Esempio n. 1
0
        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;
        }
Esempio n. 2
0
            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);
            }
Esempio n. 3
0
            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);
            }