Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- using System.Reflection;
- using UnityEngine;
- [System.Serializable]
- public class Stats
- {
- public int Health;
- public int Mana;
- public int CritDamage;
- public int CritChance;
- }
- public class StatsManager : MonoBehaviour
- {
- public static StatsManager Instance { get; private set; }
- public Stats stats;
- private Dictionary<string, FieldInfo> statsCached = new();
- private void Awake()
- {
- if (Instance != null && Instance != this)
- {
- Destroy(gameObject);
- return;
- }
- Instance = this;
- DontDestroyOnLoad(gameObject);
- CacheFields();
- }
- private void CacheFields()
- {
- statsCached.Clear();
- FieldInfo[] fields = stats.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);
- foreach (FieldInfo f in fields)
- {
- if (f.FieldType == typeof(int))
- statsCached[f.Name] = f;
- }
- }
- public void AddStat(string statName, int value)
- {
- if (statsCached.TryGetValue(statName, out FieldInfo field))
- {
- int current = (int)field.GetValue(stats);
- field.SetValue(stats, current + value);
- }
- }
- public int GetStat(string statName)
- {
- if (statsCached.TryGetValue(statName, out FieldInfo field))
- return (int)field.GetValue(stats);
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment