Remove some dedicated properties on ISkinnableGroup.

This commit is contained in:
2023-02-17 18:10:46 +08:00
parent 88d35e4eaf
commit 9c08cbf0d2
5 changed files with 72 additions and 78 deletions

View File

@@ -33,11 +33,7 @@ namespace Cryville.Crtr {
public void MatchStatic(ISkinnableGroup group) {
var stack = _stacks[0];
stack.Clear();
if (group.State != null) ChartPlayer.etor.ContextState = group.State;
if (group.Container != null) ChartPlayer.etor.ContextEvent = group.Container;
MatchStatic(_rootElement, group, stack, new RuntimeSkinContext(group.SkinContext));
ChartPlayer.etor.ContextEvent = null;
ChartPlayer.etor.ContextState = null;
}
void MatchStatic(SkinElement rel, ISkinnableGroup group, DynamicStack stack, RuntimeSkinContext ctx) {
var rc = ctx.ReadContext;
@@ -70,17 +66,15 @@ namespace Cryville.Crtr {
}
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
}
public void MatchDynamic(ISkinnableGroup group) {
var stack = _stacks[group.DynamicLevel];
var nstack = group.DynamicLevel + 1 < _stacks.Length ? _stacks[group.DynamicLevel + 1] : null;
if (nstack != null) nstack.Clear();
public void MatchDynamic(ISkinnableGroup group, int dl) {
var stack = _stacks[dl];
if (stack.Properties.Count == 0 && stack.Elements.Count == 0) return;
var nstack = dl + 1 < _stacks.Length ? _stacks[dl + 1] : null;
if (nstack != null) nstack.Clear();
Profiler.BeginSample("SkinContainer.MatchDynamic");
if (group.State != null) ChartPlayer.etor.ContextState = group.State;
if (group.Container != null) ChartPlayer.etor.ContextEvent = group.Container;
for (int i = 0; i < stack.Properties.Count; i++) {
DynamicProperty p = stack.Properties[i];
p.Key.ExecuteDynamic(group, p.Context, p.Value);
p.Key.ExecuteDynamic(group, p.Context, p.Value, dl);
}
for (int i = 0; i < stack.Elements.Count; i++) {
DynamicElement e = stack.Elements[i];
@@ -94,27 +88,25 @@ namespace Cryville.Crtr {
if (nstack == null) throw;
nstack.Elements.Add(e);
}
if (nctx != null) MatchDynamic(e.Element, group, nstack, new RuntimeSkinContext(
if (nctx != null) MatchDynamic(e.Element, group, dl, nstack, new RuntimeSkinContext(
nctx, e.Context, e.Selectors.annotations.Contains("if"), e.Selectors.annotations.Contains("then")
));
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
}
ChartPlayer.etor.ContextEvent = null;
ChartPlayer.etor.ContextState = null;
Profiler.EndSample();
}
void MatchDynamic(SkinElement rel, ISkinnableGroup group, DynamicStack stack, RuntimeSkinContext ctx) {
void MatchDynamic(SkinElement rel, ISkinnableGroup group, int dl, DynamicStack stack, RuntimeSkinContext ctx) {
var rc = ctx.ReadContext;
ChartPlayer.etor.ContextTransform = rc.Transform;
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs);
foreach (var p in rel.properties) {
p.Key.ExecuteDynamic(group, ctx, p.Value);
p.Key.ExecuteDynamic(group, ctx, p.Value, dl);
}
ChartPlayer.etor.ContextTransform = null;
foreach (var e in rel.elements) {
if (e.Key.IsUpdatable(group)) {
if (e.Key.IsUpdatable(group, dl)) {
SkinContext nctx = e.Key.MatchDynamic(group, rc);
if (nctx != null) MatchDynamic(e.Value, group, stack, new RuntimeSkinContext(
if (nctx != null) MatchDynamic(e.Value, group, dl, stack, new RuntimeSkinContext(
nctx, ctx, e.Key.annotations.Contains("if"), e.Key.annotations.Contains("then")
));
}
@@ -163,10 +155,7 @@ namespace Cryville.Crtr {
}
}
public interface ISkinnableGroup {
int DynamicLevel { get; }
string TypeName { get; }
ContainerState State { get; }
EventContainer Container { get; }
SkinContext SkinContext { get; }
Anchor OpenedAnchor { get; }
bool TryGetAnchorsByName(int name, out IReadOnlyCollection<Anchor> result);