Split (judge) area definition from judges list.
This commit is contained in:
@@ -47,14 +47,14 @@ namespace Cryville.Crtr {
|
|||||||
_etor = new PdtEvaluator();
|
_etor = new PdtEvaluator();
|
||||||
_etor.ContextJudge = this;
|
_etor.ContextJudge = this;
|
||||||
_rs = rs;
|
_rs = rs;
|
||||||
_areaFuncs = rs.judges.Areas;
|
_areaFuncs = rs.areas;
|
||||||
_numsrc1 = new PropSrc.Float(() => _numbuf1);
|
_numsrc1 = new PropSrc.Float(() => _numbuf1);
|
||||||
_numsrc2 = new PropSrc.Float(() => _numbuf2);
|
_numsrc2 = new PropSrc.Float(() => _numbuf2);
|
||||||
_numsrc3 = new PropSrc.Float(() => _numbuf3);
|
_numsrc3 = new PropSrc.Float(() => _numbuf3);
|
||||||
_numsrc4 = new PropSrc.Float(() => _numbuf4);
|
_numsrc4 = new PropSrc.Float(() => _numbuf4);
|
||||||
_identop = new PropOp.Identifier(v => _identbuf = new Identifier(v));
|
_identop = new PropOp.Identifier(v => _identbuf = new Identifier(v));
|
||||||
_clipop = new PropOp.Clip(v => _clipbuf = v);
|
_clipop = new PropOp.Clip(v => _clipbuf = v);
|
||||||
_rs.judges.Judges.TryGetValue(new Identifier(_var_pause), out _judgePause);
|
_rs.judges.TryGetValue(new Identifier(_var_pause), out _judgePause);
|
||||||
foreach (var i in rs.inputs) {
|
foreach (var i in rs.inputs) {
|
||||||
var id = i.Key;
|
var id = i.Key;
|
||||||
var l = new List<JudgeEvent>();
|
var l = new List<JudgeEvent>();
|
||||||
@@ -79,7 +79,7 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
void InsertEvent(Chart.Judge ev, Clip clip, Identifier id, NoteHandler handler) {
|
void InsertEvent(Chart.Judge ev, Clip clip, Identifier id, NoteHandler handler) {
|
||||||
if (id.Key == _var_pause) throw new InvalidOperationException("Cannot assign the special judge \"pause\" to notes");
|
if (id.Key == _var_pause) throw new InvalidOperationException("Cannot assign the special judge \"pause\" to notes");
|
||||||
var def = _rs.judges.Judges[id];
|
var def = _rs.judges[id];
|
||||||
_etor.Evaluate(_identop, def.input);
|
_etor.Evaluate(_identop, def.input);
|
||||||
_etor.Evaluate(_clipop, def.clip);
|
_etor.Evaluate(_clipop, def.clip);
|
||||||
var list = evs[_identbuf];
|
var list = evs[_identbuf];
|
||||||
@@ -100,7 +100,7 @@ namespace Cryville.Crtr {
|
|||||||
#region Judge
|
#region Judge
|
||||||
internal readonly IntKeyedDictionary<int> judgeMap = new IntKeyedDictionary<int>();
|
internal readonly IntKeyedDictionary<int> judgeMap = new IntKeyedDictionary<int>();
|
||||||
void InitJudges() {
|
void InitJudges() {
|
||||||
foreach (var i in _rs.judges.Judges) {
|
foreach (var i in _rs.judges) {
|
||||||
var id = i.Key;
|
var id = i.Key;
|
||||||
judgeMap.Add(id.Key, IdentifierManager.Shared.Request("judge_" + id.Name));
|
judgeMap.Add(id.Key, IdentifierManager.Shared.Request("judge_" + id.Name));
|
||||||
}
|
}
|
||||||
@@ -249,7 +249,7 @@ namespace Cryville.Crtr {
|
|||||||
bool IJudge.Pass(JudgeEvent ev, float time, Identifier[] ids, int depth) {
|
bool IJudge.Pass(JudgeEvent ev, float time, Identifier[] ids, int depth) {
|
||||||
if (depth >= 16) throw new JudgePropagationException();
|
if (depth >= 16) throw new JudgePropagationException();
|
||||||
foreach (var i in ids) {
|
foreach (var i in ids) {
|
||||||
var def = _rs.judges.Judges[i];
|
var def = _rs.judges[i];
|
||||||
if (def.hit != null) _etor.Evaluate(_flagop, def.hit);
|
if (def.hit != null) _etor.Evaluate(_flagop, def.hit);
|
||||||
else _flag = true;
|
else _flag = true;
|
||||||
if (_flag) {
|
if (_flag) {
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ namespace Cryville.Crtr {
|
|||||||
[Binder(typeof(PdtBinder))]
|
[Binder(typeof(PdtBinder))]
|
||||||
public class PdtRuleset {
|
public class PdtRuleset {
|
||||||
public Dictionary<Identifier, InputDefinition> inputs;
|
public Dictionary<Identifier, InputDefinition> inputs;
|
||||||
public JudgeDefinitionCollection judges;
|
public Dictionary<Identifier, PdtExpression> areas;
|
||||||
|
public Dictionary<Identifier, JudgeDefinition> judges;
|
||||||
public Dictionary<Identifier, ScoreDefinition> scores;
|
public Dictionary<Identifier, ScoreDefinition> scores;
|
||||||
public Constraint constraints;
|
public Constraint constraints;
|
||||||
public void Optimize(PdtEvaluatorBase etor) {
|
public void Optimize(PdtEvaluatorBase etor) {
|
||||||
@@ -43,15 +44,15 @@ namespace Cryville.Crtr {
|
|||||||
etor.Optimize(e.Value);
|
etor.Optimize(e.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (var j in judges.Judges) {
|
foreach (var a in areas) {
|
||||||
|
etor.Optimize(a.Value);
|
||||||
|
}
|
||||||
|
foreach (var j in judges) {
|
||||||
var judge = j.Value;
|
var judge = j.Value;
|
||||||
if (judge.hit != null) etor.Optimize(judge.hit);
|
if (judge.hit != null) etor.Optimize(judge.hit);
|
||||||
if (judge.on_hit != null) OptimizeJudgeActions(judge.on_hit, etor);
|
if (judge.on_hit != null) OptimizeJudgeActions(judge.on_hit, etor);
|
||||||
if (judge.on_miss != null) OptimizeJudgeActions(judge.on_miss, etor);
|
if (judge.on_miss != null) OptimizeJudgeActions(judge.on_miss, etor);
|
||||||
}
|
}
|
||||||
foreach (var a in judges.Areas) {
|
|
||||||
etor.Optimize(a.Value);
|
|
||||||
}
|
|
||||||
foreach (var s in scores) {
|
foreach (var s in scores) {
|
||||||
var score = s.Value;
|
var score = s.Value;
|
||||||
if (score.value != null) etor.Optimize(score.value);
|
if (score.value != null) etor.Optimize(score.value);
|
||||||
@@ -71,12 +72,6 @@ namespace Cryville.Crtr {
|
|||||||
public bool notnull;
|
public bool notnull;
|
||||||
public PairList<Identifier, PdtExpression> pass;
|
public PairList<Identifier, PdtExpression> pass;
|
||||||
}
|
}
|
||||||
public class JudgeDefinitionCollection {
|
|
||||||
[ElementList]
|
|
||||||
public Dictionary<Identifier, JudgeDefinition> Judges = new Dictionary<Identifier, JudgeDefinition>();
|
|
||||||
[PropertyList]
|
|
||||||
public Dictionary<Identifier, PdtExpression> Areas = new Dictionary<Identifier, PdtExpression>();
|
|
||||||
}
|
|
||||||
public class JudgeDefinition {
|
public class JudgeDefinition {
|
||||||
public int stack;
|
public int stack;
|
||||||
public int prop;
|
public int prop;
|
||||||
|
|||||||
Reference in New Issue
Block a user