From a09a5686d73b9e6b22b1d2b1fa922e60e8be0a78 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Mon, 16 Jan 2023 13:33:25 +0800 Subject: [PATCH] Change anchor opening to single only. --- Assets/Cryville/Crtr/Event/ContainerHandler.cs | 15 ++++++++------- Assets/Cryville/Crtr/SkinSelectors.cs | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Assets/Cryville/Crtr/Event/ContainerHandler.cs b/Assets/Cryville/Crtr/Event/ContainerHandler.cs index f36b475..33e13c0 100644 --- a/Assets/Cryville/Crtr/Event/ContainerHandler.cs +++ b/Assets/Cryville/Crtr/Event/ContainerHandler.cs @@ -60,7 +60,7 @@ namespace Cryville.Crtr.Event { get; } public readonly Dictionary> Anchors = new Dictionary>(); - public readonly Dictionary OpenAnchors = new Dictionary(); + public Anchor OpenedAnchor; protected Anchor a_cur; protected Anchor a_head; protected Anchor a_tail; @@ -113,7 +113,7 @@ namespace Cryville.Crtr.Event { Awoken = true; Alive = true; } protected virtual void Awake(ContainerState s) { - if (gogroup) CloseAnchor(a_head); + if (gogroup) CloseAnchor(); } protected virtual void GetPosition(ContainerState s) { } public virtual void StartUpdate(ContainerState s) { @@ -152,7 +152,7 @@ namespace Cryville.Crtr.Event { tev.Target.Transform.rotation = Quaternion.Euler(s.Direction); #endif skinContainer.MatchDynamic(s); - CloseAnchor(tev.Target); + CloseAnchor(); } anchorEvPool.Return(tev); } @@ -164,7 +164,7 @@ namespace Cryville.Crtr.Event { if (gogroup && s.CloneType <= 2) { OpenAnchor(a_tail); skinContainer.MatchDynamic(s); - CloseAnchor(a_tail); + CloseAnchor(); } } } @@ -172,10 +172,11 @@ namespace Cryville.Crtr.Event { if (cs.Working) PushAnchorEvent(cs.Time, a_cur); } protected void OpenAnchor(Anchor anchor) { - OpenAnchors.Add(anchor.Name, anchor); + if (OpenedAnchor != null) throw new InvalidOperationException("An anchor has been opened"); + OpenedAnchor = anchor; } - protected void CloseAnchor(Anchor anchor) { - OpenAnchors.Remove(anchor.Name); + protected void CloseAnchor() { + OpenedAnchor = null; } } } diff --git a/Assets/Cryville/Crtr/SkinSelectors.cs b/Assets/Cryville/Crtr/SkinSelectors.cs index 8099c53..b3b8609 100644 --- a/Assets/Cryville/Crtr/SkinSelectors.cs +++ b/Assets/Cryville/Crtr/SkinSelectors.cs @@ -89,7 +89,7 @@ namespace Cryville.Crtr { else return Enumerable.Empty(); } public override bool IsUpdatable(ContainerState h) { - return h.Handler.OpenAnchors.ContainsKey(Name); + return h.Handler.OpenedAnchor.Name == Name; } } public class AtAnchor : SkinSelector { @@ -101,7 +101,7 @@ namespace Cryville.Crtr { return IsUpdatable(h) ? a : null; } public override bool IsUpdatable(ContainerState h) { - return h.Handler.OpenAnchors.ContainsKey(Name); + return h.Handler.OpenedAnchor.Name == Name; } } public class Property : SkinSelector {