using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.Events; using UnityEngine.Experimental.GlobalIllumination; public class ClassSelection : MonoBehaviour { public List<ClassBaseType> classes; public int currentClassIndex; public ClassBaseType selectedClass; [SerializeField] private List<GameObject> playerModels; private GameObject currentModel; private StatusEffects statusEffects; private HealthSystem healthSystem; [SerializeField] private UnityEvent NoMoreClassesAvailable; [SerializeField] private UnityEvent ClassSwitched; void Start() { if (classes.Count == 0) { Debug.LogError("No Classes in game"); return; } statusEffects = GetComponent<StatusEffects>(); healthSystem = GetComponent<HealthSystem>(); foreach(ClassBaseType c in classes) { c.Starter(gameObject); } currentClassIndex = 0; if(playerModels.Count == classes.Count) currentModel = playerModels[0]; selectedClass = classes[currentClassIndex]; UpdateStatus(); } public void SwitchClasses() { if(classes.Count == 0) return; int startIndex = currentClassIndex; while (true) { selectedClass.currentHp = healthSystem.GetHealth(); currentClassIndex++; if (currentClassIndex == classes.Count) currentClassIndex = 0; selectedClass = classes[currentClassIndex]; if (!selectedClass.dead) { UpdateStatus(); ChangeModel(); ClassSwitched.Invoke(); break; } if(currentClassIndex == startIndex) { NoMoreClassesAvailable.Invoke(); break; } } } private void UpdateStatus() { statusEffects.maxHp = selectedClass.hp; healthSystem.EditHealth(selectedClass.currentHp); statusEffects.speedAir = selectedClass.speedAir; statusEffects.speedGround = selectedClass.speedGround; } public void KillCurrentChar() { if (classes.Count == 0) return; selectedClass.dead = true; SwitchClasses(); } public void UseAbility() { if (classes.Count == 0) return; selectedClass.Ability(statusEffects); } public void CoolDowns() { if (classes.Count == 0) return; for (int i = 0; i < classes.Count; i++) { classes[i].Cooldown(); } } public void ChangeModel() { if(playerModels.Count < classes.Count) return; currentModel.SetActive(false); currentModel = playerModels[currentClassIndex]; currentModel.SetActive(true); } }