2023-11-10 14:37:56 +08:00
|
|
|
|
#if MA_VRCSDK3_AVATARS
|
|
|
|
|
|
|
|
|
|
using nadena.dev.modular_avatar.core.menu;
|
2023-02-25 17:22:24 +08:00
|
|
|
|
using UnityEngine;
|
2023-02-25 15:45:24 +08:00
|
|
|
|
|
|
|
|
|
namespace nadena.dev.modular_avatar.core
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The menu install target includes the controls of the target menu installer at the point of reference.
|
|
|
|
|
/// Notably, this can include multiple controls.
|
|
|
|
|
///
|
|
|
|
|
/// One tricky aspect of this feature is that we need to disambiguate when a menu installer also cites a target menu.
|
|
|
|
|
/// Generally, if an installer is targeted by any menu install target (even if - especially if - disabled), we
|
|
|
|
|
/// ignore its install target configuration entirely.
|
|
|
|
|
///
|
|
|
|
|
/// We can also end up with a loop between install targets; in this case, we break the loop at an arbitrary point.
|
|
|
|
|
/// </summary>
|
2023-02-25 17:22:24 +08:00
|
|
|
|
[AddComponentMenu("Modular Avatar/MA Menu Install Target")]
|
2023-10-11 19:40:26 +08:00
|
|
|
|
[HelpURL("https://modular-avatar.nadena.dev/docs/reference/menu-install-target?lang=auto")]
|
2023-02-25 15:45:24 +08:00
|
|
|
|
internal class ModularAvatarMenuInstallTarget : MenuSourceComponent
|
|
|
|
|
{
|
|
|
|
|
public ModularAvatarMenuInstaller installer;
|
|
|
|
|
|
|
|
|
|
public override void Visit(NodeContext context)
|
|
|
|
|
{
|
|
|
|
|
context.PushNode(installer);
|
|
|
|
|
}
|
2023-08-05 14:47:03 +08:00
|
|
|
|
|
2023-09-24 13:44:07 +08:00
|
|
|
|
public override void ResolveReferences()
|
2023-08-05 14:47:03 +08:00
|
|
|
|
{
|
|
|
|
|
// no-op
|
|
|
|
|
}
|
2023-02-25 15:45:24 +08:00
|
|
|
|
}
|
2023-11-10 14:37:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|