Files
bansonic_beta_main/Assets/scripts/Combat/ScoreManager.cs
T

128 lines
5.3 KiB
C#

using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public static ScoreManager Instance { get; private set; }
public int totalScore = 0;
private void Awake()
{
if (Instance == null) Instance = this;
else Destroy(gameObject);
}
public void RecalculateTotal()
{
int sum = 0;
int[] currents = new int[5];
int[] maxes = new int[5];
for (int i = 1; i <= 5; i++)
{
var go = GameObject.Find($"ally_0{i}");
if (go == null) { currents[i - 1] = 0; maxes[i - 1] = 0; continue; }
var ally = go.GetComponent<AllyCombatant>();
if (ally != null)
{
currents[i - 1] = ally.currentScore;
maxes[i - 1] = ally.maxTrackScore;
}
else
{
currents[i - 1] = 0;
maxes[i - 1] = 0;
}
sum += currents[i - 1];
}
totalScore = sum;
// update UI if available
if (teamUIController.Instance != null)
{
var ui = teamUIController.Instance;
// helper lambda to set text on TMP or legacy Text under a parent fallback
void SetScoreText(TextMeshProUGUI assignedTmp, GameObject parent, int cur, int max, string slotName)
{
string value = cur + "/" + max;
if (assignedTmp != null)
{
assignedTmp.text = value;
Debug.Log($"[ScoreManager] Wrote to assigned TMP for {slotName}: '{value}' -> {assignedTmp.gameObject.name}");
return;
}
// try find TMP in parent
if (parent != null)
{
var tmp = parent.GetComponentInChildren<TextMeshProUGUI>(true);
if (tmp != null)
{
tmp.text = value;
Debug.Log($"[ScoreManager] Wrote to TMP in parent {parent.name} for {slotName}: '{value}' -> {tmp.gameObject.name}");
return;
}
var legacy = parent.GetComponentInChildren<Text>(true);
if (legacy != null)
{
legacy.text = value;
Debug.Log($"[ScoreManager] Wrote to legacy Text in parent {parent.name} for {slotName}: '{value}' -> {legacy.gameObject.name}");
return;
}
}
Debug.LogWarning($"[ScoreManager] Could not find UI to write score for {slotName}. assignedTmp is null and parent '{parent?.name}' has no TMP/Text children.");
}
// Update each slot: use the explicit TMP fields if set; otherwise try parent object fields
SetScoreText(ui.teammate01_current_scoreText, ui.objectFather_ally01, currents[0], maxes[0], "teammate01");
SetScoreText(ui.teammate02_current_scoreText, ui.objectFather_ally02, currents[1], maxes[1], "teammate02");
SetScoreText(ui.teammate03_current_scoreText, ui.objectFather_ally03, currents[2], maxes[2], "teammate03");
SetScoreText(ui.teammate04_current_scoreText, ui.objectFather_ally04, currents[3], maxes[3], "teammate04");
SetScoreText(ui.teammate05_current_scoreText, ui.objectFather_ally05, currents[4], maxes[4], "teammate05");
// update total score (try TMP first, then legacy Text)
if (ui.currentTotalScore != null)
{
var go = ui.currentTotalScore.gameObject;
if (go != null)
{
var tmpComp = go.GetComponent<TextMeshProUGUI>();
if (tmpComp != null)
{
tmpComp.text = totalScore.ToString();
Debug.Log($"[ScoreManager] Wrote total to TMP: {totalScore} -> {tmpComp.gameObject.name}");
}
else
{
var legacyComp = go.GetComponent<Text>();
if (legacyComp != null)
{
legacyComp.text = totalScore.ToString();
Debug.Log($"[ScoreManager] Wrote total to legacy Text: {totalScore} -> {legacyComp.gameObject.name}");
}
else
{
ui.currentTotalScore.text = totalScore.ToString(); // fallback
Debug.Log($"[ScoreManager] Wrote total to currentTotalScore field fallback: {totalScore}");
}
}
}
else
{
ui.currentTotalScore.text = totalScore.ToString();
Debug.Log($"[ScoreManager] Wrote total to currentTotalScore fallback (no go): {totalScore}");
}
}
else
{
Debug.LogWarning("[ScoreManager] teamUIController.currentTotalScore is null; cannot display total score.");
}
}
else
{
Debug.LogWarning("[ScoreManager] teamUIController.Instance is null; cannot update UI.");
}
}
}