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
#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> jtrelMap = new Dictionary<int, int>();
void InitJudges() {
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));
jtrelMap.Add(i.Key, IdentifierManager.SharedInstance.Request("jtrel_" + i.Name));
}

View File

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