结算重做部分 谱面分装好 编队UI之bug修复

This commit is contained in:
FloatGaming
2025-12-16 04:15:22 +08:00
parent aaca372833
commit 51b39d8b18
96 changed files with 17823 additions and 11337 deletions
+19 -8
View File
@@ -25,6 +25,7 @@ public class AllyCombatant : MonoBehaviour, ICombatant
public float scoreEfficiency = 1f;
private bool isDead = false; // new: dead flag
public BeatmapManager bmm;
// add attack stat to be available at runtime
[Tooltip("基础攻击力(运行时使用),会从 AllyHero_SO.levelStats[0].attack ")]
@@ -35,6 +36,9 @@ public class AllyCombatant : MonoBehaviour, ICombatant
[Tooltip("Base score value for a perfect hit on this track")]
public int baseTrackScore = 1000;
// Editable multipliers for each judge quality (exposed for designers)
[Tooltip("Score multiplier for Perfect (default 1.0)")]
public float perfectRatio = 1f;
[Tooltip("Score multiplier for Great (e.g. 0.75)")]
public float greatRatio = 0.75f;
[Tooltip("Score multiplier for Good (e.g. 0.5)")]
@@ -298,34 +302,41 @@ public class AllyCombatant : MonoBehaviour, ICombatant
}
// Scoring API
public void AddScoreForJudge(string judge)
// Modified to return the amount added so callers can track per-track contributions
public int AddScoreForJudge(string judge)
{
int add = 0;
float multiplier = 0f;
switch (judge)
{
case "Perfect":
add = baseTrackScore;
multiplier = perfectRatio;
break;
case "Great":
add = Mathf.FloorToInt(baseTrackScore * greatRatio);
multiplier = greatRatio;
break;
case "Good":
add = Mathf.FloorToInt(baseTrackScore * goodRatio);
multiplier = goodRatio;
break;
case "Miss":
add = Mathf.FloorToInt(baseTrackScore * missRatio);
multiplier = missRatio;
break;
default:
add = 0;
multiplier = 0f;
break;
}
// apply scoreEfficiency or other modifiers here
add = Mathf.FloorToInt(add * scoreEfficiency);
// Use perNoteScore from BeatmapManager as the base score for each note hit
int baseScore = bmm != null ? bmm.perNoteScore : baseTrackScore;
add = Mathf.FloorToInt(baseScore * multiplier);
int before = currentScore;
currentScore = Mathf.Clamp(currentScore + add, 0, maxTrackScore);
int actuallyAdded = currentScore - before;
UpdateScoreUI();
// update global total
ScoreManager.Instance?.RecalculateTotal();
return actuallyAdded;
}
// Add an arbitrary score delta directly (used by skills to modify single judge or grant/penalize score)