ui基本完毕,修了一大把的bug

This commit is contained in:
2026-07-13 02:28:39 +08:00
parent 1e20d73e90
commit fd22501f71
958 changed files with 378289 additions and 41038 deletions
+180
View File
@@ -1,6 +1,7 @@
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using DG.Tweening;
public class ScoreManager : MonoBehaviour
{
@@ -56,6 +57,12 @@ public class ScoreManager : MonoBehaviour
private bool perfectBonusHooked = false;
private int perfectClearBonusPm = 0;
private bool perfectClearBonusApplied = false;
private int comboRecentPlusAmount = 0;
private int displayedRecentPlusAmount = 0;
private int lastKnownCombo = 0;
private float lastRecentPlusScoreTime = float.NegativeInfinity;
private Tween recentPlusAmountValueTween;
private const float RecentPlusResetDelaySeconds = 5f;
[Header("Judgement Statistics")]
public int countPerfect = 0;
@@ -126,6 +133,10 @@ public class ScoreManager : MonoBehaviour
}
ResetStatistics();
comboRecentPlusAmount = 0;
displayedRecentPlusAmount = 0;
lastKnownCombo = 0;
lastRecentPlusScoreTime = float.NegativeInfinity;
}
private void OnEnable()
@@ -140,6 +151,7 @@ public class ScoreManager : MonoBehaviour
private void OnDestroy()
{
KillRecentPlusAmountValueTween();
UnhookPerfectBonusEvent();
}
@@ -148,11 +160,13 @@ public class ScoreManager : MonoBehaviour
// Ensure the progress keys start at 0.
UpdateIdolscoreKeyScales();
TryHookPerfectBonusEvent();
RefreshAllScoreUi();
}
private void Update()
{
EnsureIdolscoreKeys();
UpdateRecentPlusAmountTimeout();
float dt = Time.unscaledDeltaTime;
if (dt <= 0f) return;
@@ -428,6 +442,8 @@ public class ScoreManager : MonoBehaviour
if (JudgeManager.IsDebugEnabled)
Debug.Log($"[ScoreManager] Added {pmDelta} to track {trackIndex} pm sum, idol delta {idolDelta}. New pm sums: R{red_pmScore_sum} G{green_pmScore_sum} Y{yellow_pmScore_sum} P{purple_pmScore_sum} B{blue_pmScore_sum} -> allSumPm={allSum_pmScore}. Idol sums: R{red_idolScore_sum} G{green_idolScore_sum} Y{yellow_idolScore_sum} P{purple_idolScore_sum} B{blue_idolScore_sum} -> allSumIdol={allSum_idolScore}");
UpdateRecentPlusAmountUi(pmActualDelta + idolActualDelta);
// Update UI in teamUIController if available (per-track pm sums + aggregate)
var ui = teamUIController.Instance;
if (ui != null)
@@ -514,6 +530,8 @@ public class ScoreManager : MonoBehaviour
iNumberPrefabController.SpawnForAllyStatic(trackIndex, type, actual);
}
UpdateRecentPlusAmountUi(actual);
red_idolScore_sum = idolScoreSums[0];
green_idolScore_sum = idolScoreSums[1];
yellow_idolScore_sum = idolScoreSums[2];
@@ -694,10 +712,172 @@ public class ScoreManager : MonoBehaviour
{
if (JudgeManager.IsDebugEnabled) Debug.LogWarning("[ScoreManager] teamUIController.currentTotalScore is null; cannot display total score.");
}
if (ui.currentScoreRankImage != null && ui.currentScoreRankConfig != null)
{
ui.currentScoreRankImage.sprite = ui.currentScoreRankConfig.GetRankSprite(totalScore);
}
}
else
{
if (JudgeManager.IsDebugEnabled) Debug.LogWarning("[ScoreManager] teamUIController.Instance is null; cannot update UI.");
}
}
public void ApplyExternalTotalScoreDelta(int delta)
{
if (delta == 0)
{
return;
}
long next = (long)totalScore + delta;
if (next < 0) next = 0;
if (next > int.MaxValue - 1L) next = int.MaxValue - 1L;
totalScore = (int)next;
UpdateRecentPlusAmountUi(delta);
RefreshAllScoreUi();
}
private void UpdateRecentPlusAmountUi(int scoreDelta)
{
var ui = teamUIController.Instance;
if (ui == null || ui.recentPlusAmountText == null)
{
return;
}
int comboNow = ui.CurrentCombo;
bool comboBroken = comboNow <= 0;
bool comboRestarted = comboNow > 0 && lastKnownCombo <= 0;
if (comboBroken)
{
ResetRecentPlusAmountState(ui, true);
lastKnownCombo = comboNow;
return;
}
if (comboRestarted)
{
ResetRecentPlusAmountState(ui, false);
}
if (scoreDelta != 0)
{
comboRecentPlusAmount += scoreDelta;
lastRecentPlusScoreTime = Time.unscaledTime;
}
ui.ResetRecentPlusAmountVisual();
AnimateRecentPlusAmountText(ui, comboRecentPlusAmount);
lastKnownCombo = comboNow;
}
public void RefreshAllScoreUi()
{
var ui = teamUIController.Instance;
if (ui == null)
{
return;
}
if (ui.currentTotalScore != null)
{
ui.currentTotalScore.text = totalScore.ToString();
}
if (ui.currentScoreRankImage != null && ui.currentScoreRankConfig != null)
{
ui.currentScoreRankImage.sprite = ui.currentScoreRankConfig.GetRankSprite(totalScore);
}
}
private void AnimateRecentPlusAmountText(teamUIController ui, int targetValue)
{
if (ui == null || ui.recentPlusAmountText == null)
{
return;
}
KillRecentPlusAmountValueTween();
int startValue = displayedRecentPlusAmount;
if (startValue == targetValue)
{
ui.recentPlusAmountText.text = FormatSignedScoreDelta(targetValue);
return;
}
recentPlusAmountValueTween = DOTween
.To(() => startValue, value =>
{
startValue = value;
displayedRecentPlusAmount = value;
ui.recentPlusAmountText.text = FormatSignedScoreDelta(value);
}, targetValue, 0.2f)
.SetEase(Ease.OutQuad)
.SetUpdate(true)
.OnComplete(() =>
{
displayedRecentPlusAmount = targetValue;
if (ui.recentPlusAmountText != null)
{
ui.recentPlusAmountText.text = FormatSignedScoreDelta(targetValue);
}
recentPlusAmountValueTween = null;
});
}
private void KillRecentPlusAmountValueTween()
{
if (recentPlusAmountValueTween == null)
{
return;
}
recentPlusAmountValueTween.Kill();
recentPlusAmountValueTween = null;
}
private void UpdateRecentPlusAmountTimeout()
{
if (comboRecentPlusAmount == 0)
{
return;
}
if (Time.unscaledTime - lastRecentPlusScoreTime < RecentPlusResetDelaySeconds)
{
return;
}
ResetRecentPlusAmountState(teamUIController.Instance, false);
}
private void ResetRecentPlusAmountState(teamUIController ui, bool killTweenOnly)
{
comboRecentPlusAmount = 0;
displayedRecentPlusAmount = 0;
lastRecentPlusScoreTime = float.NegativeInfinity;
KillRecentPlusAmountValueTween();
if (ui == null || ui.recentPlusAmountText == null)
{
return;
}
ui.recentPlusAmountText.text = FormatSignedScoreDelta(0);
if (killTweenOnly)
{
return;
}
}
private static string FormatSignedScoreDelta(int value)
{
return value >= 0 ? $"+{value}" : value.ToString();
}
}