Files
source/Assets/Scripts/Tools.cs

108 lines
4.0 KiB
C#

using System;
using System.Numerics;
using System.Security.Cryptography;
using System.Text;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public static class Tools
{
public static Sprite GetIconForUser(BigInteger user)
{
if (user == 1) return Resources.Load<Sprite>("Icons/Icons/bird_-1");
else if (user == 2) return Resources.Load<Sprite>("Icons/Icons/bird_-2");
else if (user == 4) return Resources.Load<Sprite>("Icons/Icons/bird_-3");
else if (user == 3) return Resources.Load<Sprite>("Icons/Icons/bird_-4");
else return Resources.Load<Sprite>("Icons/Icons/bird_1");
}
public static string FormatWithCommas(string number)
{
try { return FormatWithCommas(BigInteger.Parse(number)); }
catch { return number; }
}
public static string FormatWithCommas(BigInteger number)
{
return string.Format("{0:N0}", number);
}
public static void UpdateStatusText(TMP_Text statusText, string message, Color color)
{
statusText.text = message;
statusText.color = color;
}
public static void RenderFromBase64(string base64, Image targetImage)
{
byte[] imageData = Convert.FromBase64String(base64);
Texture2D tex = new(2, 2, TextureFormat.ARGB32, false);
if (!tex.LoadImage(imageData)) return;
tex.filterMode = FilterMode.Point;
tex.Apply(false, false);
Sprite sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new UnityEngine.Vector2(0.5f, 0.5f));
targetImage.sprite = sprite;
}
public static void RenderFromBase64(string base64, SpriteRenderer targetImage)
{
byte[] imageData = Convert.FromBase64String(base64);
Texture2D tex = new(2, 2, TextureFormat.ARGB32, false);
if (!tex.LoadImage(imageData)) return;
tex.filterMode = FilterMode.Point;
tex.Apply(false, false);
Sprite sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new UnityEngine.Vector2(0.5f, 0.5f));
targetImage.sprite = sprite;
}
public static void RefreshHierarchy(GameObject root)
{
foreach (Transform child in root.transform) RefreshHierarchy(child.gameObject);
if (root.TryGetComponent<RectTransform>(out var rect)) LayoutRebuilder.ForceRebuildLayoutImmediate(rect);
}
public static string Sha512Sum(byte[] data)
{
using var sha512 = SHA512.Create();
var hash = sha512.ComputeHash(data);
var sb = new StringBuilder(hash.Length * 2);
foreach (var b in hash)
sb.Append(b.ToString("x2"));
return sb.ToString();
}
public static (BigInteger totalXp, double level, BigInteger currentXpInLevel, BigInteger totalXpForLevel, double percentDone) GetLevelInfo()
{
BigInteger totalXp = 0;
totalXp += BazookaManager.Instance.GetGameStoreTotalNormalBerries();
totalXp -= BazookaManager.Instance.GetGameStoreTotalPoisonBerries();
totalXp -= BazookaManager.Instance.GetGameStoreTotalSlowBerries();
totalXp += BazookaManager.Instance.GetGameStoreTotalUltraBerries() * 5;
totalXp += BazookaManager.Instance.GetGameStoreTotalSpeedyBerries() * 10;
totalXp += BazookaManager.Instance.GetGameStoreTotalCoinBerries() * 10;
if (totalXp < 0) totalXp = 0;
double discriminant = 95 * 95 + 20.0 * (double)totalXp;
double level = (-95 + Math.Sqrt(discriminant)) / 10.0;
double flooredLevel = Math.Floor(level);
BigInteger xpAtStartOfLevel = (BigInteger)(5 * flooredLevel * flooredLevel + 95 * flooredLevel);
double nextLevel = flooredLevel + 1;
BigInteger xpAtNextLevel = (BigInteger)(5 * nextLevel * nextLevel + 95 * nextLevel);
BigInteger totalXpForLevel = xpAtNextLevel - xpAtStartOfLevel;
BigInteger currentXpInLevel = totalXp - xpAtStartOfLevel;
double percentDone = (double)currentXpInLevel / (double)totalXpForLevel * 100.0;
return (totalXp, flooredLevel, currentXpInLevel, totalXpForLevel, percentDone);
}
}