Eonirr

Untitled

Feb 9th, 2026
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Reflection;
  3. using UnityEngine;
  4.  
  5. [System.Serializable]
  6. public class Stats
  7. {
  8. public int Health;
  9. public int Mana;
  10. public int CritDamage;
  11. public int CritChance;
  12. }
  13.  
  14.  
  15. public class StatsManager : MonoBehaviour
  16. {
  17. public static StatsManager Instance { get; private set; }
  18.  
  19. public Stats stats;
  20.  
  21. private Dictionary<string, FieldInfo> statsCached = new();
  22.  
  23. private void Awake()
  24. {
  25. if (Instance != null && Instance != this)
  26. {
  27. Destroy(gameObject);
  28. return;
  29. }
  30.  
  31. Instance = this;
  32. DontDestroyOnLoad(gameObject);
  33.  
  34. CacheFields();
  35. }
  36.  
  37. private void CacheFields()
  38. {
  39. statsCached.Clear();
  40. FieldInfo[] fields = stats.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);
  41.  
  42. foreach (FieldInfo f in fields)
  43. {
  44. if (f.FieldType == typeof(int))
  45. statsCached[f.Name] = f;
  46. }
  47. }
  48.  
  49. public void AddStat(string statName, int value)
  50. {
  51. if (statsCached.TryGetValue(statName, out FieldInfo field))
  52. {
  53. int current = (int)field.GetValue(stats);
  54. field.SetValue(stats, current + value);
  55. }
  56. }
  57.  
  58. public int GetStat(string statName)
  59. {
  60. if (statsCached.TryGetValue(statName, out FieldInfo field))
  61. return (int)field.GetValue(stats);
  62.  
  63. return 0;
  64. }
  65. }
  66.  
Advertisement
Add Comment
Please, Sign In to add comment