116 lines
2.9 KiB
C#
Executable File
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;
|
|
|
|
|
|
} |