mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-03-03 20:34:56 +08:00
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:
parent
e63a34e2ba
commit
ee64cafe02
@ -61,7 +61,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
var grouped = ctx.Observe(target,
|
||||
t => (t.GroupedBones ?? Array.Empty<GameObject>())
|
||||
.Select(obj => obj.transform)
|
||||
.ToHashSet(new ObjectIdentityComparer<Transform>()),
|
||||
.ToHashSet(),
|
||||
(x, y) => x.SetEquals(y)
|
||||
);
|
||||
|
||||
|
@ -45,7 +45,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
var converters = context.AvatarRootObject.GetComponentsInChildren<ModularAvatarConvertConstraints>(true)
|
||||
.Select(c => c.gameObject)
|
||||
.ToHashSet(new ObjectIdentityComparer<GameObject>());
|
||||
.ToHashSet();
|
||||
if (converters.Count == 0) return;
|
||||
|
||||
var constraintGameObjects = context.AvatarRootObject.GetComponentsInChildren<IConstraint>(true)
|
||||
|
@ -5,7 +5,6 @@ using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using nadena.dev.modular_avatar.core.editor.Simulator;
|
||||
using nadena.dev.ndmf.preview;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
@ -75,7 +74,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
|
||||
ImmutableDictionary<SkinnedMeshRenderer, ImmutableList<(int, float)>>.Builder rendererStates =
|
||||
ImmutableDictionary.CreateBuilder<SkinnedMeshRenderer, ImmutableList<(int, float)>>(
|
||||
new ObjectIdentityComparer<SkinnedMeshRenderer>()
|
||||
|
||||
);
|
||||
var avatarRootTransform = avatarRoot.transform;
|
||||
|
||||
|
@ -31,7 +31,7 @@ namespace nadena.dev.modular_avatar.core.editor.ScaleAdjuster
|
||||
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>();
|
||||
|
||||
public void Clear()
|
||||
|
@ -59,7 +59,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
var scaleAdjusters = ctx.GetComponentsByType<ModularAvatarScaleAdjuster>();
|
||||
|
||||
var avatarToRenderer =
|
||||
new Dictionary<GameObject, HashSet<Renderer>>(new ObjectIdentityComparer<GameObject>());
|
||||
new Dictionary<GameObject, HashSet<Renderer>>();
|
||||
|
||||
foreach (var root in ctx.GetAvatarRoots())
|
||||
{
|
||||
@ -72,8 +72,8 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
continue; // nested avatar descriptor
|
||||
}
|
||||
|
||||
var renderers = new HashSet<Renderer>(new ObjectIdentityComparer<Renderer>());
|
||||
|
||||
var renderers = new HashSet<Renderer>();
|
||||
avatarToRenderer.Add(root, renderers);
|
||||
|
||||
foreach (var renderer in root.GetComponentsInChildren<Renderer>())
|
||||
@ -112,12 +112,12 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
private readonly Dictionary<Transform, Transform> _shadowBoneMap;
|
||||
|
||||
// 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 =
|
||||
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,
|
||||
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)
|
||||
{
|
||||
var bonesSet = new HashSet<Transform>(new ObjectIdentityComparer<Transform>());
|
||||
var bonesSet = new HashSet<Transform>();
|
||||
foreach (var (_, r) in proxyPairs)
|
||||
{
|
||||
if (r == null) continue;
|
||||
@ -248,7 +248,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
|
||||
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]);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e674cbd75db24fb2b238674cd7010edb
|
||||
timeCreated: 1709448428
|
Loading…
Reference in New Issue
Block a user