StatManager.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using JetBrains.Annotations;
  5. using TMPro;
  6. using UnityEngine;
  7. using UnityEngine.Events;
  8. using UnityEngine.UI;
  9. public class StatManager : MonoBehaviour
  10. {
  11. public int GetEffectiveValue(string statName){
  12. foreach(StatInfo stat in stats ){
  13. if(stat.name == statName){
  14. int incValue = (stat.incrementalValue * PlayerStats[stat.name]);
  15. return (stat.baseValue + incValue);
  16. }
  17. }
  18. return 0;
  19. }
  20. public UnityAction OnStatsChanged;
  21. public List<StatInfo> stats;
  22. playerNetwork playerNet ;
  23. public TMP_Text availablepointsTXT;
  24. private Dictionary<string , int> m_PlayerStats;
  25. public Dictionary<string , int> PlayerStats {get{return m_PlayerStats;}
  26. private set{
  27. m_PlayerStats = value;
  28. //save
  29. RefreshUI();
  30. }}
  31. private void Start() {
  32. RefreshUI();
  33. }
  34. private void Awake() {
  35. playerNet = transform.root.GetComponent<playerNetwork>();
  36. playerNet.statManager = this;
  37. Reset();
  38. }
  39. public void loadFromCloudSave(Dictionary<string, int> statData){
  40. PlayerStats = statData;
  41. RefreshUI();
  42. }
  43. public int availablePoints{get {int points = playerNet.lvl * 3;
  44. foreach(KeyValuePair<string , int> stat in PlayerStats){
  45. points -= stat.Value;
  46. }
  47. return points;
  48. } }
  49. public void RefreshUI () {
  50. foreach(StatInfo stat in stats){
  51. int incValue = (stat.incrementalValue * PlayerStats[stat.name]);
  52. stat.statText.text = (stat.baseValue + incValue).ToString();
  53. stat.statText.transform.GetChild(0).GetComponent<Button>().interactable = availablePoints > 0;
  54. stat.statText.transform.GetChild(1).GetComponent<Button>().interactable = PlayerStats[stat.name] > 0;
  55. }
  56. availablepointsTXT.text= availablePoints.ToString();
  57. }
  58. public void Reset(){
  59. Dictionary<string , int> playerDict = new Dictionary<string, int>();
  60. foreach(StatInfo stat in stats){
  61. playerDict.Add(stat.name,0);
  62. stat.statText.transform.GetChild(0).GetComponent<Button>().onClick.RemoveAllListeners();
  63. stat.statText.transform.GetChild(1).GetComponent<Button>().onClick.RemoveAllListeners();
  64. stat.statText.transform.GetChild(0).GetComponent<Button>().onClick.AddListener(()=>{
  65. //TODO:
  66. //Debug.Log($"added stats {stat.name}");
  67. PlayerStats[stat.name]++;
  68. OnStatsChanged.Invoke();
  69. RefreshUI();
  70. });
  71. stat.statText.transform.GetChild(1).GetComponent<Button>().onClick.AddListener(()=>{
  72. //TODO:
  73. PlayerStats[stat.name]--;
  74. OnStatsChanged.Invoke();
  75. RefreshUI();
  76. });
  77. }
  78. PlayerStats = playerDict;
  79. RefreshUI();
  80. OnStatsChanged.Invoke();
  81. }
  82. }
  83. [Serializable]
  84. public class StatInfo
  85. {
  86. public string name;
  87. public int baseValue;
  88. public int incrementalValue;
  89. public TMP_Text statText;
  90. }