Pull up ISkinnableGroup.

This commit is contained in:
2023-02-17 15:19:18 +08:00
parent 7015426300
commit db0165d145
6 changed files with 98 additions and 68 deletions

View File

@@ -19,7 +19,7 @@ namespace Cryville.Crtr.Components {
public SectionalGameObject() { public SectionalGameObject() {
SubmitProperty("partial", new PropOp.Boolean(v => part = Part.idle)); SubmitProperty("partial", new PropOp.Boolean(v => part = Part.idle));
SubmitProperty("part", new PropOp.Enum<Part>(v => part = v, v => (Part)v), 2); SubmitProperty("part", new PropOp.Enum<Part>(v => part = v, v => (Part)v), 1);
} }
protected override void OnDestroy() { protected override void OnDestroy() {
@@ -67,7 +67,7 @@ namespace Cryville.Crtr.Components {
SubmitProperty("head", new PropOp.String(v => head.FrameName = v)); SubmitProperty("head", new PropOp.String(v => head.FrameName = v));
SubmitProperty("body", new PropOp.String(v => body.FrameName = v)); SubmitProperty("body", new PropOp.String(v => body.FrameName = v));
SubmitProperty("tail", new PropOp.String(v => tail.FrameName = v)); SubmitProperty("tail", new PropOp.String(v => tail.FrameName = v));
SubmitProperty("shape", new op_set_shape(this), 2); SubmitProperty("shape", new op_set_shape(this), 1);
} }
#pragma warning disable IDE1006 #pragma warning disable IDE1006

View File

@@ -14,8 +14,8 @@ namespace Cryville.Crtr.Components {
/// </summary> /// </summary>
/// <param name="name">The name of the property.</param> /// <param name="name">The name of the property.</param>
/// <param name="property">The property.</param> /// <param name="property">The property.</param>
protected void SubmitProperty(string name, PdtOperator property, int uct = 1) { protected void SubmitProperty(string name, PdtOperator property, int udl = 0) {
Properties.Add(IdentifierManager.SharedInstance.Request(name), new SkinProperty(property, uct)); Properties.Add(IdentifierManager.SharedInstance.Request(name), new SkinProperty(property, udl));
} }
/// <summary> /// <summary>
@@ -30,10 +30,10 @@ namespace Cryville.Crtr.Components {
} }
public struct SkinProperty { public struct SkinProperty {
public PdtOperator Operator { get; set; } public PdtOperator Operator { get; set; }
public int UpdateCloneType { get; set; } public int UpdateDynamicLevel { get; set; }
public SkinProperty(PdtOperator op, int uct = 1) { public SkinProperty(PdtOperator op, int udl = 0) {
Operator = op; Operator = op;
UpdateCloneType = uct; UpdateDynamicLevel = udl;
} }
} }
} }

View File

@@ -8,7 +8,7 @@ using System.Runtime.CompilerServices;
using UnityEngine; using UnityEngine;
namespace Cryville.Crtr.Event { namespace Cryville.Crtr.Event {
public class ContainerState { public class ContainerState : ISkinnableGroup {
#region Struct #region Struct
public EventBus Bus; public EventBus Bus;
public EventContainer Container; public EventContainer Container;
@@ -466,5 +466,26 @@ namespace Cryville.Crtr.Event {
} }
} }
#endregion #endregion
#region ISkinnableGroup
public int DynamicLevel { get { return CloneType >> 1; } }
public string TypeName { get { return Handler.TypeName; } }
public ContainerState State { get { return this; } }
EventContainer ISkinnableGroup.Container { get { return Container; } }
public SkinContext SkinContext { get { return Handler.SkinContext; } }
public Anchor OpenedAnchor { get { return Handler.OpenedAnchor; } }
public bool TryGetAnchorsByName(int name, out IReadOnlyCollection<Anchor> result) {
List<Anchor> anchors;
var ret = Handler.Anchors.TryGetValue(name, out anchors);
result = anchors;
return ret;
}
public void RegisterAnchor(int name) {
Handler.RegisterAnchor(name, true);
}
public void PushAnchorEvent(double time, int name) {
Handler.PushAnchorEvent(time, name);
}
#endregion
} }
} }

View File

@@ -30,21 +30,21 @@ namespace Cryville.Crtr {
_rootElement = rootElement; _rootElement = rootElement;
for (int i = 0; i < _stacks.Length; i++) _stacks[i] = new DynamicStack(); for (int i = 0; i < _stacks.Length; i++) _stacks[i] = new DynamicStack();
} }
public void MatchStatic(ContainerState state) { public void MatchStatic(ISkinnableGroup group) {
var stack = _stacks[0]; var stack = _stacks[0];
stack.Clear(); stack.Clear();
ChartPlayer.etor.ContextState = state; if (group.State != null) ChartPlayer.etor.ContextState = group.State;
ChartPlayer.etor.ContextEvent = state.Container; if (group.Container != null) ChartPlayer.etor.ContextEvent = group.Container;
MatchStatic(_rootElement, state, stack, new RuntimeSkinContext(state.Handler.SkinContext)); MatchStatic(_rootElement, group, stack, new RuntimeSkinContext(group.SkinContext));
ChartPlayer.etor.ContextEvent = null; ChartPlayer.etor.ContextEvent = null;
ChartPlayer.etor.ContextState = null; ChartPlayer.etor.ContextState = null;
} }
void MatchStatic(SkinElement rel, ContainerState state, DynamicStack stack, RuntimeSkinContext ctx) { void MatchStatic(SkinElement rel, ISkinnableGroup group, DynamicStack stack, RuntimeSkinContext ctx) {
var rc = ctx.ReadContext; var rc = ctx.ReadContext;
ChartPlayer.etor.ContextTransform = rc.Transform; ChartPlayer.etor.ContextTransform = rc.Transform;
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs); if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs);
foreach (var p in rel.properties) { foreach (var p in rel.properties) {
p.Key.ExecuteStatic(state, ctx, p.Value); p.Key.ExecuteStatic(group, ctx, p.Value);
if (p.Key.IsValueRequired && !p.Value.IsConstant) stack.Properties.Add( if (p.Key.IsValueRequired && !p.Value.IsConstant) stack.Properties.Add(
new DynamicProperty { Context = ctx, Key = p.Key, Value = p.Value } new DynamicProperty { Context = ctx, Key = p.Key, Value = p.Value }
); );
@@ -52,13 +52,13 @@ namespace Cryville.Crtr {
ChartPlayer.etor.ContextTransform = null; ChartPlayer.etor.ContextTransform = null;
foreach (var e in rel.elements) { foreach (var e in rel.elements) {
try { try {
var nctxs = e.Key.MatchStatic(state, rc); var nctxs = e.Key.MatchStatic(group, rc);
if (nctxs != null) { if (nctxs != null) {
var roflag = e.Key.annotations.Contains("if"); var roflag = e.Key.annotations.Contains("if");
var woflag = e.Key.annotations.Contains("then"); var woflag = e.Key.annotations.Contains("then");
foreach (var nctx in nctxs) { foreach (var nctx in nctxs) {
var nrctx = new RuntimeSkinContext(nctx, ctx, roflag, woflag); var nrctx = new RuntimeSkinContext(nctx, ctx, roflag, woflag);
MatchStatic(e.Value, state, stack, nrctx); MatchStatic(e.Value, group, stack, nrctx);
} }
} }
} }
@@ -70,17 +70,17 @@ namespace Cryville.Crtr {
} }
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeDiscard(); if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
} }
public void MatchDynamic(ContainerState state) { public void MatchDynamic(ISkinnableGroup group) {
var stack = _stacks[state.CloneType >> 1]; var stack = _stacks[group.DynamicLevel];
var nstack = (state.CloneType >> 1) + 1 < _stacks.Length ? _stacks[(state.CloneType >> 1) + 1] : null; var nstack = group.DynamicLevel + 1 < _stacks.Length ? _stacks[group.DynamicLevel + 1] : null;
if (nstack != null) nstack.Clear(); if (nstack != null) nstack.Clear();
if (stack.Properties.Count == 0 && stack.Elements.Count == 0) return; if (stack.Properties.Count == 0 && stack.Elements.Count == 0) return;
Profiler.BeginSample("SkinContainer.MatchDynamic"); Profiler.BeginSample("SkinContainer.MatchDynamic");
ChartPlayer.etor.ContextState = state; if (group.State != null) ChartPlayer.etor.ContextState = group.State;
ChartPlayer.etor.ContextEvent = state.Container; if (group.Container != null) ChartPlayer.etor.ContextEvent = group.Container;
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(state, p.Context, p.Value); p.Key.ExecuteDynamic(group, p.Context, p.Value);
} }
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];
@@ -88,13 +88,13 @@ namespace Cryville.Crtr {
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs); if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
SkinContext nctx = null; SkinContext nctx = null;
try { try {
nctx = e.Selectors.MatchDynamic(state, e.Context.ReadContext); nctx = e.Selectors.MatchDynamic(group, e.Context.ReadContext);
} }
catch (SelectorNotAvailableException) { catch (SelectorNotAvailableException) {
if (nstack == null) throw; if (nstack == null) throw;
nstack.Elements.Add(e); nstack.Elements.Add(e);
} }
if (nctx != null) MatchDynamic(e.Element, state, nstack, new RuntimeSkinContext( if (nctx != null) MatchDynamic(e.Element, group, nstack, new RuntimeSkinContext(
nctx, e.Context, e.Selectors.annotations.Contains("if"), e.Selectors.annotations.Contains("then") nctx, e.Context, e.Selectors.annotations.Contains("if"), e.Selectors.annotations.Contains("then")
)); ));
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard(); if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
@@ -103,18 +103,18 @@ namespace Cryville.Crtr {
ChartPlayer.etor.ContextState = null; ChartPlayer.etor.ContextState = null;
Profiler.EndSample(); Profiler.EndSample();
} }
void MatchDynamic(SkinElement rel, ContainerState state, DynamicStack stack, RuntimeSkinContext ctx) { void MatchDynamic(SkinElement rel, ISkinnableGroup group, DynamicStack stack, RuntimeSkinContext ctx) {
var rc = ctx.ReadContext; var rc = ctx.ReadContext;
ChartPlayer.etor.ContextTransform = rc.Transform; ChartPlayer.etor.ContextTransform = rc.Transform;
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs); if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeInsert(rc.PropSrcs);
foreach (var p in rel.properties) { foreach (var p in rel.properties) {
p.Key.ExecuteDynamic(state, ctx, p.Value); p.Key.ExecuteDynamic(group, ctx, p.Value);
} }
ChartPlayer.etor.ContextTransform = null; ChartPlayer.etor.ContextTransform = null;
foreach (var e in rel.elements) { foreach (var e in rel.elements) {
if (e.Key.IsUpdatable(state)) { if (e.Key.IsUpdatable(group)) {
SkinContext nctx = e.Key.MatchDynamic(state, rc); SkinContext nctx = e.Key.MatchDynamic(group, rc);
if (nctx != null) MatchDynamic(e.Value, state, stack, new RuntimeSkinContext( if (nctx != null) MatchDynamic(e.Value, group, stack, new RuntimeSkinContext(
nctx, ctx, e.Key.annotations.Contains("if"), e.Key.annotations.Contains("then") nctx, ctx, e.Key.annotations.Contains("if"), e.Key.annotations.Contains("then")
)); ));
} }
@@ -162,4 +162,15 @@ 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);
void RegisterAnchor(int name);
void PushAnchorEvent(double time, int name);
}
} }

View File

@@ -1,7 +1,6 @@
using Cryville.Common; using Cryville.Common;
using Cryville.Common.Pdt; using Cryville.Common.Pdt;
using Cryville.Crtr.Components; using Cryville.Crtr.Components;
using Cryville.Crtr.Event;
using System; using System;
using UnityEngine; using UnityEngine;
@@ -9,18 +8,18 @@ namespace Cryville.Crtr {
public abstract class SkinPropertyKey { public abstract class SkinPropertyKey {
public abstract override string ToString(); public abstract override string ToString();
public abstract bool IsValueRequired { get; } public abstract bool IsValueRequired { get; }
public abstract void ExecuteStatic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp); public abstract void ExecuteStatic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp);
public abstract void ExecuteDynamic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp); public abstract void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp);
public class CreateComponent : SkinPropertyKey { public class CreateComponent : SkinPropertyKey {
public Type Component { get; set; } public Type Component { get; set; }
public override string ToString() { public override string ToString() {
return string.Format("*{0}", Component.Name); return string.Format("*{0}", Component.Name);
} }
public override bool IsValueRequired { get { return false; } } public override bool IsValueRequired { get { return false; } }
public override void ExecuteStatic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteStatic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
ctx.WriteTransform.gameObject.AddComponent(Component); ctx.WriteTransform.gameObject.AddComponent(Component);
} }
public override void ExecuteDynamic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
throw new InvalidOperationException("Component creation in dynamic context is not allowed"); throw new InvalidOperationException("Component creation in dynamic context is not allowed");
} }
} }
@@ -31,12 +30,12 @@ namespace Cryville.Crtr {
return string.Format("{0}.{1}", Component.Name, IdentifierManager.SharedInstance.Retrieve(Name)); return string.Format("{0}.{1}", Component.Name, IdentifierManager.SharedInstance.Retrieve(Name));
} }
public override bool IsValueRequired { get { return true; } } public override bool IsValueRequired { get { return true; } }
public override void ExecuteStatic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteStatic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
Execute(ctx, GetPropOp(ctx.WriteTransform).Operator, exp); Execute(ctx, GetPropOp(ctx.WriteTransform).Operator, exp);
} }
public override void ExecuteDynamic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
var prop = GetPropOp(ctx.WriteTransform); var prop = GetPropOp(ctx.WriteTransform);
if (state.CloneType > prop.UpdateCloneType) return; if (group.DynamicLevel > prop.UpdateDynamicLevel) return;
Execute(ctx, prop.Operator, exp); Execute(ctx, prop.Operator, exp);
} }
void Execute(RuntimeSkinContext ctx, PdtOperator op, PdtExpression exp) { void Execute(RuntimeSkinContext ctx, PdtOperator op, PdtExpression exp) {
@@ -67,10 +66,10 @@ namespace Cryville.Crtr {
return string.Format("@has {0}", IdentifierManager.SharedInstance.Retrieve(Name)); return string.Format("@has {0}", IdentifierManager.SharedInstance.Retrieve(Name));
} }
public override bool IsValueRequired { get { return false; } } public override bool IsValueRequired { get { return false; } }
public override void ExecuteStatic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteStatic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
state.Handler.RegisterAnchor(Name, true); group.RegisterAnchor(Name);
} }
public override void ExecuteDynamic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
throw new InvalidOperationException("Anchor creation in dynamic context is not allowed"); throw new InvalidOperationException("Anchor creation in dynamic context is not allowed");
} }
} }
@@ -83,18 +82,18 @@ namespace Cryville.Crtr {
return string.Format("@at {0}", IdentifierManager.SharedInstance.Retrieve(Name)); return string.Format("@at {0}", IdentifierManager.SharedInstance.Retrieve(Name));
} }
public override bool IsValueRequired { get { return true; } } public override bool IsValueRequired { get { return true; } }
public override void ExecuteStatic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteStatic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
throw new InvalidOperationException("Setting anchor in static context is not allowed"); throw new InvalidOperationException("Setting anchor in static context is not allowed");
} }
float _time; float _time;
readonly PropOp _timeOp; readonly PropOp _timeOp;
public override void ExecuteDynamic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
if (state.CloneType > 1) return; if (group.DynamicLevel > 0) return;
var psrcs = ctx.ReadContext.PropSrcs; var psrcs = ctx.ReadContext.PropSrcs;
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs); if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
ChartPlayer.etor.Evaluate(_timeOp, exp); ChartPlayer.etor.Evaluate(_timeOp, exp);
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard(); if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
state.Handler.PushAnchorEvent(_time, Name); group.PushAnchorEvent(_time, Name);
} }
} }
public class EmitEffect : SkinPropertyKey { public class EmitEffect : SkinPropertyKey {
@@ -104,10 +103,10 @@ namespace Cryville.Crtr {
return string.Format("@emit {0}", IdentifierManager.SharedInstance.Retrieve(Name)); return string.Format("@emit {0}", IdentifierManager.SharedInstance.Retrieve(Name));
} }
public override bool IsValueRequired { get { return true; } } public override bool IsValueRequired { get { return true; } }
public override void ExecuteStatic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteStatic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
// TODO // TODO
} }
public override void ExecuteDynamic(ContainerState state, RuntimeSkinContext ctx, PdtExpression exp) { public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp) {
// TODO // TODO
} }
} }

View File

@@ -1,7 +1,6 @@
using Cryville.Common; using Cryville.Common;
using Cryville.Common.Pdt; using Cryville.Common.Pdt;
using Cryville.Crtr.Components; using Cryville.Crtr.Components;
using Cryville.Crtr.Event;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -37,21 +36,21 @@ namespace Cryville.Crtr {
selectors[i].Optimize(etor); selectors[i].Optimize(etor);
} }
} }
public IEnumerable<SkinContext> MatchStatic(ContainerState h, SkinContext ctx) { public IEnumerable<SkinContext> MatchStatic(ISkinnableGroup g, SkinContext ctx) {
IEnumerable<SkinContext> result = new SkinContext[] { ctx }; IEnumerable<SkinContext> result = new SkinContext[] { ctx };
foreach (var s in selectors) { foreach (var s in selectors) {
result = result.SelectMany(l => s.MatchStatic(h, l)); result = result.SelectMany(l => s.MatchStatic(g, l));
} }
return result; return result;
} }
public bool IsUpdatable(ContainerState h) { public bool IsUpdatable(ISkinnableGroup g) {
foreach (var s in selectors) foreach (var s in selectors)
if (!s.IsUpdatable(h)) return false; if (!s.IsUpdatable(g)) return false;
return true; return true;
} }
public SkinContext MatchDynamic(ContainerState h, SkinContext ctx) { public SkinContext MatchDynamic(ISkinnableGroup g, SkinContext ctx) {
foreach (var s in selectors) { foreach (var s in selectors) {
ctx = s.MatchDynamic(h, ctx); ctx = s.MatchDynamic(g, ctx);
if (ctx == null) return null; if (ctx == null) return null;
} }
return ctx; return ctx;
@@ -63,16 +62,16 @@ namespace Cryville.Crtr {
public abstract override string ToString(); public abstract override string ToString();
public virtual void Optimize(PdtEvaluatorBase etor) { } public virtual void Optimize(PdtEvaluatorBase etor) { }
public virtual IEnumerable<SkinContext> MatchStatic(ContainerState h, SkinContext c) { throw new SelectorNotAvailableException(); } public virtual IEnumerable<SkinContext> MatchStatic(ISkinnableGroup g, SkinContext c) { throw new SelectorNotAvailableException(); }
public virtual SkinContext MatchDynamic(ContainerState h, SkinContext c) { throw new SelectorNotAvailableException(); } public virtual SkinContext MatchDynamic(ISkinnableGroup g, SkinContext c) { throw new SelectorNotAvailableException(); }
public virtual bool IsUpdatable(ContainerState h) { public virtual bool IsUpdatable(ISkinnableGroup g) {
return true; return true;
} }
public class CreateObject : SkinSelector { public class CreateObject : SkinSelector {
public CreateObject() { } public CreateObject() { }
public override string ToString() { return "$"; } public override string ToString() { return "$"; }
public override IEnumerable<SkinContext> MatchStatic(ContainerState h, SkinContext c) { public override IEnumerable<SkinContext> MatchStatic(ISkinnableGroup g, SkinContext c) {
var obj = new GameObject("__obj__"); var obj = new GameObject("__obj__");
obj.transform.SetParent(c.Transform, false); obj.transform.SetParent(c.Transform, false);
obj.AddComponent<TransformInterface>(); obj.AddComponent<TransformInterface>();
@@ -86,9 +85,9 @@ namespace Cryville.Crtr {
} }
public override string ToString() { return string.Format(".{0}", IdentifierManager.SharedInstance.Retrieve(Name)); } public override string ToString() { return string.Format(".{0}", IdentifierManager.SharedInstance.Retrieve(Name)); }
public override IEnumerable<SkinContext> MatchStatic(ContainerState h, SkinContext c) { public override IEnumerable<SkinContext> MatchStatic(ISkinnableGroup g, SkinContext c) {
List<CAnchor> anchors; IReadOnlyCollection<CAnchor> anchors;
if (h.Handler.Anchors.TryGetValue(Name, out anchors)) { if (g.TryGetAnchorsByName(Name, out anchors)) {
return anchors.Select(a => a.SkinContext); return anchors.Select(a => a.SkinContext);
} }
else return Enumerable.Empty<SkinContext>(); else return Enumerable.Empty<SkinContext>();
@@ -101,11 +100,11 @@ namespace Cryville.Crtr {
} }
public override string ToString() { return string.Format("..{0}", IdentifierManager.SharedInstance.Retrieve(Name)); } public override string ToString() { return string.Format("..{0}", IdentifierManager.SharedInstance.Retrieve(Name)); }
public override SkinContext MatchDynamic(ContainerState h, SkinContext c) { public override SkinContext MatchDynamic(ISkinnableGroup g, SkinContext c) {
return h.Handler.OpenedAnchor != null && h.Handler.OpenedAnchor.Name == Name ? c : null; return g.OpenedAnchor != null && g.OpenedAnchor.Name == Name ? c : null;
} }
public override bool IsUpdatable(ContainerState h) { public override bool IsUpdatable(ISkinnableGroup g) {
return h.CloneType >= 2; return g.DynamicLevel >= 1;
} }
} }
public class Property : SkinSelector { public class Property : SkinSelector {
@@ -121,12 +120,12 @@ namespace Cryville.Crtr {
public override void Optimize(PdtEvaluatorBase etor) { public override void Optimize(PdtEvaluatorBase etor) {
etor.Optimize(_exp); etor.Optimize(_exp);
} }
public override IEnumerable<SkinContext> MatchStatic(ContainerState h, SkinContext c) { public override IEnumerable<SkinContext> MatchStatic(ISkinnableGroup g, SkinContext c) {
var result = Match(c); var result = Match(c);
if (result != null) return new SkinContext[] { result }; if (result != null) return new SkinContext[] { result };
else return Enumerable.Empty<SkinContext>(); else return Enumerable.Empty<SkinContext>();
} }
public override SkinContext MatchDynamic(ContainerState h, SkinContext c) { public override SkinContext MatchDynamic(ISkinnableGroup g, SkinContext c) {
return Match(c); return Match(c);
} }
public SkinContext Match(SkinContext a) { public SkinContext Match(SkinContext a) {
@@ -148,8 +147,8 @@ namespace Cryville.Crtr {
public ElementType(string type) { _type = type; } public ElementType(string type) { _type = type; }
public override string ToString() { return _type; } public override string ToString() { return _type; }
public override IEnumerable<SkinContext> MatchStatic(ContainerState h, SkinContext c) { public override IEnumerable<SkinContext> MatchStatic(ISkinnableGroup g, SkinContext c) {
return h.Handler.TypeName == _type ? new SkinContext[] { c } : Enumerable.Empty<SkinContext>(); return g.TypeName == _type ? new SkinContext[] { c } : Enumerable.Empty<SkinContext>();
} }
} }
} }