public static void PerformPerkEffects(Perk.PerkCategory type)
 {
     if (type == Perk.PerkCategory.AXE)
     {
         if (activeAxePerk != null)
         {
             AxePerkEffect();
         }
     }
     else if (type == Perk.PerkCategory.HAT)
     {
         if (activeHatPerk != null)
         {
             HatPerkEffect();
         }
     }
     else if (type == Perk.PerkCategory.TRINKET)
     {
         if (activeTrinketPerk != null)
         {
             TrinketPerkEffect();
         }
     }
 }
        private void DrawPerks()
        {
            //offset for background
            float x           = Mathf.Clamp(-(currentPerkOffset.x - wholeScreenRect.center.x) / (Screen.width * 5) + 0.25f, 0, 0.5f);
            float y           = Mathf.Clamp((currentPerkOffset.y - wholeScreenRect.center.y) / (Screen.height * 5) + 0.25f, 0, 0.5f);
            Rect  bgRectCords = new Rect(x, y, 0.5f, 0.5f);

            //Drawing background images
            switch (_perkpage)
            {
            case Perk.PerkCategory.MeleeOffense:
                GUI.DrawTextureWithTexCoords(wholeScreenRect, ResourceLoader.GetTexture(72), bgRectCords);
                break;

            case Perk.PerkCategory.RangedOffense:
                GUI.DrawTextureWithTexCoords(wholeScreenRect, ResourceLoader.GetTexture(74), bgRectCords);
                break;

            case Perk.PerkCategory.MagicOffense:
                GUI.DrawTextureWithTexCoords(wholeScreenRect, ResourceLoader.GetTexture(73), bgRectCords);
                break;

            case Perk.PerkCategory.Defense:
                GUI.DrawTextureWithTexCoords(wholeScreenRect, ResourceLoader.GetTexture(75), bgRectCords);
                break;

            case Perk.PerkCategory.Support:
                GUI.DrawTextureWithTexCoords(wholeScreenRect, ResourceLoader.GetTexture(77), bgRectCords);
                break;

            case Perk.PerkCategory.Utility:
                GUI.DrawTextureWithTexCoords(wholeScreenRect, ResourceLoader.GetTexture(76), bgRectCords);
                break;

            default:
                break;
            }

            //move left right
            if (mousePos.y > Screen.height - 30 * screenScale)
            {
                targetPerkOffset += Vector2.down * Time.unscaledDeltaTime * 300;
            }
            else if (mousePos.y < 30 * screenScale)
            {
                targetPerkOffset += Vector2.down * Time.unscaledDeltaTime * -300;
            }
            if (mousePos.x > Screen.width - 30 * screenScale)
            {
                targetPerkOffset += Vector2.right * Time.unscaledDeltaTime * -300;
            }
            else if (mousePos.x < 30 * screenScale)
            {
                targetPerkOffset += Vector2.right * Time.unscaledDeltaTime * 300;
            }
            currentPerkOffset = Vector3.Slerp(currentPerkOffset, targetPerkOffset, Time.unscaledDeltaTime * 15f);

            //filling DisplayedPerkIDs with perk ids where category is the same as the selected one
            if (DisplayedPerkIDs == null)
            {
                DisplayedPerkIDs = PerkDatabase.perks.Where(p => p.category == _perkpage).Select(p => p.id).ToArray();
            }

            //Drawing Perks
            Rect rect = new Rect(currentPerkOffset, new Vector2(PerkWidth + 0.25f, PerkHeight + 0.25f) * 2)
            {
                center = currentPerkOffset
            };

            GUI.DrawTexture(rect, ResourceLoader.GetTexture(84));
            GUI.color = Color.black;
            GUI.Label(rect, ModdedPlayer.instance.MutationPoints.ToString(), new GUIStyle(GUI.skin.label)
            {
                alignment = TextAnchor.MiddleCenter, fontSize = Mathf.RoundToInt(80 * screenScale), fontStyle = FontStyle.Bold, font = mainFont
            });
            GUI.color = Color.white;

            Hovered      = false;
            Buying       = false;
            SelectedPerk = null;
            for (int i = 0; i < DisplayedPerkIDs.Length; i++)
            {
                DrawPerk(DisplayedPerkIDs[i]);
            }
            if (SelectedPerk != null)
            {
                Rect r = new Rect(selectedPerk_Rect);
                Perk p = SelectedPerk;
                Hovered  = true;
                r.center = SelectedPerk_center;
                if (_perkDetailAlpha == 0)
                {
                    Effects.Sound_Effects.GlobalSFX.Play(0);
                }

                _perkDetailAlpha += Time.unscaledDeltaTime;
                if (_perkDetailAlpha >= 0.7f)
                {
                    GUI.color = new Color(_perkDetailAlpha - 0.7f, _perkDetailAlpha - 0.7f, _perkDetailAlpha - 0.7f, _perkDetailAlpha - 0.7f);

                    Rect Name = new Rect(r.x - 200 * screenScale, r.y - 130 * screenScale, 400 * screenScale + r.width, 90 * screenScale);

                    GUI.Label(Name, p.name, new GUIStyle(GUI.skin.box)
                    {
                        alignment = TextAnchor.MiddleCenter, fontSize = Mathf.RoundToInt(40 * screenScale), font = mainFont, fontStyle = FontStyle.Bold, richText = true, clipping = TextClipping.Overflow
                    });

                    Rect Desc = new Rect(r.x - 200 * screenScale, r.yMax + 30 * screenScale, 400 * screenScale + r.width, 1000 * screenScale);

                    string desctext = p.Description;

                    if (!p.isBought || p.uncapped)
                    {
                        desctext = "Press to buy\n" + p.Description;
                        Rect LevelReq = new Rect(r.x - 440 * screenScale, r.y, 400 * screenScale, r.height);
                        Rect Cost     = new Rect(r.xMax + 40 * screenScale, r.y, 400 * screenScale, r.height);
                        if (p.levelReq > ModdedPlayer.instance.level)
                        {
                            GUI.color = Color.red;
                        }

                        GUI.Label(LevelReq, "Level " + p.levelReq, new GUIStyle(GUI.skin.box)
                        {
                            alignment = TextAnchor.MiddleCenter, fontSize = Mathf.RoundToInt(33 * screenScale), font = mainFont, fontStyle = FontStyle.Bold, richText = true, clipping = TextClipping.Overflow
                        });
                        if (ModdedPlayer.instance.MutationPoints < p.cost)
                        {
                            GUI.color = Color.red;
                        }
                        else
                        {
                            GUI.color = Color.white;
                        }

                        GUI.Label(Cost, "Cost in mutation points: " + p.cost, new GUIStyle(GUI.skin.box)
                        {
                            alignment = TextAnchor.MiddleCenter, fontSize = Mathf.RoundToInt(33 * screenScale), font = mainFont, fontStyle = FontStyle.Bold, richText = true, clipping = TextClipping.Overflow
                        });
                        GUI.color = Color.white;
                        if (UnityEngine.Input.GetMouseButton(0) && ModdedPlayer.instance.MutationPoints >= p.cost && PerkRequirementsMet(PerkDatabase.perks[SelectedPerk_ID]) && PerkEnabled(PerkDatabase.perks[SelectedPerk_ID]) && PerkDatabase.perks[SelectedPerk_ID].levelReq <= ModdedPlayer.instance.level)
                        {
                            _timeToBuyPerk += Time.unscaledDeltaTime;
                            Buying          = true;
                            Rect buyRect  = new Rect(0, 1 - _timeToBuyPerk / 2, 1, _timeToBuyPerk / 2);
                            Rect buyRect2 = new Rect(r);
                            r.height *= _timeToBuyPerk / 2;

                            GUI.color = SelectedPerk_Color;
                            if (p.uncapped && p.isBought)
                            {
                                Color c = GUI.color;
                                c.a       = 0.5f;
                                c.r      /= 2;
                                c.g      /= 2;
                                c.b      /= 2;
                                GUI.color = c;
                            }
                            GUI.DrawTextureWithTexCoords(r, ResourceLoader.GetTexture(p.textureVariation * 2 + 81 + 1), buyRect);
                            GUI.color = Color.white;
                            if (_timeToBuyPerk >= 2)
                            {
                                if (PerkDatabase.perks[SelectedPerk_ID].uncapped)
                                {
                                    PerkDatabase.perks[SelectedPerk_ID].boughtTimes++;
                                }
                                PerkDatabase.perks[SelectedPerk_ID].isBought = true;
                                PerkDatabase.perks[SelectedPerk_ID].OnBuy();

                                ModdedPlayer.instance.MutationPoints -= p.cost;
                                PerkDatabase.perks[SelectedPerk_ID].apply();
                                PerkDatabase.perks[SelectedPerk_ID].isApplied = true;
                                Buying = false;
                                Effects.Sound_Effects.GlobalSFX.Play(3);
                            }
                        }
                    }
                    GUIStyle descStyle = new GUIStyle(GUI.skin.box)
                    {
                        margin = new RectOffset(5, 5, Mathf.RoundToInt(10 * screenScale), 10), alignment = TextAnchor.UpperCenter, fontSize = Mathf.RoundToInt(28 * screenScale), font = mainFont, fontStyle = FontStyle.Normal, richText = true, wordWrap = true
                    };
                    Desc.height = descStyle.CalcHeight(new GUIContent(desctext), Desc.width) + 10 * screenScale;
                    GUI.Label(Desc, desctext, descStyle);
                }

                GUI.color = Color.white;
            }
            if (!Buying)
            {
                _timeToBuyPerk = 0;
            }
            if (!Hovered)
            {
                _perkDetailAlpha = 0;
            }

            Array menus      = Enum.GetValues(typeof(Perk.PerkCategory));
            float btnSize    = 250 * screenScale;
            float bigBtnSize = 40 * screenScale;
            float offset     = Screen.width / 2 - (menus.Length * btnSize + bigBtnSize) / 2;

            for (int i = 0; i < menus.Length; i++)
            {
                Rect topButton = new Rect(offset, 35 * screenScale, btnSize, 60 * screenScale);
                if ((Perk.PerkCategory)menus.GetValue(i) == _perkpage)
                {
                    _perkCategorySizes[i] = Mathf.Clamp(_perkCategorySizes[i] + Time.unscaledDeltaTime * 40, 0, bigBtnSize);
                    topButton.width      += bigBtnSize;
                    topButton.height     += bigBtnSize / 2;
                }
                else
                {
                    _perkCategorySizes[i] = Mathf.Clamp(_perkCategorySizes[i] - Time.unscaledDeltaTime * 30, 0, bigBtnSize);
                }
                topButton.width  += _perkCategorySizes[i];
                topButton.height += _perkCategorySizes[i] / 2;
                offset           += topButton.width;
                string content = string.Empty;
                switch ((Perk.PerkCategory)menus.GetValue(i))
                {
                case Perk.PerkCategory.MeleeOffense:
                    content = "Melee";
                    break;

                case Perk.PerkCategory.RangedOffense:
                    content = "Ranged";
                    break;

                case Perk.PerkCategory.MagicOffense:
                    content = "Magic";
                    break;

                case Perk.PerkCategory.Defense:
                    content = "Defensive";
                    break;

                case Perk.PerkCategory.Support:
                    content = "Support";
                    break;

                case Perk.PerkCategory.Utility:
                    content = "Survival";
                    break;

                default:
                    content = ((Perk.PerkCategory)menus.GetValue(i)).ToString();
                    break;
                }
                if (GUI.Button(topButton, content, new GUIStyle(GUI.skin.button)
                {
                    alignment = TextAnchor.MiddleCenter, fontSize = Mathf.RoundToInt(40 * screenScale), font = mainFont, fontStyle = FontStyle.Bold, richText = true, clipping = TextClipping.Overflow
                }))
                {
                    _perkpage         = (Perk.PerkCategory)menus.GetValue(i);
                    targetPerkOffset  = wholeScreenRect.center;
                    currentPerkOffset = targetPerkOffset;
                    DisplayedPerkIDs  = PerkDatabase.perks.Where(p => p.category == _perkpage).Select(p => p.id).ToArray();
                }
            }
        }