using System.Collections; using System.Collections.Generic; using UnityEngine; public class Knowledge : MonoBehaviour { [SerializeField] private FloatVariable scriptableKnowledgeLevel; [SerializeField] private float baseKnowledgeThreshold = 500f; [SerializeField] private float KnowledgeThresholdGrowth = 100f; [SerializeField] private float exponent = 1.5f; [Space] public GameEventFloat OnKnowledgeLevelUp; public GameEventFloat OnKnowledgeChanged; private float currentKnowledgeValue; private int currentKnowledgeLevel; float finalKnowledgeThreshold; private void Start() { currentKnowledgeLevel = 1; currentKnowledgeValue = 0f; scriptableKnowledgeLevel.Value = currentKnowledgeLevel; finalKnowledgeThreshold = baseKnowledgeThreshold + currentKnowledgeLevel * KnowledgeThresholdGrowth * exponent; } public void ChangeKnowledgeValue(float amount) { currentKnowledgeValue += amount; if(amount != 0) { OnKnowledgeChanged.Raise(amount); } if(currentKnowledgeValue >= finalKnowledgeThreshold) { currentKnowledgeValue -= finalKnowledgeThreshold; currentKnowledgeLevel++; OnKnowledgeLevelUp.Raise(currentKnowledgeLevel); } if(currentKnowledgeValue >= finalKnowledgeThreshold) { ChangeKnowledgeValue(0); } Debug.Log(amount + " knowledge gained."); Debug.Log(currentKnowledgeValue + " / " + finalKnowledgeThreshold); } public void UpdateThreshold(float level) { finalKnowledgeThreshold = baseKnowledgeThreshold + level * KnowledgeThresholdGrowth * exponent; } public void UpdateScriptableLevel(float level) { scriptableKnowledgeLevel.Value = level; } }