Decouple the usage of PDT evaluator of chart player.
This commit is contained in:
@@ -66,7 +66,7 @@ namespace Cryville.Crtr {
|
|||||||
if (comps[i] == "") comps[i] = "0";
|
if (comps[i] == "") comps[i] = "0";
|
||||||
}
|
}
|
||||||
_itor.SetSource(string.Format("({0});", string.Join(',', comps)));
|
_itor.SetSource(string.Format("({0});", string.Join(',', comps)));
|
||||||
ChartPlayer.etor.Evaluate(_vecop, _itor.GetExp());
|
PdtEvaluator.Instance.Evaluate(_vecop, _itor.GetExp());
|
||||||
return _vecbuf;
|
return _vecbuf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -99,18 +99,18 @@ namespace Cryville.Crtr {
|
|||||||
var exp = _itor.GetExp();
|
var exp = _itor.GetExp();
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '@':
|
case '@':
|
||||||
ChartPlayer.etor.Evaluate(_vecop, exp);
|
PdtEvaluator.Instance.Evaluate(_vecop, exp);
|
||||||
node.Time = new Vec1(_vecbuf);
|
node.Time = new Vec1(_vecbuf);
|
||||||
break;
|
break;
|
||||||
case '~':
|
case '~':
|
||||||
ChartPlayer.etor.Evaluate(_vecop, exp);
|
PdtEvaluator.Instance.Evaluate(_vecop, exp);
|
||||||
node.EndTime = new Vec1(_vecbuf);
|
node.EndTime = new Vec1(_vecbuf);
|
||||||
break;
|
break;
|
||||||
case '^':
|
case '^':
|
||||||
node.Transition = exp;
|
node.Transition = exp;
|
||||||
break;
|
break;
|
||||||
case ':':
|
case ':':
|
||||||
ChartPlayer.etor.Evaluate(_vecop, exp);
|
PdtEvaluator.Instance.Evaluate(_vecop, exp);
|
||||||
node.Value = Vector.Construct(ChartPlayer.motionRegistry[name].Type, _vecbuf);
|
node.Value = Vector.Construct(ChartPlayer.motionRegistry[name].Type, _vecbuf);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -60,8 +60,6 @@ namespace Cryville.Crtr {
|
|||||||
public static float sv = 16f;
|
public static float sv = 16f;
|
||||||
|
|
||||||
public static Dictionary<Identifier, MotionRegistry> motionRegistry;
|
public static Dictionary<Identifier, MotionRegistry> motionRegistry;
|
||||||
|
|
||||||
public static PdtEvaluator etor;
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region MonoBehaviour
|
#region MonoBehaviour
|
||||||
@@ -548,7 +546,7 @@ namespace Cryville.Crtr {
|
|||||||
effectManager.Dispose();
|
effectManager.Dispose();
|
||||||
effectManager = null;
|
effectManager = null;
|
||||||
}
|
}
|
||||||
etor = null;
|
PdtEvaluator.Instance.Reset();
|
||||||
motionRegistry = null;
|
motionRegistry = null;
|
||||||
Logger.Log("main", 1, "Game", "Stopped");
|
Logger.Log("main", 1, "Game", "Stopped");
|
||||||
}
|
}
|
||||||
@@ -614,7 +612,7 @@ namespace Cryville.Crtr {
|
|||||||
};
|
};
|
||||||
|
|
||||||
using (StreamReader reader = new StreamReader(info.chartFile.FullName, Encoding.UTF8)) {
|
using (StreamReader reader = new StreamReader(info.chartFile.FullName, Encoding.UTF8)) {
|
||||||
etor = new PdtEvaluator();
|
PdtEvaluator.Instance.Reset();
|
||||||
|
|
||||||
LoadRuleset(info.rulesetFile); loadPregress = .05f;
|
LoadRuleset(info.rulesetFile); loadPregress = .05f;
|
||||||
|
|
||||||
@@ -634,7 +632,7 @@ namespace Cryville.Crtr {
|
|||||||
|
|
||||||
Logger.Log("main", 0, "Load/WorkerThread", "Initializing judge and input"); loadPregress = .35f;
|
Logger.Log("main", 0, "Load/WorkerThread", "Initializing judge and input"); loadPregress = .35f;
|
||||||
judge = new Judge(this, pruleset);
|
judge = new Judge(this, pruleset);
|
||||||
etor.ContextJudge = judge;
|
PdtEvaluator.Instance.ContextJudge = judge;
|
||||||
|
|
||||||
inputProxy = new InputProxy(pruleset, judge, screenSize);
|
inputProxy = new InputProxy(pruleset, judge, screenSize);
|
||||||
inputProxy.LoadFrom(_rscfg.inputs);
|
inputProxy.LoadFrom(_rscfg.inputs);
|
||||||
@@ -686,7 +684,7 @@ namespace Cryville.Crtr {
|
|||||||
if (ruleset.format != Ruleset.CURRENT_FORMAT) throw new FormatException("Invalid ruleset file version");
|
if (ruleset.format != Ruleset.CURRENT_FORMAT) throw new FormatException("Invalid ruleset file version");
|
||||||
ruleset.LoadPdt(dir);
|
ruleset.LoadPdt(dir);
|
||||||
pruleset = ruleset.Root;
|
pruleset = ruleset.Root;
|
||||||
pruleset.Optimize(etor);
|
pruleset.Optimize(PdtEvaluator.Instance);
|
||||||
}
|
}
|
||||||
RMVPool.Shared = new RMVPool();
|
RMVPool.Shared = new RMVPool();
|
||||||
MotionCachePool.Shared = new MotionCachePool();
|
MotionCachePool.Shared = new MotionCachePool();
|
||||||
@@ -698,7 +696,7 @@ namespace Cryville.Crtr {
|
|||||||
Logger.Log("main", 0, "Load/WorkerThread", "Loading skin: {0}", file);
|
Logger.Log("main", 0, "Load/WorkerThread", "Loading skin: {0}", file);
|
||||||
skin.LoadPdt(dir);
|
skin.LoadPdt(dir);
|
||||||
pskin = skin.Root;
|
pskin = skin.Root;
|
||||||
pskin.Optimize(etor);
|
pskin.Optimize(PdtEvaluator.Instance);
|
||||||
effectManager = new EffectManager(pskin);
|
effectManager = new EffectManager(pskin);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@@ -26,7 +26,7 @@ namespace Cryville.Crtr.Config {
|
|||||||
|
|
||||||
void OnEnable() {
|
void OnEnable() {
|
||||||
try {
|
try {
|
||||||
ChartPlayer.etor = new PdtEvaluator();
|
PdtEvaluator.Instance.Reset();
|
||||||
FileInfo file = new FileInfo(
|
FileInfo file = new FileInfo(
|
||||||
Game.GameDataPath + "/rulesets/" + Settings.Default.LoadRuleset
|
Game.GameDataPath + "/rulesets/" + Settings.Default.LoadRuleset
|
||||||
);
|
);
|
||||||
|
@@ -17,9 +17,9 @@ namespace Cryville.Crtr {
|
|||||||
_skinContainer = new SkinContainer(this, _def.elements);
|
_skinContainer = new SkinContainer(this, _def.elements);
|
||||||
RootTransform = new GameObject("effect:" + GetHashCode().ToString(CultureInfo.InvariantCulture)).transform;
|
RootTransform = new GameObject("effect:" + GetHashCode().ToString(CultureInfo.InvariantCulture)).transform;
|
||||||
SkinContext = new SkinContext(RootTransform);
|
SkinContext = new SkinContext(RootTransform);
|
||||||
ChartPlayer.etor.ContextCascadeInsertBlock();
|
PdtEvaluator.Instance.ContextCascadeInsertBlock();
|
||||||
_skinContainer.MatchStatic();
|
_skinContainer.MatchStatic();
|
||||||
ChartPlayer.etor.ContextCascadeDiscardBlock();
|
PdtEvaluator.Instance.ContextCascadeDiscardBlock();
|
||||||
_comps = RootTransform.GetComponentsInChildren<SkinComponent>();
|
_comps = RootTransform.GetComponentsInChildren<SkinComponent>();
|
||||||
foreach (var i in _comps) i.Init();
|
foreach (var i in _comps) i.Init();
|
||||||
_indexSrc = new PropSrc.Float(() => Index);
|
_indexSrc = new PropSrc.Float(() => Index);
|
||||||
@@ -57,8 +57,8 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
public void OnEmit(double time, Transform target) {
|
public void OnEmit(double time, Transform target) {
|
||||||
_currentTarget = target;
|
_currentTarget = target;
|
||||||
_ctxev = ChartPlayer.etor.ContextEvent;
|
_ctxev = PdtEvaluator.Instance.ContextEvent;
|
||||||
_ctxstate = ChartPlayer.etor.ContextState;
|
_ctxstate = PdtEvaluator.Instance.ContextState;
|
||||||
_skinContainer.MatchDynamic(0, true);
|
_skinContainer.MatchDynamic(0, true);
|
||||||
if (_currentStateName.Key == 0) {
|
if (_currentStateName.Key == 0) {
|
||||||
EnterState(_def.init, time, _currentTarget, true);
|
EnterState(_def.init, time, _currentTarget, true);
|
||||||
@@ -73,11 +73,11 @@ namespace Cryville.Crtr {
|
|||||||
_currentState = _def.states[name];
|
_currentState = _def.states[name];
|
||||||
Rewind(time, target);
|
Rewind(time, target);
|
||||||
RootTransform.gameObject.SetActive(true);
|
RootTransform.gameObject.SetActive(true);
|
||||||
ChartPlayer.etor.ContextCascadeInsert();
|
PdtEvaluator.Instance.ContextCascadeInsert();
|
||||||
ChartPlayer.etor.ContextCascadeUpdate(_VAR_EFFECT_INDEX, _indexSrc);
|
PdtEvaluator.Instance.ContextCascadeUpdate(_VAR_EFFECT_INDEX, _indexSrc);
|
||||||
ChartPlayer.etor.Evaluate(_durationOp, _currentState.duration);
|
PdtEvaluator.Instance.Evaluate(_durationOp, _currentState.duration);
|
||||||
_skinContainer.MatchDynamic(1, emitting);
|
_skinContainer.MatchDynamic(1, emitting);
|
||||||
ChartPlayer.etor.ContextCascadeDiscard();
|
PdtEvaluator.Instance.ContextCascadeDiscard();
|
||||||
}
|
}
|
||||||
public bool OnStateDone() {
|
public bool OnStateDone() {
|
||||||
if (_currentState.next.Key == 0) {
|
if (_currentState.next.Key == 0) {
|
||||||
@@ -87,11 +87,11 @@ namespace Cryville.Crtr {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ChartPlayer.etor.ContextEvent = _ctxev;
|
PdtEvaluator.Instance.ContextEvent = _ctxev;
|
||||||
ChartPlayer.etor.ContextState = _ctxstate;
|
PdtEvaluator.Instance.ContextState = _ctxstate;
|
||||||
EnterState(_currentState.next, EndTime, _currentTarget, false);
|
EnterState(_currentState.next, EndTime, _currentTarget, false);
|
||||||
ChartPlayer.etor.ContextEvent = null;
|
PdtEvaluator.Instance.ContextEvent = null;
|
||||||
ChartPlayer.etor.ContextState = null;
|
PdtEvaluator.Instance.ContextState = null;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -127,12 +127,12 @@ namespace Cryville.Crtr.Event {
|
|||||||
a_tail = RegisterAnchor(_a_tail, true);
|
a_tail = RegisterAnchor(_a_tail, true);
|
||||||
}
|
}
|
||||||
public virtual void Init() {
|
public virtual void Init() {
|
||||||
ChartPlayer.etor.ContextState = ps;
|
PdtEvaluator.Instance.ContextState = ps;
|
||||||
ChartPlayer.etor.ContextEvent = Container;
|
PdtEvaluator.Instance.ContextEvent = Container;
|
||||||
skinContainer.MatchStatic();
|
skinContainer.MatchStatic();
|
||||||
MatchDynamic(ps, 0);
|
MatchDynamic(ps, 0);
|
||||||
ChartPlayer.etor.ContextEvent = null;
|
PdtEvaluator.Instance.ContextEvent = null;
|
||||||
ChartPlayer.etor.ContextState = null;
|
PdtEvaluator.Instance.ContextState = null;
|
||||||
foreach (Transform child in RootTransform) {
|
foreach (Transform child in RootTransform) {
|
||||||
if (child.CompareTag(TagRootTransform)) continue;
|
if (child.CompareTag(TagRootTransform)) continue;
|
||||||
_comps.AddRange(child.GetComponentsInChildren<SkinComponent>());
|
_comps.AddRange(child.GetComponentsInChildren<SkinComponent>());
|
||||||
@@ -199,11 +199,11 @@ namespace Cryville.Crtr.Event {
|
|||||||
protected static bool CanDoGraphicalUpdate(ContainerState s) { return s.CloneType >= 2 && s.CloneType < 16; }
|
protected static bool CanDoGraphicalUpdate(ContainerState s) { return s.CloneType >= 2 && s.CloneType < 16; }
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
void MatchDynamic(ContainerState s, int dl) {
|
void MatchDynamic(ContainerState s, int dl) {
|
||||||
ChartPlayer.etor.ContextState = s;
|
PdtEvaluator.Instance.ContextState = s;
|
||||||
ChartPlayer.etor.ContextEvent = Container;
|
PdtEvaluator.Instance.ContextEvent = Container;
|
||||||
skinContainer.MatchDynamic(dl);
|
skinContainer.MatchDynamic(dl);
|
||||||
ChartPlayer.etor.ContextEvent = null;
|
PdtEvaluator.Instance.ContextEvent = null;
|
||||||
ChartPlayer.etor.ContextState = null;
|
PdtEvaluator.Instance.ContextState = null;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region Anchor
|
#region Anchor
|
||||||
|
@@ -462,9 +462,9 @@ namespace Cryville.Crtr.Event {
|
|||||||
if (transition == null) return new Vector4(time, time, time, time);
|
if (transition == null) return new Vector4(time, time, time, time);
|
||||||
_ttime = time;
|
_ttime = time;
|
||||||
_ttimesrc.Invalidate();
|
_ttimesrc.Invalidate();
|
||||||
ChartPlayer.etor.ContextSelfValue = _ttimesrc;
|
PdtEvaluator.Instance.ContextSelfValue = _ttimesrc;
|
||||||
ChartPlayer.etor.Evaluate(_transop, transition);
|
PdtEvaluator.Instance.Evaluate(_transop, transition);
|
||||||
ChartPlayer.etor.ContextSelfValue = null;
|
PdtEvaluator.Instance.ContextSelfValue = null;
|
||||||
return _trans;
|
return _trans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -23,7 +23,7 @@ namespace Cryville.Crtr {
|
|||||||
_vecsrcs[i] = vecsrc;
|
_vecsrcs[i] = vecsrc;
|
||||||
_vecops[i] = new InputVectorOp(vecsrc);
|
_vecops[i] = new InputVectorOp(vecsrc);
|
||||||
}
|
}
|
||||||
_etor = judge != null ? judge._etor : ChartPlayer.etor;
|
_etor = judge != null ? judge._etor : PdtEvaluator.Instance;
|
||||||
_ruleset = ruleset;
|
_ruleset = ruleset;
|
||||||
_judge = judge;
|
_judge = judge;
|
||||||
_screenSize = new InputVector(screenSize.x, screenSize.y);
|
_screenSize = new InputVector(screenSize.x, screenSize.y);
|
||||||
|
@@ -11,42 +11,42 @@ namespace Cryville.Crtr {
|
|||||||
var exp = (PdtExpression)value;
|
var exp = (PdtExpression)value;
|
||||||
if (type.Equals(typeof(bool))) {
|
if (type.Equals(typeof(bool))) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
ChartPlayer.etor.Evaluate(new PropOp.Boolean(r => result = r), exp);
|
PdtEvaluator.Instance.Evaluate(new PropOp.Boolean(r => result = r), exp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else if (type.Equals(typeof(int))) {
|
else if (type.Equals(typeof(int))) {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
ChartPlayer.etor.Evaluate(new PropOp.Integer(r => result = r), exp);
|
PdtEvaluator.Instance.Evaluate(new PropOp.Integer(r => result = r), exp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else if (type.Equals(typeof(float))) {
|
else if (type.Equals(typeof(float))) {
|
||||||
float result = 0;
|
float result = 0;
|
||||||
ChartPlayer.etor.Evaluate(new PropOp.Float(r => result = r), exp);
|
PdtEvaluator.Instance.Evaluate(new PropOp.Float(r => result = r), exp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else if (type.Equals(typeof(string))) {
|
else if (type.Equals(typeof(string))) {
|
||||||
string result = default(string);
|
string result = default(string);
|
||||||
ChartPlayer.etor.Evaluate(new PropOp.String(r => result = r), exp);
|
PdtEvaluator.Instance.Evaluate(new PropOp.String(r => result = r), exp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else if (type.IsEnum) {
|
else if (type.IsEnum) {
|
||||||
object result = null;
|
object result = null;
|
||||||
ChartPlayer.etor.Evaluate(new PropOp.Enum(type, r => result = r), exp);
|
PdtEvaluator.Instance.Evaluate(new PropOp.Enum(type, r => result = r), exp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else if (type.Equals(typeof(Clip))) {
|
else if (type.Equals(typeof(Clip))) {
|
||||||
Clip result = default(Clip);
|
Clip result = default(Clip);
|
||||||
ChartPlayer.etor.Evaluate(new PropOp.Clip(r => result = r), exp);
|
PdtEvaluator.Instance.Evaluate(new PropOp.Clip(r => result = r), exp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else if (type.Equals(typeof(Identifier))) {
|
else if (type.Equals(typeof(Identifier))) {
|
||||||
Identifier result = default(Identifier);
|
Identifier result = default(Identifier);
|
||||||
ChartPlayer.etor.Evaluate(new pop_identstr(r => result = r), exp);
|
PdtEvaluator.Instance.Evaluate(new pop_identstr(r => result = r), exp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else if (type.Equals(typeof(Identifier[]))) {
|
else if (type.Equals(typeof(Identifier[]))) {
|
||||||
Identifier[] result = null;
|
Identifier[] result = null;
|
||||||
ChartPlayer.etor.Evaluate(new pop_identstrarr(r => result = r), exp);
|
PdtEvaluator.Instance.Evaluate(new pop_identstrarr(r => result = r), exp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,6 +10,15 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace Cryville.Crtr {
|
namespace Cryville.Crtr {
|
||||||
public class PdtEvaluator : PdtEvaluatorBase {
|
public class PdtEvaluator : PdtEvaluatorBase {
|
||||||
|
[ThreadStatic]
|
||||||
|
static PdtEvaluator m_instance;
|
||||||
|
public static PdtEvaluator Instance {
|
||||||
|
get {
|
||||||
|
if (m_instance == null) m_instance = new PdtEvaluator();
|
||||||
|
return m_instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
readonly Dictionary<PdtOperatorSignature, PdtOperator> _shortops = new Dictionary<PdtOperatorSignature, PdtOperator>();
|
readonly Dictionary<PdtOperatorSignature, PdtOperator> _shortops = new Dictionary<PdtOperatorSignature, PdtOperator>();
|
||||||
readonly IntKeyedDictionary<PdtOperator> _ctxops = new IntKeyedDictionary<PdtOperator>();
|
readonly IntKeyedDictionary<PdtOperator> _ctxops = new IntKeyedDictionary<PdtOperator>();
|
||||||
|
|
||||||
@@ -152,6 +161,18 @@ namespace Cryville.Crtr {
|
|||||||
ContextCascade[--_cascadeHeight].Clear();
|
ContextCascade[--_cascadeHeight].Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Reset() {
|
||||||
|
_cascadeHeight = 0;
|
||||||
|
ContextCascadeBlocks.Clear();
|
||||||
|
ContextCascadeBlocks.Push(0);
|
||||||
|
ContextEvent = null;
|
||||||
|
ContextJudge = null;
|
||||||
|
ContextSelfValue = null;
|
||||||
|
ContextSkinContainer = null;
|
||||||
|
ContextState = null;
|
||||||
|
ContextTransform = null;
|
||||||
|
}
|
||||||
|
|
||||||
public PdtEvaluator() {
|
public PdtEvaluator() {
|
||||||
ContextCascadeBlocks.Push(0);
|
ContextCascadeBlocks.Push(0);
|
||||||
for (int i = 0; i < ContextCascade.Length; i++) ContextCascade[i] = new IntKeyedDictionary<PropSrc>();
|
for (int i = 0; i < ContextCascade.Length; i++) ContextCascade[i] = new IntKeyedDictionary<PropSrc>();
|
||||||
|
@@ -21,7 +21,7 @@ namespace Cryville.Crtr {
|
|||||||
var op = GetOperand(0);
|
var op = GetOperand(0);
|
||||||
var value = new byte[op.Length];
|
var value = new byte[op.Length];
|
||||||
op.CopyTo(value, 0);
|
op.CopyTo(value, 0);
|
||||||
ChartPlayer.etor.ContextCascadeUpdate(Name, new PropSrc.Arbitrary(op.Type, value));
|
PdtEvaluator.Instance.ContextCascadeUpdate(Name, new PropSrc.Arbitrary(op.Type, value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class Boolean : PropOp {
|
public class Boolean : PropOp {
|
||||||
|
@@ -157,7 +157,7 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void PrePatch(ChartEvent ev) {
|
public void PrePatch(ChartEvent ev) {
|
||||||
var etor = ChartPlayer.etor;
|
var etor = PdtEvaluator.Instance;
|
||||||
PropSrc src;
|
PropSrc src;
|
||||||
etor.ContextCascadeInsert();
|
etor.ContextCascadeInsert();
|
||||||
etor.ContextEvent = ev;
|
etor.ContextEvent = ev;
|
||||||
|
@@ -90,10 +90,10 @@ namespace Cryville.Crtr {
|
|||||||
etor.Optimize(_exp);
|
etor.Optimize(_exp);
|
||||||
}
|
}
|
||||||
public override IEnumerable<ChartEvent> Match(ChartEvent ev) {
|
public override IEnumerable<ChartEvent> Match(ChartEvent ev) {
|
||||||
ChartPlayer.etor.ContextEvent = ev;
|
PdtEvaluator.Instance.ContextEvent = ev;
|
||||||
if (!ChartPlayer.etor.Evaluate(_op, _exp))
|
if (!PdtEvaluator.Instance.Evaluate(_op, _exp))
|
||||||
throw new EvaluationFailureException();
|
throw new EvaluationFailureException();
|
||||||
ChartPlayer.etor.ContextEvent = null;
|
PdtEvaluator.Instance.ContextEvent = null;
|
||||||
if (_flag) return new ChartEvent[] { ev };
|
if (_flag) return new ChartEvent[] { ev };
|
||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
|
@@ -43,8 +43,8 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
void MatchStatic(SkinElement rel, DynamicStack stack, RuntimeSkinContext ctx) {
|
void MatchStatic(SkinElement rel, DynamicStack stack, RuntimeSkinContext ctx) {
|
||||||
var rc = ctx.ReadContext;
|
var rc = ctx.ReadContext;
|
||||||
ChartPlayer.etor.ContextTransform = rc.Transform;
|
PdtEvaluator.Instance.ContextTransform = rc.Transform;
|
||||||
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs);
|
if (rc.PropSrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(rc.PropSrcs);
|
||||||
foreach (var p in rel.properties) {
|
foreach (var p in rel.properties) {
|
||||||
try {
|
try {
|
||||||
p.Key.ExecuteStatic(_group, ctx, p.Value, Variables);
|
p.Key.ExecuteStatic(_group, ctx, p.Value, Variables);
|
||||||
@@ -54,7 +54,7 @@ namespace Cryville.Crtr {
|
|||||||
new DynamicProperty { Context = ctx, Key = p.Key, Value = p.Value }
|
new DynamicProperty { Context = ctx, Key = p.Key, Value = p.Value }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
ChartPlayer.etor.ContextTransform = null;
|
PdtEvaluator.Instance.ContextTransform = null;
|
||||||
foreach (var e in rel.elements) {
|
foreach (var e in rel.elements) {
|
||||||
try {
|
try {
|
||||||
var nctxs = e.Key.MatchStatic(_group, rc);
|
var nctxs = e.Key.MatchStatic(_group, rc);
|
||||||
@@ -73,7 +73,7 @@ namespace Cryville.Crtr {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
if (rc.PropSrcs != null) PdtEvaluator.Instance.ContextCascadeDiscard();
|
||||||
}
|
}
|
||||||
public void MatchDynamic(int dl, bool recursive = false) {
|
public void MatchDynamic(int dl, bool recursive = false) {
|
||||||
var stack = _stacks[dl];
|
var stack = _stacks[dl];
|
||||||
@@ -81,7 +81,7 @@ namespace Cryville.Crtr {
|
|||||||
var nstack = dl + 1 < _stacks.Length ? _stacks[dl + 1] : null;
|
var nstack = dl + 1 < _stacks.Length ? _stacks[dl + 1] : null;
|
||||||
if (nstack != null) nstack.Clear();
|
if (nstack != null) nstack.Clear();
|
||||||
Profiler.BeginSample("SkinContainer.MatchDynamic");
|
Profiler.BeginSample("SkinContainer.MatchDynamic");
|
||||||
if (!recursive) ChartPlayer.etor.ContextSkinContainer = this;
|
if (!recursive) PdtEvaluator.Instance.ContextSkinContainer = this;
|
||||||
for (int i = 0; i < stack.Properties.Count; i++) {
|
for (int i = 0; i < stack.Properties.Count; i++) {
|
||||||
DynamicProperty p = stack.Properties[i];
|
DynamicProperty p = stack.Properties[i];
|
||||||
p.Key.ExecuteDynamic(_group, p.Context, p.Value, Variables, dl);
|
p.Key.ExecuteDynamic(_group, p.Context, p.Value, Variables, dl);
|
||||||
@@ -93,7 +93,7 @@ namespace Cryville.Crtr {
|
|||||||
for (int i = 0; i < stack.Elements.Count; i++) {
|
for (int i = 0; i < stack.Elements.Count; i++) {
|
||||||
DynamicElement e = stack.Elements[i];
|
DynamicElement e = stack.Elements[i];
|
||||||
var psrcs = e.Context.ReadContext.PropSrcs;
|
var psrcs = e.Context.ReadContext.PropSrcs;
|
||||||
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
|
if (psrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(psrcs);
|
||||||
if (e.Selectors.IsUpdatable(_group, dl)) {
|
if (e.Selectors.IsUpdatable(_group, dl)) {
|
||||||
try {
|
try {
|
||||||
var nctx = e.Selectors.MatchDynamic(_group, e.Context.ReadContext);
|
var nctx = e.Selectors.MatchDynamic(_group, e.Context.ReadContext);
|
||||||
@@ -115,15 +115,15 @@ namespace Cryville.Crtr {
|
|||||||
if (nstack == null) throw new SelectorNotAvailableException();
|
if (nstack == null) throw new SelectorNotAvailableException();
|
||||||
nstack.Elements.Add(e);
|
nstack.Elements.Add(e);
|
||||||
}
|
}
|
||||||
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
if (psrcs != null) PdtEvaluator.Instance.ContextCascadeDiscard();
|
||||||
}
|
}
|
||||||
if (!recursive) ChartPlayer.etor.ContextSkinContainer = null;
|
if (!recursive) PdtEvaluator.Instance.ContextSkinContainer = null;
|
||||||
Profiler.EndSample();
|
Profiler.EndSample();
|
||||||
}
|
}
|
||||||
void MatchDynamic(SkinElement rel, int dl, DynamicStack stack, RuntimeSkinContext ctx) {
|
void MatchDynamic(SkinElement rel, int dl, DynamicStack stack, RuntimeSkinContext ctx) {
|
||||||
var rc = ctx.ReadContext;
|
var rc = ctx.ReadContext;
|
||||||
ChartPlayer.etor.ContextTransform = rc.Transform;
|
PdtEvaluator.Instance.ContextTransform = rc.Transform;
|
||||||
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs);
|
if (rc.PropSrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(rc.PropSrcs);
|
||||||
foreach (var p in rel.properties) {
|
foreach (var p in rel.properties) {
|
||||||
if (p.Key.annotations.Contains("once")) {
|
if (p.Key.annotations.Contains("once")) {
|
||||||
if (_once.Contains(p.Key)) continue;
|
if (_once.Contains(p.Key)) continue;
|
||||||
@@ -134,7 +134,7 @@ namespace Cryville.Crtr {
|
|||||||
p.Key.ExecuteDynamic(_group, ctx, p.Value, Variables, dl);
|
p.Key.ExecuteDynamic(_group, ctx, p.Value, Variables, dl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ChartPlayer.etor.ContextTransform = null;
|
PdtEvaluator.Instance.ContextTransform = null;
|
||||||
foreach (var e in rel.elements) {
|
foreach (var e in rel.elements) {
|
||||||
if (e.Key.IsUpdatable(_group, dl)) {
|
if (e.Key.IsUpdatable(_group, dl)) {
|
||||||
SkinContext nctx = e.Key.MatchDynamic(_group, rc);
|
SkinContext nctx = e.Key.MatchDynamic(_group, rc);
|
||||||
@@ -149,16 +149,16 @@ namespace Cryville.Crtr {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
if (rc.PropSrcs != null) PdtEvaluator.Instance.ContextCascadeDiscard();
|
||||||
}
|
}
|
||||||
float _rtime;
|
float _rtime;
|
||||||
readonly PropSrc _rtimeSrc;
|
readonly PropSrc _rtimeSrc;
|
||||||
public void MatchAnimation(AnimationSpan span, float rtime, RuntimeSkinContext ctx) {
|
public void MatchAnimation(AnimationSpan span, float rtime, RuntimeSkinContext ctx) {
|
||||||
ChartPlayer.etor.ContextSkinContainer = this;
|
PdtEvaluator.Instance.ContextSkinContainer = this;
|
||||||
ChartPlayer.etor.ContextSelfValue = _rtimeSrc;
|
PdtEvaluator.Instance.ContextSelfValue = _rtimeSrc;
|
||||||
MatchAnimationInternal(span, rtime, ctx);
|
MatchAnimationInternal(span, rtime, ctx);
|
||||||
ChartPlayer.etor.ContextSelfValue = null;
|
PdtEvaluator.Instance.ContextSelfValue = null;
|
||||||
ChartPlayer.etor.ContextSkinContainer = null;
|
PdtEvaluator.Instance.ContextSkinContainer = null;
|
||||||
}
|
}
|
||||||
void MatchAnimationInternal(AnimationSpan span, float rtime, RuntimeSkinContext ctx) {
|
void MatchAnimationInternal(AnimationSpan span, float rtime, RuntimeSkinContext ctx) {
|
||||||
_rtime = rtime;
|
_rtime = rtime;
|
||||||
|
@@ -90,10 +90,10 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
void Execute(RuntimeSkinContext ctx, PdtOperator op, PdtExpression exp) {
|
void Execute(RuntimeSkinContext ctx, PdtOperator op, PdtExpression exp) {
|
||||||
var psrcs = ctx.ReadContext.PropSrcs;
|
var psrcs = ctx.ReadContext.PropSrcs;
|
||||||
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
|
if (psrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(psrcs);
|
||||||
if (!ChartPlayer.etor.Evaluate(op, exp))
|
if (!PdtEvaluator.Instance.Evaluate(op, exp))
|
||||||
throw new EvaluationFailureException();
|
throw new EvaluationFailureException();
|
||||||
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
if (psrcs != null) PdtEvaluator.Instance.ContextCascadeDiscard();
|
||||||
}
|
}
|
||||||
SkinProperty GetPropOp(Transform obj) {
|
SkinProperty GetPropOp(Transform obj) {
|
||||||
var ctype = Component;
|
var ctype = Component;
|
||||||
@@ -145,10 +145,10 @@ namespace Cryville.Crtr {
|
|||||||
public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary<SkinVariable> vars, int dl) {
|
public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary<SkinVariable> vars, int dl) {
|
||||||
if (dl != 1) return;
|
if (dl != 1) return;
|
||||||
var psrcs = ctx.ReadContext.PropSrcs;
|
var psrcs = ctx.ReadContext.PropSrcs;
|
||||||
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
|
if (psrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(psrcs);
|
||||||
if (!ChartPlayer.etor.Evaluate(_timeOp, exp))
|
if (!PdtEvaluator.Instance.Evaluate(_timeOp, exp))
|
||||||
throw new EvaluationFailureException();
|
throw new EvaluationFailureException();
|
||||||
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
if (psrcs != null) PdtEvaluator.Instance.ContextCascadeDiscard();
|
||||||
group.PushAnchorEvent(_time, Name);
|
group.PushAnchorEvent(_time, Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -170,7 +170,7 @@ namespace Cryville.Crtr {
|
|||||||
float _index;
|
float _index;
|
||||||
readonly PropOp _op;
|
readonly PropOp _op;
|
||||||
public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary<SkinVariable> vars, int dl) {
|
public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary<SkinVariable> vars, int dl) {
|
||||||
if (!ChartPlayer.etor.Evaluate(_op, exp))
|
if (!PdtEvaluator.Instance.Evaluate(_op, exp))
|
||||||
throw new EvaluationFailureException();
|
throw new EvaluationFailureException();
|
||||||
if (IsSelf) ChartPlayer.effectManager.EmitSelf(Name, _index, ctx.WriteTransform);
|
if (IsSelf) ChartPlayer.effectManager.EmitSelf(Name, _index, ctx.WriteTransform);
|
||||||
else ChartPlayer.effectManager.Emit(Name, _index);
|
else ChartPlayer.effectManager.Emit(Name, _index);
|
||||||
@@ -189,14 +189,14 @@ namespace Cryville.Crtr {
|
|||||||
SkinVariable v;
|
SkinVariable v;
|
||||||
if (!vars.TryGetValue(Name, out v))
|
if (!vars.TryGetValue(Name, out v))
|
||||||
vars.Add(Name, v = new SkinVariable());
|
vars.Add(Name, v = new SkinVariable());
|
||||||
if (!ChartPlayer.etor.Evaluate(v.Op, exp))
|
if (!PdtEvaluator.Instance.Evaluate(v.Op, exp))
|
||||||
throw new EvaluationFailureException();
|
throw new EvaluationFailureException();
|
||||||
}
|
}
|
||||||
public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary<SkinVariable> vars, int dl) {
|
public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary<SkinVariable> vars, int dl) {
|
||||||
SkinVariable v;
|
SkinVariable v;
|
||||||
if (!vars.TryGetValue(Name, out v))
|
if (!vars.TryGetValue(Name, out v))
|
||||||
throw new InvalidOperationException(string.Format("Variable \"{0}\" not defined", IdentifierManager.Shared.Retrieve(Name)));
|
throw new InvalidOperationException(string.Format("Variable \"{0}\" not defined", IdentifierManager.Shared.Retrieve(Name)));
|
||||||
if (!ChartPlayer.etor.Evaluate(v.Op, exp))
|
if (!PdtEvaluator.Instance.Evaluate(v.Op, exp))
|
||||||
throw new EvaluationFailureException();
|
throw new EvaluationFailureException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -129,9 +129,9 @@ namespace Cryville.Crtr {
|
|||||||
return Match(c);
|
return Match(c);
|
||||||
}
|
}
|
||||||
public SkinContext Match(SkinContext a) {
|
public SkinContext Match(SkinContext a) {
|
||||||
ChartPlayer.etor.ContextTransform = a.Transform;
|
PdtEvaluator.Instance.ContextTransform = a.Transform;
|
||||||
try {
|
try {
|
||||||
if (!ChartPlayer.etor.Evaluate(_op, _exp))
|
if (!PdtEvaluator.Instance.Evaluate(_op, _exp))
|
||||||
throw new EvaluationFailureException();
|
throw new EvaluationFailureException();
|
||||||
return _flag ? a : null;
|
return _flag ? a : null;
|
||||||
}
|
}
|
||||||
@@ -139,7 +139,7 @@ namespace Cryville.Crtr {
|
|||||||
throw new SelectorNotAvailableException("The expression is not evaluatable under the current context", ex);
|
throw new SelectorNotAvailableException("The expression is not evaluatable under the current context", ex);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
ChartPlayer.etor.ContextTransform = null;
|
PdtEvaluator.Instance.ContextTransform = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user