Wrap Transform into SkinContext. Implement r/w context separation for skins.

This commit is contained in:
2023-01-16 15:08:25 +08:00
parent d0a23aaf30
commit 43c87fba70
4 changed files with 105 additions and 66 deletions

View File

@@ -36,7 +36,8 @@ namespace Cryville.Crtr.Event {
/// <summary>
/// <see cref="GameObject"/> group, the <see cref="Transform"/> containing all the generated elements in the <see cref="ContainerHandler"/>.
/// </summary>
public Transform gogroup;
protected Transform gogroup;
public SkinContext SkinContext;
public Vector3 Position { get; protected set; }
public Quaternion Rotation { get; protected set; }
@@ -69,16 +70,17 @@ namespace Cryville.Crtr.Event {
protected readonly static int _a_tail = IdentifierManager.SharedInstance.Request("tail");
public virtual void PreInit() {
gogroup = new GameObject(TypeName + ":" + Container.GetHashCode().ToString(CultureInfo.InvariantCulture)).transform;
SkinContext = new SkinContext(gogroup);
if (cs.Parent != null)
gogroup.SetParent(cs.Parent.Handler.gogroup, false);
a_cur = RegisterAnchor(_a_cur);
a_head = RegisterAnchor(_a_head);
a_tail = RegisterAnchor(_a_tail);
}
protected Anchor RegisterAnchor(int name) {
protected Anchor RegisterAnchor(int name, bool hasPropSrcs = false) {
var go = new GameObject("." + IdentifierManager.SharedInstance.Retrieve(name)).transform;
go.SetParent(gogroup, false);
var result = new Anchor(name, go);
var result = new Anchor(name, go, hasPropSrcs);
List<Anchor> list;
if (!Anchors.TryGetValue(name, out list))
Anchors.Add(name, list = new List<Anchor>());