From 3db8f61e3b686f68f677c08a1712112c60f7b82c Mon Sep 17 00:00:00 2001 From: PopSlime Date: Fri, 28 Jul 2023 14:13:49 +0800 Subject: [PATCH] Decouple the usage of PDT evaluator of chart player. --- .../Crtr/ChartCompatibilityHandler.cs | 8 ++--- Assets/Cryville/Crtr/ChartPlayer.cs | 12 +++---- .../Cryville/Crtr/Config/ConfigPanelMaster.cs | 2 +- Assets/Cryville/Crtr/EffectInstance.cs | 24 +++++++------- .../Cryville/Crtr/Event/ContainerHandler.cs | 16 +++++----- Assets/Cryville/Crtr/Event/ContainerState.cs | 6 ++-- Assets/Cryville/Crtr/InputProxy.cs | 2 +- Assets/Cryville/Crtr/PdtBinder.cs | 16 +++++----- Assets/Cryville/Crtr/PdtEvaluator.cs | 21 ++++++++++++ Assets/Cryville/Crtr/PropOp.cs | 2 +- Assets/Cryville/Crtr/Ruleset.cs | 2 +- Assets/Cryville/Crtr/RulesetSelectors.cs | 6 ++-- Assets/Cryville/Crtr/SkinContainer.cs | 32 +++++++++---------- Assets/Cryville/Crtr/SkinPropertyKey.cs | 18 +++++------ Assets/Cryville/Crtr/SkinSelectors.cs | 6 ++-- 15 files changed, 96 insertions(+), 77 deletions(-) diff --git a/Assets/Cryville/Crtr/ChartCompatibilityHandler.cs b/Assets/Cryville/Crtr/ChartCompatibilityHandler.cs index e7c042c..c8ff8cb 100644 --- a/Assets/Cryville/Crtr/ChartCompatibilityHandler.cs +++ b/Assets/Cryville/Crtr/ChartCompatibilityHandler.cs @@ -66,7 +66,7 @@ namespace Cryville.Crtr { if (comps[i] == "") comps[i] = "0"; } _itor.SetSource(string.Format("({0});", string.Join(',', comps))); - ChartPlayer.etor.Evaluate(_vecop, _itor.GetExp()); + PdtEvaluator.Instance.Evaluate(_vecop, _itor.GetExp()); return _vecbuf; } } @@ -99,18 +99,18 @@ namespace Cryville.Crtr { var exp = _itor.GetExp(); switch (c) { case '@': - ChartPlayer.etor.Evaluate(_vecop, exp); + PdtEvaluator.Instance.Evaluate(_vecop, exp); node.Time = new Vec1(_vecbuf); break; case '~': - ChartPlayer.etor.Evaluate(_vecop, exp); + PdtEvaluator.Instance.Evaluate(_vecop, exp); node.EndTime = new Vec1(_vecbuf); break; case '^': node.Transition = exp; break; case ':': - ChartPlayer.etor.Evaluate(_vecop, exp); + PdtEvaluator.Instance.Evaluate(_vecop, exp); node.Value = Vector.Construct(ChartPlayer.motionRegistry[name].Type, _vecbuf); break; default: diff --git a/Assets/Cryville/Crtr/ChartPlayer.cs b/Assets/Cryville/Crtr/ChartPlayer.cs index db66343..7dbc54f 100644 --- a/Assets/Cryville/Crtr/ChartPlayer.cs +++ b/Assets/Cryville/Crtr/ChartPlayer.cs @@ -60,8 +60,6 @@ namespace Cryville.Crtr { public static float sv = 16f; public static Dictionary motionRegistry; - - public static PdtEvaluator etor; #endregion #region MonoBehaviour @@ -548,7 +546,7 @@ namespace Cryville.Crtr { effectManager.Dispose(); effectManager = null; } - etor = null; + PdtEvaluator.Instance.Reset(); motionRegistry = null; Logger.Log("main", 1, "Game", "Stopped"); } @@ -614,7 +612,7 @@ namespace Cryville.Crtr { }; using (StreamReader reader = new StreamReader(info.chartFile.FullName, Encoding.UTF8)) { - etor = new PdtEvaluator(); + PdtEvaluator.Instance.Reset(); LoadRuleset(info.rulesetFile); loadPregress = .05f; @@ -634,7 +632,7 @@ namespace Cryville.Crtr { Logger.Log("main", 0, "Load/WorkerThread", "Initializing judge and input"); loadPregress = .35f; judge = new Judge(this, pruleset); - etor.ContextJudge = judge; + PdtEvaluator.Instance.ContextJudge = judge; inputProxy = new InputProxy(pruleset, judge, screenSize); inputProxy.LoadFrom(_rscfg.inputs); @@ -686,7 +684,7 @@ namespace Cryville.Crtr { if (ruleset.format != Ruleset.CURRENT_FORMAT) throw new FormatException("Invalid ruleset file version"); ruleset.LoadPdt(dir); pruleset = ruleset.Root; - pruleset.Optimize(etor); + pruleset.Optimize(PdtEvaluator.Instance); } RMVPool.Shared = new RMVPool(); MotionCachePool.Shared = new MotionCachePool(); @@ -698,7 +696,7 @@ namespace Cryville.Crtr { Logger.Log("main", 0, "Load/WorkerThread", "Loading skin: {0}", file); skin.LoadPdt(dir); pskin = skin.Root; - pskin.Optimize(etor); + pskin.Optimize(PdtEvaluator.Instance); effectManager = new EffectManager(pskin); } #endregion diff --git a/Assets/Cryville/Crtr/Config/ConfigPanelMaster.cs b/Assets/Cryville/Crtr/Config/ConfigPanelMaster.cs index d09777c..ecce22f 100644 --- a/Assets/Cryville/Crtr/Config/ConfigPanelMaster.cs +++ b/Assets/Cryville/Crtr/Config/ConfigPanelMaster.cs @@ -26,7 +26,7 @@ namespace Cryville.Crtr.Config { void OnEnable() { try { - ChartPlayer.etor = new PdtEvaluator(); + PdtEvaluator.Instance.Reset(); FileInfo file = new FileInfo( Game.GameDataPath + "/rulesets/" + Settings.Default.LoadRuleset ); diff --git a/Assets/Cryville/Crtr/EffectInstance.cs b/Assets/Cryville/Crtr/EffectInstance.cs index 8a49aac..c215db8 100644 --- a/Assets/Cryville/Crtr/EffectInstance.cs +++ b/Assets/Cryville/Crtr/EffectInstance.cs @@ -17,9 +17,9 @@ namespace Cryville.Crtr { _skinContainer = new SkinContainer(this, _def.elements); RootTransform = new GameObject("effect:" + GetHashCode().ToString(CultureInfo.InvariantCulture)).transform; SkinContext = new SkinContext(RootTransform); - ChartPlayer.etor.ContextCascadeInsertBlock(); + PdtEvaluator.Instance.ContextCascadeInsertBlock(); _skinContainer.MatchStatic(); - ChartPlayer.etor.ContextCascadeDiscardBlock(); + PdtEvaluator.Instance.ContextCascadeDiscardBlock(); _comps = RootTransform.GetComponentsInChildren(); foreach (var i in _comps) i.Init(); _indexSrc = new PropSrc.Float(() => Index); @@ -57,8 +57,8 @@ namespace Cryville.Crtr { } public void OnEmit(double time, Transform target) { _currentTarget = target; - _ctxev = ChartPlayer.etor.ContextEvent; - _ctxstate = ChartPlayer.etor.ContextState; + _ctxev = PdtEvaluator.Instance.ContextEvent; + _ctxstate = PdtEvaluator.Instance.ContextState; _skinContainer.MatchDynamic(0, true); if (_currentStateName.Key == 0) { EnterState(_def.init, time, _currentTarget, true); @@ -73,11 +73,11 @@ namespace Cryville.Crtr { _currentState = _def.states[name]; Rewind(time, target); RootTransform.gameObject.SetActive(true); - ChartPlayer.etor.ContextCascadeInsert(); - ChartPlayer.etor.ContextCascadeUpdate(_VAR_EFFECT_INDEX, _indexSrc); - ChartPlayer.etor.Evaluate(_durationOp, _currentState.duration); + PdtEvaluator.Instance.ContextCascadeInsert(); + PdtEvaluator.Instance.ContextCascadeUpdate(_VAR_EFFECT_INDEX, _indexSrc); + PdtEvaluator.Instance.Evaluate(_durationOp, _currentState.duration); _skinContainer.MatchDynamic(1, emitting); - ChartPlayer.etor.ContextCascadeDiscard(); + PdtEvaluator.Instance.ContextCascadeDiscard(); } public bool OnStateDone() { if (_currentState.next.Key == 0) { @@ -87,11 +87,11 @@ namespace Cryville.Crtr { return false; } else { - ChartPlayer.etor.ContextEvent = _ctxev; - ChartPlayer.etor.ContextState = _ctxstate; + PdtEvaluator.Instance.ContextEvent = _ctxev; + PdtEvaluator.Instance.ContextState = _ctxstate; EnterState(_currentState.next, EndTime, _currentTarget, false); - ChartPlayer.etor.ContextEvent = null; - ChartPlayer.etor.ContextState = null; + PdtEvaluator.Instance.ContextEvent = null; + PdtEvaluator.Instance.ContextState = null; return true; } } diff --git a/Assets/Cryville/Crtr/Event/ContainerHandler.cs b/Assets/Cryville/Crtr/Event/ContainerHandler.cs index 5aa47d5..8be18ea 100644 --- a/Assets/Cryville/Crtr/Event/ContainerHandler.cs +++ b/Assets/Cryville/Crtr/Event/ContainerHandler.cs @@ -127,12 +127,12 @@ namespace Cryville.Crtr.Event { a_tail = RegisterAnchor(_a_tail, true); } public virtual void Init() { - ChartPlayer.etor.ContextState = ps; - ChartPlayer.etor.ContextEvent = Container; + PdtEvaluator.Instance.ContextState = ps; + PdtEvaluator.Instance.ContextEvent = Container; skinContainer.MatchStatic(); MatchDynamic(ps, 0); - ChartPlayer.etor.ContextEvent = null; - ChartPlayer.etor.ContextState = null; + PdtEvaluator.Instance.ContextEvent = null; + PdtEvaluator.Instance.ContextState = null; foreach (Transform child in RootTransform) { if (child.CompareTag(TagRootTransform)) continue; _comps.AddRange(child.GetComponentsInChildren()); @@ -199,11 +199,11 @@ namespace Cryville.Crtr.Event { protected static bool CanDoGraphicalUpdate(ContainerState s) { return s.CloneType >= 2 && s.CloneType < 16; } [MethodImpl(MethodImplOptions.AggressiveInlining)] void MatchDynamic(ContainerState s, int dl) { - ChartPlayer.etor.ContextState = s; - ChartPlayer.etor.ContextEvent = Container; + PdtEvaluator.Instance.ContextState = s; + PdtEvaluator.Instance.ContextEvent = Container; skinContainer.MatchDynamic(dl); - ChartPlayer.etor.ContextEvent = null; - ChartPlayer.etor.ContextState = null; + PdtEvaluator.Instance.ContextEvent = null; + PdtEvaluator.Instance.ContextState = null; } #endregion #region Anchor diff --git a/Assets/Cryville/Crtr/Event/ContainerState.cs b/Assets/Cryville/Crtr/Event/ContainerState.cs index 17cfeef..1db5b9e 100644 --- a/Assets/Cryville/Crtr/Event/ContainerState.cs +++ b/Assets/Cryville/Crtr/Event/ContainerState.cs @@ -462,9 +462,9 @@ namespace Cryville.Crtr.Event { if (transition == null) return new Vector4(time, time, time, time); _ttime = time; _ttimesrc.Invalidate(); - ChartPlayer.etor.ContextSelfValue = _ttimesrc; - ChartPlayer.etor.Evaluate(_transop, transition); - ChartPlayer.etor.ContextSelfValue = null; + PdtEvaluator.Instance.ContextSelfValue = _ttimesrc; + PdtEvaluator.Instance.Evaluate(_transop, transition); + PdtEvaluator.Instance.ContextSelfValue = null; return _trans; } diff --git a/Assets/Cryville/Crtr/InputProxy.cs b/Assets/Cryville/Crtr/InputProxy.cs index db44b66..fc9d08a 100644 --- a/Assets/Cryville/Crtr/InputProxy.cs +++ b/Assets/Cryville/Crtr/InputProxy.cs @@ -23,7 +23,7 @@ namespace Cryville.Crtr { _vecsrcs[i] = vecsrc; _vecops[i] = new InputVectorOp(vecsrc); } - _etor = judge != null ? judge._etor : ChartPlayer.etor; + _etor = judge != null ? judge._etor : PdtEvaluator.Instance; _ruleset = ruleset; _judge = judge; _screenSize = new InputVector(screenSize.x, screenSize.y); diff --git a/Assets/Cryville/Crtr/PdtBinder.cs b/Assets/Cryville/Crtr/PdtBinder.cs index 0e9f636..b881146 100644 --- a/Assets/Cryville/Crtr/PdtBinder.cs +++ b/Assets/Cryville/Crtr/PdtBinder.cs @@ -11,42 +11,42 @@ namespace Cryville.Crtr { var exp = (PdtExpression)value; if (type.Equals(typeof(bool))) { 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; } else if (type.Equals(typeof(int))) { 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; } else if (type.Equals(typeof(float))) { 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; } else if (type.Equals(typeof(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; } else if (type.IsEnum) { 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; } else if (type.Equals(typeof(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; } else if (type.Equals(typeof(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; } else if (type.Equals(typeof(Identifier[]))) { 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; } } diff --git a/Assets/Cryville/Crtr/PdtEvaluator.cs b/Assets/Cryville/Crtr/PdtEvaluator.cs index daef1bd..1b8cc16 100644 --- a/Assets/Cryville/Crtr/PdtEvaluator.cs +++ b/Assets/Cryville/Crtr/PdtEvaluator.cs @@ -10,6 +10,15 @@ using UnityEngine; namespace Cryville.Crtr { 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 _shortops = new Dictionary(); readonly IntKeyedDictionary _ctxops = new IntKeyedDictionary(); @@ -152,6 +161,18 @@ namespace Cryville.Crtr { 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() { ContextCascadeBlocks.Push(0); for (int i = 0; i < ContextCascade.Length; i++) ContextCascade[i] = new IntKeyedDictionary(); diff --git a/Assets/Cryville/Crtr/PropOp.cs b/Assets/Cryville/Crtr/PropOp.cs index 975b10b..b1084fc 100644 --- a/Assets/Cryville/Crtr/PropOp.cs +++ b/Assets/Cryville/Crtr/PropOp.cs @@ -21,7 +21,7 @@ namespace Cryville.Crtr { var op = GetOperand(0); var value = new byte[op.Length]; 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 { diff --git a/Assets/Cryville/Crtr/Ruleset.cs b/Assets/Cryville/Crtr/Ruleset.cs index 7a35cce..1836981 100644 --- a/Assets/Cryville/Crtr/Ruleset.cs +++ b/Assets/Cryville/Crtr/Ruleset.cs @@ -157,7 +157,7 @@ namespace Cryville.Crtr { } } public void PrePatch(ChartEvent ev) { - var etor = ChartPlayer.etor; + var etor = PdtEvaluator.Instance; PropSrc src; etor.ContextCascadeInsert(); etor.ContextEvent = ev; diff --git a/Assets/Cryville/Crtr/RulesetSelectors.cs b/Assets/Cryville/Crtr/RulesetSelectors.cs index a5eef1b..18df9aa 100644 --- a/Assets/Cryville/Crtr/RulesetSelectors.cs +++ b/Assets/Cryville/Crtr/RulesetSelectors.cs @@ -90,10 +90,10 @@ namespace Cryville.Crtr { etor.Optimize(_exp); } public override IEnumerable Match(ChartEvent ev) { - ChartPlayer.etor.ContextEvent = ev; - if (!ChartPlayer.etor.Evaluate(_op, _exp)) + PdtEvaluator.Instance.ContextEvent = ev; + if (!PdtEvaluator.Instance.Evaluate(_op, _exp)) throw new EvaluationFailureException(); - ChartPlayer.etor.ContextEvent = null; + PdtEvaluator.Instance.ContextEvent = null; if (_flag) return new ChartEvent[] { ev }; else return null; } diff --git a/Assets/Cryville/Crtr/SkinContainer.cs b/Assets/Cryville/Crtr/SkinContainer.cs index adfed8b..21d3206 100644 --- a/Assets/Cryville/Crtr/SkinContainer.cs +++ b/Assets/Cryville/Crtr/SkinContainer.cs @@ -43,8 +43,8 @@ namespace Cryville.Crtr { } void MatchStatic(SkinElement rel, DynamicStack stack, RuntimeSkinContext ctx) { var rc = ctx.ReadContext; - ChartPlayer.etor.ContextTransform = rc.Transform; - if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs); + PdtEvaluator.Instance.ContextTransform = rc.Transform; + if (rc.PropSrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(rc.PropSrcs); foreach (var p in rel.properties) { try { 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 } ); } - ChartPlayer.etor.ContextTransform = null; + PdtEvaluator.Instance.ContextTransform = null; foreach (var e in rel.elements) { try { 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) { var stack = _stacks[dl]; @@ -81,7 +81,7 @@ namespace Cryville.Crtr { var nstack = dl + 1 < _stacks.Length ? _stacks[dl + 1] : null; if (nstack != null) nstack.Clear(); 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++) { DynamicProperty p = stack.Properties[i]; 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++) { DynamicElement e = stack.Elements[i]; 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)) { try { var nctx = e.Selectors.MatchDynamic(_group, e.Context.ReadContext); @@ -115,15 +115,15 @@ namespace Cryville.Crtr { if (nstack == null) throw new SelectorNotAvailableException(); 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(); } void MatchDynamic(SkinElement rel, int dl, DynamicStack stack, RuntimeSkinContext ctx) { var rc = ctx.ReadContext; - ChartPlayer.etor.ContextTransform = rc.Transform; - if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs); + PdtEvaluator.Instance.ContextTransform = rc.Transform; + if (rc.PropSrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(rc.PropSrcs); foreach (var p in rel.properties) { if (p.Key.annotations.Contains("once")) { if (_once.Contains(p.Key)) continue; @@ -134,7 +134,7 @@ namespace Cryville.Crtr { p.Key.ExecuteDynamic(_group, ctx, p.Value, Variables, dl); } } - ChartPlayer.etor.ContextTransform = null; + PdtEvaluator.Instance.ContextTransform = null; foreach (var e in rel.elements) { if (e.Key.IsUpdatable(_group, dl)) { 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; readonly PropSrc _rtimeSrc; public void MatchAnimation(AnimationSpan span, float rtime, RuntimeSkinContext ctx) { - ChartPlayer.etor.ContextSkinContainer = this; - ChartPlayer.etor.ContextSelfValue = _rtimeSrc; + PdtEvaluator.Instance.ContextSkinContainer = this; + PdtEvaluator.Instance.ContextSelfValue = _rtimeSrc; MatchAnimationInternal(span, rtime, ctx); - ChartPlayer.etor.ContextSelfValue = null; - ChartPlayer.etor.ContextSkinContainer = null; + PdtEvaluator.Instance.ContextSelfValue = null; + PdtEvaluator.Instance.ContextSkinContainer = null; } void MatchAnimationInternal(AnimationSpan span, float rtime, RuntimeSkinContext ctx) { _rtime = rtime; diff --git a/Assets/Cryville/Crtr/SkinPropertyKey.cs b/Assets/Cryville/Crtr/SkinPropertyKey.cs index 1e324d6..0da128c 100644 --- a/Assets/Cryville/Crtr/SkinPropertyKey.cs +++ b/Assets/Cryville/Crtr/SkinPropertyKey.cs @@ -90,10 +90,10 @@ namespace Cryville.Crtr { } void Execute(RuntimeSkinContext ctx, PdtOperator op, PdtExpression exp) { var psrcs = ctx.ReadContext.PropSrcs; - if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs); - if (!ChartPlayer.etor.Evaluate(op, exp)) + if (psrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(psrcs); + if (!PdtEvaluator.Instance.Evaluate(op, exp)) throw new EvaluationFailureException(); - if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard(); + if (psrcs != null) PdtEvaluator.Instance.ContextCascadeDiscard(); } SkinProperty GetPropOp(Transform obj) { var ctype = Component; @@ -145,10 +145,10 @@ namespace Cryville.Crtr { public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary vars, int dl) { if (dl != 1) return; var psrcs = ctx.ReadContext.PropSrcs; - if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs); - if (!ChartPlayer.etor.Evaluate(_timeOp, exp)) + if (psrcs != null) PdtEvaluator.Instance.ContextCascadeInsert(psrcs); + if (!PdtEvaluator.Instance.Evaluate(_timeOp, exp)) throw new EvaluationFailureException(); - if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard(); + if (psrcs != null) PdtEvaluator.Instance.ContextCascadeDiscard(); group.PushAnchorEvent(_time, Name); } } @@ -170,7 +170,7 @@ namespace Cryville.Crtr { float _index; readonly PropOp _op; public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary vars, int dl) { - if (!ChartPlayer.etor.Evaluate(_op, exp)) + if (!PdtEvaluator.Instance.Evaluate(_op, exp)) throw new EvaluationFailureException(); if (IsSelf) ChartPlayer.effectManager.EmitSelf(Name, _index, ctx.WriteTransform); else ChartPlayer.effectManager.Emit(Name, _index); @@ -189,14 +189,14 @@ namespace Cryville.Crtr { SkinVariable v; if (!vars.TryGetValue(Name, out v)) vars.Add(Name, v = new SkinVariable()); - if (!ChartPlayer.etor.Evaluate(v.Op, exp)) + if (!PdtEvaluator.Instance.Evaluate(v.Op, exp)) throw new EvaluationFailureException(); } public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary vars, int dl) { SkinVariable v; if (!vars.TryGetValue(Name, out v)) 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(); } } diff --git a/Assets/Cryville/Crtr/SkinSelectors.cs b/Assets/Cryville/Crtr/SkinSelectors.cs index b1e1854..c6f2205 100644 --- a/Assets/Cryville/Crtr/SkinSelectors.cs +++ b/Assets/Cryville/Crtr/SkinSelectors.cs @@ -129,9 +129,9 @@ namespace Cryville.Crtr { return Match(c); } public SkinContext Match(SkinContext a) { - ChartPlayer.etor.ContextTransform = a.Transform; + PdtEvaluator.Instance.ContextTransform = a.Transform; try { - if (!ChartPlayer.etor.Evaluate(_op, _exp)) + if (!PdtEvaluator.Instance.Evaluate(_op, _exp)) throw new EvaluationFailureException(); return _flag ? a : null; } @@ -139,7 +139,7 @@ namespace Cryville.Crtr { throw new SelectorNotAvailableException("The expression is not evaluatable under the current context", ex); } finally { - ChartPlayer.etor.ContextTransform = null; + PdtEvaluator.Instance.ContextTransform = null; } } }