fix: remove ObjectIdentityComparer (#1211)

Apparently, it's safe to use Unity objects as keys in HashMaps, and doing
so actually fixes some edge cases where assets are recreated as a new C# object.
This commit is contained in:
bd_ 2024-09-25 21:39:01 -07:00 committed by GitHub
parent e63a34e2ba
commit ee64cafe02
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 12 additions and 39 deletions

View File

@ -61,7 +61,7 @@ namespace nadena.dev.modular_avatar.core.editor
var grouped = ctx.Observe(target, var grouped = ctx.Observe(target,
t => (t.GroupedBones ?? Array.Empty<GameObject>()) t => (t.GroupedBones ?? Array.Empty<GameObject>())
.Select(obj => obj.transform) .Select(obj => obj.transform)
.ToHashSet(new ObjectIdentityComparer<Transform>()), .ToHashSet(),
(x, y) => x.SetEquals(y) (x, y) => x.SetEquals(y)
); );

View File

@ -45,7 +45,7 @@ namespace nadena.dev.modular_avatar.core.editor
{ {
var converters = context.AvatarRootObject.GetComponentsInChildren<ModularAvatarConvertConstraints>(true) var converters = context.AvatarRootObject.GetComponentsInChildren<ModularAvatarConvertConstraints>(true)
.Select(c => c.gameObject) .Select(c => c.gameObject)
.ToHashSet(new ObjectIdentityComparer<GameObject>()); .ToHashSet();
if (converters.Count == 0) return; if (converters.Count == 0) return;
var constraintGameObjects = context.AvatarRootObject.GetComponentsInChildren<IConstraint>(true) var constraintGameObjects = context.AvatarRootObject.GetComponentsInChildren<IConstraint>(true)

View File

@ -5,7 +5,6 @@ using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using nadena.dev.modular_avatar.core.editor.Simulator;
using nadena.dev.ndmf.preview; using nadena.dev.ndmf.preview;
using UnityEngine; using UnityEngine;
using Object = UnityEngine.Object; using Object = UnityEngine.Object;
@ -75,7 +74,7 @@ namespace nadena.dev.modular_avatar.core.editor
ImmutableDictionary<SkinnedMeshRenderer, ImmutableList<(int, float)>>.Builder rendererStates = ImmutableDictionary<SkinnedMeshRenderer, ImmutableList<(int, float)>>.Builder rendererStates =
ImmutableDictionary.CreateBuilder<SkinnedMeshRenderer, ImmutableList<(int, float)>>( ImmutableDictionary.CreateBuilder<SkinnedMeshRenderer, ImmutableList<(int, float)>>(
new ObjectIdentityComparer<SkinnedMeshRenderer>()
); );
var avatarRootTransform = avatarRoot.transform; var avatarRootTransform = avatarRoot.transform;

View File

@ -31,7 +31,7 @@ namespace nadena.dev.modular_avatar.core.editor.ScaleAdjuster
public BoneState parentHint; public BoneState parentHint;
} }
private Dictionary<Component, BoneState> _bones = new(new ObjectIdentityComparer<Component>()); private readonly Dictionary<Component, BoneState> _bones = new();
//private List<BoneState> _states = new List<BoneState>(); //private List<BoneState> _states = new List<BoneState>();
public void Clear() public void Clear()

View File

@ -59,7 +59,7 @@ namespace nadena.dev.modular_avatar.core.editor
var scaleAdjusters = ctx.GetComponentsByType<ModularAvatarScaleAdjuster>(); var scaleAdjusters = ctx.GetComponentsByType<ModularAvatarScaleAdjuster>();
var avatarToRenderer = var avatarToRenderer =
new Dictionary<GameObject, HashSet<Renderer>>(new ObjectIdentityComparer<GameObject>()); new Dictionary<GameObject, HashSet<Renderer>>();
foreach (var root in ctx.GetAvatarRoots()) foreach (var root in ctx.GetAvatarRoots())
{ {
@ -72,8 +72,8 @@ namespace nadena.dev.modular_avatar.core.editor
{ {
continue; // nested avatar descriptor continue; // nested avatar descriptor
} }
var renderers = new HashSet<Renderer>(new ObjectIdentityComparer<Renderer>()); var renderers = new HashSet<Renderer>();
avatarToRenderer.Add(root, renderers); avatarToRenderer.Add(root, renderers);
foreach (var renderer in root.GetComponentsInChildren<Renderer>()) foreach (var renderer in root.GetComponentsInChildren<Renderer>())
@ -112,12 +112,12 @@ namespace nadena.dev.modular_avatar.core.editor
private readonly Dictionary<Transform, Transform> _shadowBoneMap; private readonly Dictionary<Transform, Transform> _shadowBoneMap;
// Map from bones found in initial proxy state to shadow bones (with scale adjuster bones substituted) // Map from bones found in initial proxy state to shadow bones (with scale adjuster bones substituted)
private readonly Dictionary<Transform, Transform> _finalBonesMap = new(new ObjectIdentityComparer<Transform>()); private readonly Dictionary<Transform, Transform> _finalBonesMap = new();
private readonly Dictionary<ModularAvatarScaleAdjuster, Transform> _scaleAdjusters = private readonly Dictionary<ModularAvatarScaleAdjuster, Transform> _scaleAdjusters =
new(new ObjectIdentityComparer<ModularAvatarScaleAdjuster>()); new();
private Dictionary<Renderer, Transform[]> _rendererBoneStates = new(new ObjectIdentityComparer<Renderer>()); private Dictionary<Renderer, Transform[]> _rendererBoneStates = new();
public ScaleAdjusterPreviewNode(ComputeContext context, RenderGroup group, public ScaleAdjusterPreviewNode(ComputeContext context, RenderGroup group,
IEnumerable<(Renderer, Renderer)> proxyPairs) IEnumerable<(Renderer, Renderer)> proxyPairs)
@ -169,7 +169,7 @@ namespace nadena.dev.modular_avatar.core.editor
private HashSet<Transform> GetSourceBonesSet(ComputeContext context, List<(Renderer, Renderer)> proxyPairs) private HashSet<Transform> GetSourceBonesSet(ComputeContext context, List<(Renderer, Renderer)> proxyPairs)
{ {
var bonesSet = new HashSet<Transform>(new ObjectIdentityComparer<Transform>()); var bonesSet = new HashSet<Transform>();
foreach (var (_, r) in proxyPairs) foreach (var (_, r) in proxyPairs)
{ {
if (r == null) continue; if (r == null) continue;
@ -248,7 +248,7 @@ namespace nadena.dev.modular_avatar.core.editor
private Dictionary<Transform, Transform> CreateShadowBones(Transform[] srcBones) private Dictionary<Transform, Transform> CreateShadowBones(Transform[] srcBones)
{ {
var srcToDst = new Dictionary<Transform, Transform>(new ObjectIdentityComparer<Transform>()); var srcToDst = new Dictionary<Transform, Transform>();
for (var i = 0; i < srcBones.Length; i++) GetShadowBone(srcBones[i]); for (var i = 0; i < srcBones.Length; i++) GetShadowBone(srcBones[i]);

View File

@ -1,23 +0,0 @@
#region
using System.Collections.Generic;
using System.Runtime.CompilerServices;
#endregion
namespace nadena.dev.modular_avatar
{
internal class ObjectIdentityComparer<T> : IEqualityComparer<T>
{
public bool Equals(T x, T y)
{
return (object)x == (object)y;
}
public int GetHashCode(T obj)
{
if (obj == null) return 0;
return RuntimeHelpers.GetHashCode(obj);
}
}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: e674cbd75db24fb2b238674cd7010edb
timeCreated: 1709448428