mmorpg/Assets/Script/StatManager.cs
2024-08-23 16:17:24 +05:30

116 lines
2.9 KiB
C#
Executable File

using System;
using System.Collections;
using System.Collections.Generic;
using JetBrains.Annotations;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class StatManager : MonoBehaviour
{
public int GetEffectiveValue(string statName){
foreach(StatInfo stat in stats ){
if(stat.name == statName){
int incValue = (stat.incrementalValue * PlayerStats[stat.name]);
return (stat.baseValue + incValue);
}
}
return 0;
}
public UnityAction OnStatsChanged;
public List<StatInfo> stats;
playerNetwork playerNet ;
public TMP_Text availablepointsTXT;
private Dictionary<string , int> m_PlayerStats;
public Dictionary<string , int> PlayerStats {get{return m_PlayerStats;}
private set{
m_PlayerStats = value;
//save
RefreshUI();
}}
private void Start() {
RefreshUI();
}
private void Awake() {
playerNet = transform.root.GetComponent<playerNetwork>();
playerNet.statManager = this;
Reset();
}
public void loadFromCloudSave(Dictionary<string, int> statData){
PlayerStats = statData;
RefreshUI();
}
public int availablePoints{get {int points = playerNet.lvl * 3;
foreach(KeyValuePair<string , int> stat in PlayerStats){
points -= stat.Value;
}
return points;
} }
public void RefreshUI () {
foreach(StatInfo stat in stats){
int incValue = (stat.incrementalValue * PlayerStats[stat.name]);
stat.statText.text = (stat.baseValue + incValue).ToString();
stat.statText.transform.GetChild(0).GetComponent<Button>().interactable = availablePoints > 0;
stat.statText.transform.GetChild(1).GetComponent<Button>().interactable = PlayerStats[stat.name] > 0;
}
availablepointsTXT.text= availablePoints.ToString();
}
public void Reset(){
Dictionary<string , int> playerDict = new Dictionary<string, int>();
foreach(StatInfo stat in stats){
playerDict.Add(stat.name,0);
stat.statText.transform.GetChild(0).GetComponent<Button>().onClick.RemoveAllListeners();
stat.statText.transform.GetChild(1).GetComponent<Button>().onClick.RemoveAllListeners();
stat.statText.transform.GetChild(0).GetComponent<Button>().onClick.AddListener(()=>{
//TODO:
//Debug.Log($"added stats {stat.name}");
PlayerStats[stat.name]++;
OnStatsChanged.Invoke();
RefreshUI();
});
stat.statText.transform.GetChild(1).GetComponent<Button>().onClick.AddListener(()=>{
//TODO:
PlayerStats[stat.name]--;
OnStatsChanged.Invoke();
RefreshUI();
});
}
PlayerStats = playerDict;
RefreshUI();
OnStatsChanged.Invoke();
}
}
[Serializable]
public class StatInfo
{
public string name;
public int baseValue;
public int incrementalValue;
public TMP_Text statText;
}