fix: some issues with Shape Changer previews not updating (#1012)

This commit is contained in:
bd_ 2024-08-17 17:32:13 -07:00 committed by GitHub
parent 7384715059
commit 7a20eaf57e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -90,20 +90,19 @@ namespace nadena.dev.modular_avatar.core.editor
private class Node : IRenderFilterNode private class Node : IRenderFilterNode
{ {
private readonly RenderGroup _group; private readonly RenderGroup _group;
private readonly ImmutableList<ModularAvatarShapeChanger> _changers;
private Mesh _generatedMesh = null; private Mesh _generatedMesh = null;
private ImmutableList<ModularAvatarShapeChanger> _changers;
private HashSet<int> _toDelete; private HashSet<int> _toDelete;
internal Node(RenderGroup group) internal Node(RenderGroup group)
{ {
_group = group; _group = group;
_changers = _group.GetData<ImmutableList<ModularAvatarShapeChanger>>();
} }
private HashSet<int> GetToDeleteSet(SkinnedMeshRenderer proxy, ComputeContext context) private HashSet<int> GetToDeleteSet(SkinnedMeshRenderer proxy, ComputeContext context)
{ {
_changers = _group.GetData<ImmutableList<ModularAvatarShapeChanger>>();
var toDelete = new HashSet<int>(); var toDelete = new HashSet<int>();
var mesh = context.Observe(proxy, p => p.sharedMesh, (a, b) => var mesh = context.Observe(proxy, p => p.sharedMesh, (a, b) =>
{ {
@ -118,15 +117,20 @@ namespace nadena.dev.modular_avatar.core.editor
foreach (var changer in _changers) foreach (var changer in _changers)
{ {
var shapes = context.Observe(changer, c => c.Shapes.ToImmutableList(), Enumerable.SequenceEqual); var shapes = context.Observe(changer,
c => c.Shapes
.Where(s => s.ChangeType == ShapeChangeType.Delete)
.Select(s => s.ShapeName)
.ToImmutableList(),
Enumerable.SequenceEqual
);
foreach (var shape in shapes) foreach (var shape in shapes)
if (shape.ChangeType == ShapeChangeType.Delete) {
{ var index = mesh.GetBlendShapeIndex(shape);
var index = mesh.GetBlendShapeIndex(shape.ShapeName); if (index < 0) continue;
if (index < 0) continue; toDelete.Add(index);
toDelete.Add(index); }
}
} }
return toDelete; return toDelete;
@ -158,6 +162,7 @@ namespace nadena.dev.modular_avatar.core.editor
var toDelete = GetToDeleteSet(smr, context); var toDelete = GetToDeleteSet(smr, context);
if (toDelete.Count == _toDelete.Count && toDelete.All(_toDelete.Contains)) if (toDelete.Count == _toDelete.Count && toDelete.All(_toDelete.Contains))
{ {
//System.Diagnostics.Debug.WriteLine("[ShapeChangerPreview] No changes detected. Retaining node.");
return this; return this;
} }