Add judge area definition.
This commit is contained in:
@@ -15,6 +15,7 @@ namespace Cryville.Crtr {
|
|||||||
readonly ChartPlayer _sys;
|
readonly ChartPlayer _sys;
|
||||||
internal readonly PdtEvaluator _etor;
|
internal readonly PdtEvaluator _etor;
|
||||||
readonly PdtRuleset _rs;
|
readonly PdtRuleset _rs;
|
||||||
|
internal Dictionary<Identifier, PdtExpression> _areaFuncs;
|
||||||
readonly Dictionary<Identifier, List<JudgeEvent>> evs
|
readonly Dictionary<Identifier, List<JudgeEvent>> evs
|
||||||
= new Dictionary<Identifier, List<JudgeEvent>>();
|
= new Dictionary<Identifier, List<JudgeEvent>>();
|
||||||
readonly Dictionary<Identifier, List<JudgeEvent>> activeEvs
|
readonly Dictionary<Identifier, List<JudgeEvent>> activeEvs
|
||||||
@@ -41,6 +42,7 @@ namespace Cryville.Crtr {
|
|||||||
_etor = new PdtEvaluator();
|
_etor = new PdtEvaluator();
|
||||||
_etor.ContextJudge = this;
|
_etor.ContextJudge = this;
|
||||||
_rs = rs;
|
_rs = rs;
|
||||||
|
_areaFuncs = rs.judges.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);
|
||||||
@@ -67,7 +69,7 @@ namespace Cryville.Crtr {
|
|||||||
if (tev.Id.Key == _var_pause) throw new InvalidOperationException("Cannot assign the special judge \"pause\" to notes");
|
if (tev.Id.Key == _var_pause) throw new InvalidOperationException("Cannot assign the special judge \"pause\" to notes");
|
||||||
Identifier input = default(Identifier);
|
Identifier input = default(Identifier);
|
||||||
Clip clip = default(Clip);
|
Clip clip = default(Clip);
|
||||||
var def = _rs.judges[tev.Id];
|
var def = _rs.judges.Judges[tev.Id];
|
||||||
_etor.Evaluate(new PropOp.Identifier(v => input = new Identifier(v)), def.input);
|
_etor.Evaluate(new PropOp.Identifier(v => input = new Identifier(v)), def.input);
|
||||||
_etor.Evaluate(new PropOp.Clip(v => clip = v), def.clip);
|
_etor.Evaluate(new PropOp.Clip(v => clip = v), def.clip);
|
||||||
double st = sev.Time, et = st + sev.Duration;
|
double st = sev.Time, et = st + sev.Duration;
|
||||||
@@ -89,7 +91,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) {
|
foreach (var i in _rs.judges.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));
|
||||||
}
|
}
|
||||||
@@ -169,7 +171,7 @@ namespace Cryville.Crtr {
|
|||||||
bool Pass(JudgeEvent ev, float time, Identifier[] ids, int depth = 0) {
|
bool Pass(JudgeEvent ev, float time, Identifier[] ids, int depth = 0) {
|
||||||
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[i];
|
var def = _rs.judges.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) {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace Cryville.Crtr {
|
|||||||
etor.Optimize(e.Value);
|
etor.Optimize(e.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (var j in judges) {
|
foreach (var j in judges.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.scores != null) {
|
if (judge.scores != null) {
|
||||||
@@ -52,6 +52,9 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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);
|
||||||
@@ -62,6 +65,12 @@ namespace Cryville.Crtr {
|
|||||||
constraints.PrePatch(chart);
|
constraints.PrePatch(chart);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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 Constraint {
|
public class Constraint {
|
||||||
static readonly PropOp.Arbitrary _arbop = new PropOp.Arbitrary();
|
static readonly PropOp.Arbitrary _arbop = new PropOp.Arbitrary();
|
||||||
[ElementList]
|
[ElementList]
|
||||||
|
|||||||
Reference in New Issue
Block a user