fix: ScaleAdjusterPreview breaks when avatar descriptors are nested (#1154)

This commit is contained in:
bd_ 2024-09-15 22:47:26 -04:00 committed by GitHub
parent 9073ff8c2d
commit 3648348184
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -61,18 +61,19 @@ namespace nadena.dev.modular_avatar.core.editor
var avatarToRenderer =
new Dictionary<GameObject, HashSet<Renderer>>(new ObjectIdentityComparer<GameObject>());
foreach (var adjuster in scaleAdjusters)
foreach (var root in ctx.GetAvatarRoots())
{
if (adjuster == null) continue;
// Find parent object
// TODO: Reactive helper
var root = FindAvatarRootObserving(ctx, adjuster.gameObject);
if (root == null) continue;
if (!avatarToRenderer.TryGetValue(root, out var renderers))
if (ctx.GetComponentsInChildren<ModularAvatarScaleAdjuster>(root, true).Length == 0)
{
renderers = new HashSet<Renderer>(new ObjectIdentityComparer<Renderer>());
continue;
}
if (ctx.GetAvatarRoot(root?.transform?.parent?.gameObject) != null)
{
continue; // nested avatar descriptor
}
var renderers = new HashSet<Renderer>(new ObjectIdentityComparer<Renderer>());
avatarToRenderer.Add(root, renderers);
foreach (var renderer in root.GetComponentsInChildren<Renderer>())
@ -83,7 +84,6 @@ namespace nadena.dev.modular_avatar.core.editor
renderers.Add(renderer);
}
}
}
return avatarToRenderer.Select(kvp => RenderGroup.For(kvp.Value).WithData(kvp.Key)).ToImmutableList();
}