Implement write-only context.
This commit is contained in:
@@ -52,8 +52,9 @@ namespace Cryville.Crtr {
|
|||||||
try {
|
try {
|
||||||
var nctxs = r.Key.MatchStatic(state, rc);
|
var nctxs = r.Key.MatchStatic(state, rc);
|
||||||
var roflag = r.Key.annotations.Contains("if");
|
var roflag = r.Key.annotations.Contains("if");
|
||||||
|
var woflag = r.Key.annotations.Contains("then");
|
||||||
foreach (var nctx in nctxs) {
|
foreach (var nctx in nctxs) {
|
||||||
var nrctx = new RuntimeSkinContext(nctx, ctx.WriteTransform, roflag);
|
var nrctx = new RuntimeSkinContext(nctx, ctx, roflag, woflag);
|
||||||
MatchStatic(r.Value, state, nrctx);
|
MatchStatic(r.Value, state, nrctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,10 +85,9 @@ namespace Cryville.Crtr {
|
|||||||
var psrcs = e.Context.ReadContext.PropSrcs;
|
var psrcs = e.Context.ReadContext.PropSrcs;
|
||||||
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
|
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
|
||||||
var nctx = e.Selectors.MatchDynamic(state, e.Context.ReadContext);
|
var nctx = e.Selectors.MatchDynamic(state, e.Context.ReadContext);
|
||||||
if (nctx != null) MatchDynamic(
|
if (nctx != null) MatchDynamic(e.Element, state, new RuntimeSkinContext(
|
||||||
e.Element, state,
|
nctx, e.Context, e.Selectors.annotations.Contains("if"), e.Selectors.annotations.Contains("then")
|
||||||
new RuntimeSkinContext(nctx, e.Context.ReadContext.Transform, e.Selectors.annotations.Contains("if"))
|
));
|
||||||
);
|
|
||||||
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
||||||
}
|
}
|
||||||
ChartPlayer.etor.ContextEvent = null;
|
ChartPlayer.etor.ContextEvent = null;
|
||||||
@@ -109,10 +109,9 @@ namespace Cryville.Crtr {
|
|||||||
foreach (var r in rel.elements) {
|
foreach (var r in rel.elements) {
|
||||||
if (!r.Key.IsUpdatable(state)) continue;
|
if (!r.Key.IsUpdatable(state)) continue;
|
||||||
var nctx = r.Key.MatchDynamic(state, rc);
|
var nctx = r.Key.MatchDynamic(state, rc);
|
||||||
if (nctx != null) MatchDynamic(
|
if (nctx != null) MatchDynamic(r.Value, state, new RuntimeSkinContext(
|
||||||
r.Value, state,
|
nctx, ctx, r.Key.annotations.Contains("if"), r.Key.annotations.Contains("then")
|
||||||
new RuntimeSkinContext(nctx, ctx.WriteTransform, r.Key.annotations.Contains("if"))
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
if (rc.PropSrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
|
||||||
}
|
}
|
||||||
@@ -151,9 +150,19 @@ namespace Cryville.Crtr {
|
|||||||
ReadContext = r;
|
ReadContext = r;
|
||||||
WriteTransform = w;
|
WriteTransform = w;
|
||||||
}
|
}
|
||||||
public RuntimeSkinContext(SkinContext newctx, Transform oldctx, bool roflag) {
|
public RuntimeSkinContext(SkinContext newctx, RuntimeSkinContext oldctx, bool roflag, bool woflag) {
|
||||||
|
if (roflag) {
|
||||||
ReadContext = newctx;
|
ReadContext = newctx;
|
||||||
WriteTransform = roflag ? oldctx : newctx.Transform;
|
WriteTransform = oldctx.WriteTransform;
|
||||||
|
}
|
||||||
|
else if (woflag) {
|
||||||
|
ReadContext = oldctx.ReadContext;
|
||||||
|
WriteTransform = newctx.Transform;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ReadContext = newctx;
|
||||||
|
WriteTransform = newctx.Transform;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user