Skip to content

fix for TTT #41

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Components/Editor/AvatarMenuCreatorPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ public class AvatarMenuCreatorPlugin : Plugin<AvatarMenuCreatorPlugin>

protected override void Configure()
{
InPhase(BuildPhase.Generating).BeforePlugin("nadena.dev.modular-avatar").Run("AvatarMenuCreatorForMA", ctx =>
InPhase(BuildPhase.Transforming).BeforePlugin("nadena.dev.modular-avatar").AfterPlugin("net.rs64.tex-trans-tool").Run("AvatarMenuCreatorForMA", ctx =>
{
var creators = ctx.AvatarRootTransform.GetComponentsInChildren<AvatarMenuCreatorBase>(true);
foreach (var creator in creators)
{
if (!creator.IsEffective) continue;
CreateAvatarMenuBase.GetCreateAvatarMenu(ctx.AvatarRootTransform, creator.AvatarMenu).CreateAssets(creator.name).StoreAssets(creator.gameObject, false);
CreateAvatarMenuBase.GetCreateAvatarMenu(ctx.AvatarRootTransform, creator.AvatarMenu).CreateAssets(creator.name, buildContext: ctx).StoreAssets(creator.gameObject, false);
UnityEngine.Object.DestroyImmediate(creator);
}
});
Expand Down
22 changes: 14 additions & 8 deletions Core/ToggleMaterial.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,22 +97,28 @@ public ToggleMaterial SetProp(string name, object value)
public bool NeedInactivateEndKey { get => 1f - InactivateChangeRate > 0; }

#if UNITY_EDITOR
public ObjectReferenceKeyframe[] ActiveCurve() => new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = Active } };
public ObjectReferenceKeyframe[] InactiveCurve() => new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = Inactive } };
[NonSerialized]
public Material ReplacedActive;
[NonSerialized]
public Material ReplacedInactive;
Material EffectiveActive => ReplacedActive != null ? ReplacedActive : Active;
Material EffectiveInactive => ReplacedInactive != null ? ReplacedInactive : Inactive;
public ObjectReferenceKeyframe[] ActiveCurve() => new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = EffectiveActive } };
public ObjectReferenceKeyframe[] InactiveCurve() => new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = EffectiveInactive } };
public ObjectReferenceKeyframe[] ActivateCurve(float transitionSeconds)
{
var curve = new List<ObjectReferenceKeyframe>();
if (NeedActivateStartKey) curve.Add(new ObjectReferenceKeyframe { time = 0, value = Inactive });
curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds * ActivateChangeRate, value = Active });
if (NeedActivateEndKey) curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds, value = Active });
if (NeedActivateStartKey) curve.Add(new ObjectReferenceKeyframe { time = 0, value = EffectiveInactive });
curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds * ActivateChangeRate, value = EffectiveActive });
if (NeedActivateEndKey) curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds, value = EffectiveActive });
return curve.ToArray();
}
public ObjectReferenceKeyframe[] InactivateCurve(float transitionSeconds)
{
var curve = new List<ObjectReferenceKeyframe>();
if (NeedInactivateStartKey) curve.Add(new ObjectReferenceKeyframe { time = 0, value = Active });
curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds * InactivateChangeRate, value = Inactive });
if (NeedInactivateEndKey) curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds, value = Inactive });
if (NeedInactivateStartKey) curve.Add(new ObjectReferenceKeyframe { time = 0, value = EffectiveActive });
curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds * InactivateChangeRate, value = EffectiveInactive });
if (NeedInactivateEndKey) curve.Add(new ObjectReferenceKeyframe { time = transitionSeconds, value = EffectiveInactive });
return curve.ToArray();
}
#endif
Expand Down
5 changes: 5 additions & 0 deletions Editor/AvatarMenuCreatorForMA.Editor.asmdef
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@
"expression": "[1.3.0,2)",
"define": "NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF_LOCALIZATION"
},
{
"name": "nadena.dev.ndmf",
"expression": "[1.3.0,2)",
"define": "NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF_OBJECT_REGISTRY"
},
{
"name": "nadena.dev.modular-avatar",
"expression": "[1.0.0,1.5.0)",
Expand Down
18 changes: 17 additions & 1 deletion Editor/CreateAvatarChooseMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ public class CreateAvatarChooseMenu : CreateAvatarMenuBase
AvatarChooseMenu AvatarMenu;
public CreateAvatarChooseMenu(Transform avatarRoot, AvatarChooseMenu avatarChooseMenu) : base(avatarRoot) => AvatarMenu = avatarChooseMenu;

#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null, nadena.dev.ndmf.BuildContext buildContext = null)
#else
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
#endif
{
var matchGameObjects = new HashSet<string>(children ?? AvatarMenu.GetStoredChildren());
var parameterName = string.IsNullOrEmpty(AvatarMenu.ParameterName) ? baseName : AvatarMenu.ParameterName;
Expand All @@ -40,7 +44,19 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
var curveName = $"m_Materials.Array.data[{index}]";
for (var i = 0; i < AvatarMenu.ChooseCount; ++i)
{
AnimationUtility.SetObjectReferenceCurve(choices[i], EditorCurveBinding.PPtrCurve(curvePath, GetRendererTypeByPath(child), curveName), new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = value.ContainsKey(i) ? value[i] : null } });
var material = value.ContainsKey(i) ? value[i] : null;
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF_OBJECT_REGISTRY
if (buildContext != null && material != null)
{
var renderer = GetByPath(child).GetComponent<Renderer>();
var currentMaterial = renderer != null && renderer.sharedMaterials.Length > index ? renderer.sharedMaterials[index] : null;
if (nadena.dev.ndmf.ObjectRegistry.GetReference(currentMaterial).TryResolve(buildContext.ErrorReport, out var originalMaterial) && material == originalMaterial)
{
material = currentMaterial;
}
}
#endif
AnimationUtility.SetObjectReferenceCurve(choices[i], EditorCurveBinding.PPtrCurve(curvePath, GetRendererTypeByPath(child), curveName), new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = material } });
}
}
foreach (var (child, name) in AvatarMenu.ChooseBlendShapes.Keys)
Expand Down
6 changes: 5 additions & 1 deletion Editor/CreateAvatarMenuBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ public static CreateAvatarMenuBase GetCreateAvatarMenu<T>(Transform avatarRoot,

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

#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF
public abstract CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null, nadena.dev.ndmf.BuildContext buildContext = null);
#else
public abstract CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null);
#endif

#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF && !NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NO_MENU_MA
public static AvatarMenuCreatorBase GetOrAddMenuCreatorComponent(GameObject obj, AvatarMenuBase avatarMenu, bool addMenuInstaller)
Expand Down Expand Up @@ -67,7 +71,7 @@ public static AvatarMenuCreatorBase GetOrAddMenuCreatorComponentOnly(GameObject
}
#endif

Transform GetByPath(string path)
protected Transform GetByPath(string path)
{
return AvatarRoot.Find(path);
}
Expand Down
4 changes: 4 additions & 0 deletions Editor/CreateAvatarRadialMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ public class CreateAvatarRadialMenu : CreateAvatarMenuBase
AvatarRadialMenu AvatarMenu;
public CreateAvatarRadialMenu(Transform avatarRoot, AvatarRadialMenu avatarRadialMenu) : base(avatarRoot) => AvatarMenu = avatarRadialMenu;

#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null, nadena.dev.ndmf.BuildContext buildContext = null)
#else
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
#endif
{
var matchGameObjects = new HashSet<string>(children ?? AvatarMenu.GetStoredChildren());
var parameterName = string.IsNullOrEmpty(AvatarMenu.ParameterName) ? baseName : AvatarMenu.ParameterName;
Expand Down
22 changes: 22 additions & 0 deletions Editor/CreateAvatarToggleMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ public class CreateAvatarToggleMenu : CreateAvatarMenuBase
AvatarToggleMenu AvatarMenu;
public CreateAvatarToggleMenu(Transform avatarRoot, AvatarToggleMenu avatarToggleMenu) : base(avatarRoot) => AvatarMenu = avatarToggleMenu;

#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null, nadena.dev.ndmf.BuildContext buildContext = null)
#else
public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
#endif
{
var matchGameObjects = new HashSet<string>(children ?? AvatarMenu.GetStoredChildren());
var parameterName = string.IsNullOrEmpty(AvatarMenu.ParameterName) ? baseName : AvatarMenu.ParameterName;
Expand Down Expand Up @@ -58,6 +62,24 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
var curvePath = child;
var curveName = $"m_Materials.Array.data[{index}]";
var binding = EditorCurveBinding.PPtrCurve(curvePath, GetRendererTypeByPath(child), curveName);
#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF_OBJECT_REGISTRY
if (buildContext != null && (value.Active != null || value.Inactive != null))
{
var renderer = GetByPath(child).GetComponent<Renderer>();
var currentMaterial = renderer != null && renderer.sharedMaterials.Length > index ? renderer.sharedMaterials[index] : null;
if (nadena.dev.ndmf.ObjectRegistry.GetReference(currentMaterial).TryResolve(buildContext.ErrorReport, out var originalMaterial))
{
if (value.Active != null && value.Active == originalMaterial)
{
value.ReplacedActive = currentMaterial;
}
if (value.Inactive != null && value.Inactive == originalMaterial)
{
value.ReplacedInactive = currentMaterial;
}
}
}
#endif
if (value.UseActive) AnimationUtility.SetObjectReferenceCurve(active, binding, value.ActiveCurve());
if (value.UseInactive) AnimationUtility.SetObjectReferenceCurve(inactive, binding, value.InactiveCurve());
if (transitionSeconds > 0)
Expand Down
Loading