Skip to content

Commit 4ec406f

Browse files
committed
fix for TTT
1 parent fc3cfcb commit 4ec406f

File tree

7 files changed

+69
-12
lines changed

7 files changed

+69
-12
lines changed

Components/Editor/AvatarMenuCreatorPlugin.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ public class AvatarMenuCreatorPlugin : Plugin<AvatarMenuCreatorPlugin>
1414

1515
protected override void Configure()
1616
{
17-
InPhase(BuildPhase.Generating).BeforePlugin("nadena.dev.modular-avatar").Run("AvatarMenuCreatorForMA", ctx =>
17+
InPhase(BuildPhase.Transforming).BeforePlugin("nadena.dev.modular-avatar").AfterPlugin("net.rs64.tex-trans-tool").Run("AvatarMenuCreatorForMA", ctx =>
1818
{
1919
var creators = ctx.AvatarRootTransform.GetComponentsInChildren<AvatarMenuCreatorBase>(true);
2020
foreach (var creator in creators)
2121
{
2222
if (!creator.IsEffective) continue;
23-
CreateAvatarMenuBase.GetCreateAvatarMenu(ctx.AvatarRootTransform, creator.AvatarMenu).CreateAssets(creator.name).StoreAssets(creator.gameObject, false);
23+
CreateAvatarMenuBase.GetCreateAvatarMenu(ctx.AvatarRootTransform, creator.AvatarMenu).CreateAssets(creator.name, buildContext: ctx).StoreAssets(creator.gameObject, false);
2424
UnityEngine.Object.DestroyImmediate(creator);
2525
}
2626
});

Core/ToggleMaterial.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,22 +97,28 @@ public ToggleMaterial SetProp(string name, object value)
9797
public bool NeedInactivateEndKey { get => 1f - InactivateChangeRate > 0; }
9898

9999
#if UNITY_EDITOR
100-
public ObjectReferenceKeyframe[] ActiveCurve() => new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = Active } };
101-
public ObjectReferenceKeyframe[] InactiveCurve() => new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = Inactive } };
100+
[NonSerialized]
101+
public Material ReplacedActive;
102+
[NonSerialized]
103+
public Material ReplacedInactive;
104+
Material EffectiveActive => ReplacedActive != null ? ReplacedActive : Active;
105+
Material EffectiveInactive => ReplacedInactive != null ? ReplacedInactive : Inactive;
106+
public ObjectReferenceKeyframe[] ActiveCurve() => new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = EffectiveActive } };
107+
public ObjectReferenceKeyframe[] InactiveCurve() => new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = EffectiveInactive } };
102108
public ObjectReferenceKeyframe[] ActivateCurve(float transitionSeconds)
103109
{
104110
var curve = new List<ObjectReferenceKeyframe>();
105-
if (NeedActivateStartKey) curve.Add(new ObjectReferenceKeyframe { time = 0, value = Inactive });
106-
curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds * ActivateChangeRate, value = Active });
107-
if (NeedActivateEndKey) curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds, value = Active });
111+
if (NeedActivateStartKey) curve.Add(new ObjectReferenceKeyframe { time = 0, value = EffectiveInactive });
112+
curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds * ActivateChangeRate, value = EffectiveActive });
113+
if (NeedActivateEndKey) curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds, value = EffectiveActive });
108114
return curve.ToArray();
109115
}
110116
public ObjectReferenceKeyframe[] InactivateCurve(float transitionSeconds)
111117
{
112118
var curve = new List<ObjectReferenceKeyframe>();
113-
if (NeedInactivateStartKey) curve.Add(new ObjectReferenceKeyframe { time = 0, value = Active });
114-
curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds * InactivateChangeRate, value = Inactive });
115-
if (NeedInactivateEndKey) curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds, value = Inactive });
119+
if (NeedInactivateStartKey) curve.Add(new ObjectReferenceKeyframe { time = 0, value = EffectiveActive });
120+
curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds * InactivateChangeRate, value = EffectiveInactive });
121+
if (NeedInactivateEndKey) curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds, value = EffectiveInactive });
116122
return curve.ToArray();
117123
}
118124
#endif

Editor/AvatarMenuCreatorForMA.Editor.asmdef

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131
"expression": "[1.3.0,2)",
3232
"define": "NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF_LOCALIZATION"
3333
},
34+
{
35+
"name": "nadena.dev.ndmf",
36+
"expression": "[1.3.0,2)",
37+
"define": "NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF_OBJECT_REGISTRY"
38+
},
3439
{
3540
"name": "nadena.dev.modular-avatar",
3641
"expression": "[1.0.0,1.5.0)",

Editor/CreateAvatarChooseMenu.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ public class CreateAvatarChooseMenu : CreateAvatarMenuBase
1717
AvatarChooseMenu AvatarMenu;
1818
public CreateAvatarChooseMenu(Transform avatarRoot, AvatarChooseMenu avatarChooseMenu) : base(avatarRoot) => AvatarMenu = avatarChooseMenu;
1919

20+
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF
21+
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null, nadena.dev.ndmf.BuildContext buildContext = null)
22+
#else
2023
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
24+
#endif
2125
{
2226
var matchGameObjects = new HashSet<string>(children ?? AvatarMenu.GetStoredChildren());
2327
var parameterName = string.IsNullOrEmpty(AvatarMenu.ParameterName) ? baseName : AvatarMenu.ParameterName;
@@ -40,7 +44,19 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
4044
var curveName = $"m_Materials.Array.data[{index}]";
4145
for (var i = 0; i < AvatarMenu.ChooseCount; ++i)
4246
{
43-
AnimationUtility.SetObjectReferenceCurve(choices[i], EditorCurveBinding.PPtrCurve(curvePath, GetRendererTypeByPath(child), curveName), new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = value.ContainsKey(i) ? value[i] : null } });
47+
var material = value.ContainsKey(i) ? value[i] : null;
48+
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF_OBJECT_REGISTRY
49+
if (buildContext != null && material != null)
50+
{
51+
var renderer = GetByPath(child).GetComponent<Renderer>();
52+
var currentMaterial = renderer != null && renderer.sharedMaterials.Length > index ? renderer.sharedMaterials[index] : null;
53+
if (nadena.dev.ndmf.ObjectRegistry.GetReference(currentMaterial).TryResolve(buildContext.ErrorReport, out var originalMaterial) && material == originalMaterial)
54+
{
55+
material = currentMaterial;
56+
}
57+
}
58+
#endif
59+
AnimationUtility.SetObjectReferenceCurve(choices[i], EditorCurveBinding.PPtrCurve(curvePath, GetRendererTypeByPath(child), curveName), new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = material } });
4460
}
4561
}
4662
foreach (var (child, name) in AvatarMenu.ChooseBlendShapes.Keys)

Editor/CreateAvatarMenuBase.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ public static CreateAvatarMenuBase GetCreateAvatarMenu<T>(Transform avatarRoot,
2929

3030
protected CreateAvatarMenuBase(Transform avatarRoot) => AvatarRoot = avatarRoot;
3131

32+
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF
33+
public abstract CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null, nadena.dev.ndmf.BuildContext buildContext = null);
34+
#else
3235
public abstract CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null);
36+
#endif
3337

3438
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF && !NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NO_MENU_MA
3539
public static AvatarMenuCreatorBase GetOrAddMenuCreatorComponent(GameObject obj, AvatarMenuBase avatarMenu, bool addMenuInstaller)
@@ -67,7 +71,7 @@ public static AvatarMenuCreatorBase GetOrAddMenuCreatorComponentOnly(GameObject
6771
}
6872
#endif
6973

70-
Transform GetByPath(string path)
74+
protected Transform GetByPath(string path)
7175
{
7276
return AvatarRoot.Find(path);
7377
}

Editor/CreateAvatarRadialMenu.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ public class CreateAvatarRadialMenu : CreateAvatarMenuBase
1515
AvatarRadialMenu AvatarMenu;
1616
public CreateAvatarRadialMenu(Transform avatarRoot, AvatarRadialMenu avatarRadialMenu) : base(avatarRoot) => AvatarMenu = avatarRadialMenu;
1717

18+
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF
19+
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null, nadena.dev.ndmf.BuildContext buildContext = null)
20+
#else
1821
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
22+
#endif
1923
{
2024
var matchGameObjects = new HashSet<string>(children ?? AvatarMenu.GetStoredChildren());
2125
var parameterName = string.IsNullOrEmpty(AvatarMenu.ParameterName) ? baseName : AvatarMenu.ParameterName;

Editor/CreateAvatarToggleMenu.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ public class CreateAvatarToggleMenu : CreateAvatarMenuBase
1515
AvatarToggleMenu AvatarMenu;
1616
public CreateAvatarToggleMenu(Transform avatarRoot, AvatarToggleMenu avatarToggleMenu) : base(avatarRoot) => AvatarMenu = avatarToggleMenu;
1717

18+
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF
19+
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null, nadena.dev.ndmf.BuildContext buildContext = null)
20+
#else
1821
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
22+
#endif
1923
{
2024
var matchGameObjects = new HashSet<string>(children ?? AvatarMenu.GetStoredChildren());
2125
var parameterName = string.IsNullOrEmpty(AvatarMenu.ParameterName) ? baseName : AvatarMenu.ParameterName;
@@ -58,6 +62,24 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
5862
var curvePath = child;
5963
var curveName = $"m_Materials.Array.data[{index}]";
6064
var binding = EditorCurveBinding.PPtrCurve(curvePath, GetRendererTypeByPath(child), curveName);
65+
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF_OBJECT_REGISTRY
66+
if (buildContext != null && (value.Active != null || value.Inactive != null))
67+
{
68+
var renderer = GetByPath(child).GetComponent<Renderer>();
69+
var currentMaterial = renderer != null && renderer.sharedMaterials.Length > index ? renderer.sharedMaterials[index] : null;
70+
if (nadena.dev.ndmf.ObjectRegistry.GetReference(currentMaterial).TryResolve(buildContext.ErrorReport, out var originalMaterial))
71+
{
72+
if (value.Active != null && value.Active == originalMaterial)
73+
{
74+
value.ReplacedActive = currentMaterial;
75+
}
76+
if (value.Inactive != null && value.Inactive == originalMaterial)
77+
{
78+
value.ReplacedInactive = currentMaterial;
79+
}
80+
}
81+
}
82+
#endif
6183
if (value.UseActive) AnimationUtility.SetObjectReferenceCurve(active, binding, value.ActiveCurve());
6284
if (value.UseInactive) AnimationUtility.SetObjectReferenceCurve(inactive, binding, value.InactiveCurve());
6385
if (transitionSeconds > 0)

0 commit comments

Comments
 (0)