Add static judge anchor. Change dynamic anchors to single only.

This commit is contained in:
2023-01-16 13:35:51 +08:00
parent a09a5686d7
commit d0a23aaf30
2 changed files with 27 additions and 6 deletions

View File

@@ -64,10 +64,12 @@ namespace Cryville.Crtr {
} }
#endregion #endregion
#region Judge #region Judge
internal readonly Dictionary<int, int> judgeMap = new Dictionary<int, int>();
internal readonly Dictionary<int, int> jtabsMap = new Dictionary<int, int>(); internal readonly Dictionary<int, int> jtabsMap = new Dictionary<int, int>();
internal readonly Dictionary<int, int> jtrelMap = new Dictionary<int, int>(); internal readonly Dictionary<int, int> jtrelMap = new Dictionary<int, int>();
void InitJudges() { void InitJudges() {
foreach (var i in _rs.judges.Keys) { foreach (var i in _rs.judges.Keys) {
judgeMap.Add(i.Key, IdentifierManager.SharedInstance.Request("judge_" + i.Name));
jtabsMap.Add(i.Key, IdentifierManager.SharedInstance.Request("jtabs_" + i.Name)); jtabsMap.Add(i.Key, IdentifierManager.SharedInstance.Request("jtabs_" + i.Name));
jtrelMap.Add(i.Key, IdentifierManager.SharedInstance.Request("jtrel_" + i.Name)); jtrelMap.Add(i.Key, IdentifierManager.SharedInstance.Request("jtrel_" + i.Name));
} }

View File

@@ -23,15 +23,16 @@ namespace Cryville.Crtr {
SectionalGameObject[] sgos; SectionalGameObject[] sgos;
readonly Dictionary<Chart.Judge, JudgeState> judges = new Dictionary<Chart.Judge, JudgeState>(); readonly Dictionary<Chart.Judge, JudgeState> judges = new Dictionary<Chart.Judge, JudgeState>();
readonly Dictionary<int, DynamicJudgeAnchorPair> dynJudgeAnchors = new Dictionary<int, DynamicJudgeAnchorPair>();
class JudgeState { class JudgeState {
public Anchor AbsoluteAnchor { get; private set; } public Anchor StaticAnchor { get; private set; }
public Anchor RelativeAnchor { get; private set; } public DynamicJudgeAnchorPair DynamicAnchors { get; private set; }
public bool Judged { get; private set; } public bool Judged { get; private set; }
public float AbsoluteTime { get; private set; } public float AbsoluteTime { get; private set; }
public float RelativeTime { get; private set; } public float RelativeTime { get; private set; }
public JudgeState(NoteHandler handler, int name) { public JudgeState(NoteHandler handler, int name) {
AbsoluteAnchor = handler.RegisterAnchor(handler.judge.jtabsMap[name]); StaticAnchor = handler.RegisterAnchor(handler.judge.judgeMap[name]);
RelativeAnchor = handler.RegisterAnchor(handler.judge.jtrelMap[name]); DynamicAnchors = handler.GetDynamicJudgeAnchorPair(name);
} }
public void MarkJudged(float abs, float rel) { public void MarkJudged(float abs, float rel) {
Judged = true; Judged = true;
@@ -39,6 +40,24 @@ namespace Cryville.Crtr {
RelativeTime = rel; RelativeTime = rel;
} }
} }
class DynamicJudgeAnchorPair {
public Anchor Absolute { get; private set; }
public Anchor Relative { get; private set; }
public DynamicJudgeAnchorPair(Anchor absolute, Anchor relative) {
Absolute = absolute;
Relative = relative;
}
}
DynamicJudgeAnchorPair GetDynamicJudgeAnchorPair(int name) {
DynamicJudgeAnchorPair result;
if (!dynJudgeAnchors.TryGetValue(name, out result)) {
dynJudgeAnchors.Add(name, result = new DynamicJudgeAnchorPair(
RegisterAnchor(judge.jtabsMap[name]),
RegisterAnchor(judge.jtrelMap[name])
));
}
return result;
}
public override void PreInit() { public override void PreInit() {
base.PreInit(); base.PreInit();
@@ -112,8 +131,8 @@ namespace Cryville.Crtr {
if (cs.Working) { if (cs.Working) {
foreach (var j in judges.Values) { foreach (var j in judges.Values) {
if (!j.Judged) continue; if (!j.Judged) continue;
PushAnchorEvent(j.AbsoluteTime, j.AbsoluteAnchor); PushAnchorEvent(j.AbsoluteTime, j.DynamicAnchors.Absolute);
PushAnchorEvent(j.RelativeTime + cs.Time, j.RelativeAnchor); PushAnchorEvent(j.RelativeTime + cs.Time, j.DynamicAnchors.Relative);
} }
} }
} }