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);
}
}