Remove dynamic judge anchors. Add judge time properties.

This commit is contained in:
2023-01-27 16:05:57 +08:00
parent cc985844cd
commit 3d1a11f78b
3 changed files with 17 additions and 36 deletions

View File

@@ -7,10 +7,10 @@ namespace Cryville.Crtr {
public Transform Transform { get; private set; } public Transform Transform { get; private set; }
public SkinContext SkinContext { get; private set; } public SkinContext SkinContext { get; private set; }
public Dictionary<int, PropSrc> PropSrcs { get; private set; } public Dictionary<int, PropSrc> PropSrcs { get; private set; }
public Anchor(int name, Transform transform, bool hasProps = false) { public Anchor(int name, Transform transform, int propSrcCount = 0) {
Name = name; Name = name;
Transform = transform; Transform = transform;
if (hasProps) PropSrcs = new Dictionary<int, PropSrc>(); if (propSrcCount > 0) PropSrcs = new Dictionary<int, PropSrc>(propSrcCount);
SkinContext = new SkinContext(transform, PropSrcs); SkinContext = new SkinContext(transform, PropSrcs);
} }
} }

View File

@@ -77,10 +77,10 @@ namespace Cryville.Crtr.Event {
a_head = RegisterAnchor(_a_head); a_head = RegisterAnchor(_a_head);
a_tail = RegisterAnchor(_a_tail); a_tail = RegisterAnchor(_a_tail);
} }
protected Anchor RegisterAnchor(int name, bool hasPropSrcs = false) { protected Anchor RegisterAnchor(int name, int propSrcCount = 0) {
var go = new GameObject("." + IdentifierManager.SharedInstance.Retrieve(name)).transform; var go = new GameObject("." + IdentifierManager.SharedInstance.Retrieve(name)).transform;
go.SetParent(gogroup, false); go.SetParent(gogroup, false);
var result = new Anchor(name, go, hasPropSrcs); var result = new Anchor(name, go, propSrcCount);
List<Anchor> list; List<Anchor> list;
if (!Anchors.TryGetValue(name, out list)) if (!Anchors.TryGetValue(name, out list))
Anchors.Add(name, list = new List<Anchor>()); Anchors.Add(name, list = new List<Anchor>());

View File

@@ -23,49 +23,34 @@ 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 {
static readonly int _var_judge_result = IdentifierManager.SharedInstance.Request("judge_result"); static readonly int _var_judge_result = IdentifierManager.SharedInstance.Request("judge_result");
static readonly int _var_judge_time_absolute = IdentifierManager.SharedInstance.Request("judge_time_absolute");
static readonly int _var_judge_time_relative = IdentifierManager.SharedInstance.Request("judge_time_relative");
public Anchor StaticAnchor { 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 AbsoluteTime { get; private set; }
PropSrc _jtabsPropSrc;
public float RelativeTime { get; private set; } public float RelativeTime { get; private set; }
int _result = 0; PropSrc _jtrelPropSrc;
public int Result { get; private set; }
PropSrc _resultPropSrc; PropSrc _resultPropSrc;
public JudgeState(NoteHandler handler, int name) { public JudgeState(NoteHandler handler, int name) {
StaticAnchor = handler.RegisterAnchor(handler.judge.judgeMap[name], true); StaticAnchor = handler.RegisterAnchor(handler.judge.judgeMap[name], 3);
DynamicAnchors = handler.GetDynamicJudgeAnchorPair(name);
} }
public void MarkJudged(float abs, float rel, int result) { public void MarkJudged(float abs, float rel, int result) {
Judged = true;
AbsoluteTime = abs; AbsoluteTime = abs;
RelativeTime = rel; RelativeTime = rel;
_result = result; Result = result;
_jtabsPropSrc.Invalidate();
_jtrelPropSrc.Invalidate();
_resultPropSrc.Invalidate(); _resultPropSrc.Invalidate();
} }
public void InitPropSrcs() { public void InitPropSrcs() {
StaticAnchor.PropSrcs.Add(_var_judge_result, _resultPropSrc = new PropSrc.Identifier(() => _result)); StaticAnchor.PropSrcs.Add(_var_judge_result, _resultPropSrc = new PropSrc.Identifier(() => Result));
StaticAnchor.PropSrcs.Add(_var_judge_time_absolute, _jtabsPropSrc = new PropSrc.Float(() => AbsoluteTime));
StaticAnchor.PropSrcs.Add(_var_judge_time_relative, _jtrelPropSrc = new PropSrc.Float(() => RelativeTime));
} }
} }
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();
@@ -137,11 +122,7 @@ namespace Cryville.Crtr {
public override void Anchor() { public override void Anchor() {
base.Anchor(); base.Anchor();
foreach (var j in judges.Values) { // TODO Push Dynamic Anchor Events
if (!j.Judged) continue;
PushAnchorEvent(j.AbsoluteTime, j.DynamicAnchors.Absolute);
PushAnchorEvent(j.RelativeTime + cs.Time, j.DynamicAnchors.Relative);
}
} }
public override void EndUpdate(ContainerState s) { public override void EndUpdate(ContainerState s) {