Implement judge report.
This commit is contained in:
@@ -24,7 +24,32 @@ namespace Cryville.Crtr {
|
||||
}
|
||||
|
||||
SectionalGameObject[] sgos;
|
||||
readonly Dictionary<Identifier, JudgeState> judges = new Dictionary<Identifier, JudgeState>();
|
||||
class JudgeState {
|
||||
public int AbsoluteAnchorName { get; set; }
|
||||
public int RelativeAnchorName { get; 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) {
|
||||
handler.RegisterAnchor(AbsoluteAnchorName = handler.judge.jtabsMap[name]);
|
||||
handler.RegisterAnchor(RelativeAnchorName = handler.judge.jtrelMap[name]);
|
||||
}
|
||||
public void MarkJudged(float abs, float rel) {
|
||||
Judged = true;
|
||||
AbsoluteTime = abs;
|
||||
RelativeTime = rel;
|
||||
}
|
||||
}
|
||||
|
||||
public override void PreInit() {
|
||||
base.PreInit();
|
||||
foreach (var j in Event.judges) {
|
||||
if (!judges.ContainsKey(j.Id)) {
|
||||
judges.Add(j.Id, new JudgeState(this, j.Id.Key));
|
||||
}
|
||||
}
|
||||
}
|
||||
public override void Init() {
|
||||
base.Init();
|
||||
sgos = gogroup.GetComponentsInChildren<SectionalGameObject>();
|
||||
@@ -90,7 +115,7 @@ namespace Cryville.Crtr {
|
||||
ChartPlayer.etor.ContextEvent = tev;
|
||||
ChartPlayer.etor.ContextState = s;
|
||||
ChartPlayer.etor.Evaluate(new PropOp.Identifier(v => name = new Identifier(v)), ruleset.judges[tev.Id].input);
|
||||
judge.Prepare(ev.Time, ev.Time + ev.Duration, name, ruleset.judges[tev.Id], this);
|
||||
judge.Prepare(ev.Time, ev.Time + ev.Duration, name, tev.Id, this);
|
||||
ChartPlayer.etor.ContextState = null;
|
||||
ChartPlayer.etor.ContextEvent = null;
|
||||
}
|
||||
@@ -166,5 +191,11 @@ namespace Cryville.Crtr {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ReportJudge(Judge.JudgeEvent ev, float time, Identifier result) {
|
||||
JudgeState state;
|
||||
if (!judges.TryGetValue(ev.JudgeId, out state)) return;
|
||||
state.MarkJudged(time, (float)(time - cs.Time));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user