コード例 #1
0
 public RadialPage(RadialMenu radialMenu, VRCExpressionsMenu menu, Vrc3Param param, float value)
 {
     _radialMenu = radialMenu;
     _menu       = menu;
     Param       = param;
     Value       = value;
 }
コード例 #2
0
        private void AvatarParameterDriverSettings(VRC_AvatarParameterDriver driver, Animator animator)
        {
            if (!_hooked || animator != AvatarAnimator)
            {
                return;
            }

            foreach (var parameter in driver.parameters)
            {
                var param = RadialMenu.GetParam(parameter.name);
                if (param == null)
                {
                    continue;
                }

                switch (parameter.type)
                {
                case VRC_AvatarParameterDriver.ChangeType.Set:
                    param.Set(RadialMenu, parameter.value);
                    break;

                case VRC_AvatarParameterDriver.ChangeType.Add:
                    param.Add(RadialMenu, parameter.value);
                    break;

                case VRC_AvatarParameterDriver.ChangeType.Random:
                    param.Random(RadialMenu, parameter.valueMin, parameter.valueMax, parameter.chance);
                    break;

                default: throw new ArgumentOutOfRangeException();
                }
            }
        }
コード例 #3
0
        public override void EditorContent(VisualElement element)
        {
            GUILayout.BeginHorizontal();

            GUILayout.BeginVertical();
            GUILayout.Label("Left Hand", GestureManagerStyles.GuiHandTitle);
            Manager.left = GestureManagerEditor.OnCheckBoxGuiHand(Manager, GestureHand.Left, Manager.left, position => 0);
            GUILayout.EndVertical();

            GUILayout.BeginVertical();
            GUILayout.Label("Right Hand", GestureManagerStyles.GuiHandTitle);
            Manager.right = GestureManagerEditor.OnCheckBoxGuiHand(Manager, GestureHand.Right, Manager.right, position => 0);
            GUILayout.EndVertical();

            GUILayout.EndHorizontal();

            GUILayout.Space(4);
            GmgLayoutHelper.Divisor(1);
            GUILayout.Label("Radial Menu", GestureManagerStyles.GuiHandTitle);

            GUILayout.Label("", GUILayout.ExpandWidth(true), GUILayout.Height(RadialMenu.Size));
            var extraSize = RadialMenu.Render(element, GmgLayoutHelper.GetLastRect(ref _rect)) - RadialMenu.Size;

            if (extraSize > 0)
            {
                GUILayout.Label("", GUILayout.ExpandWidth(true), GUILayout.Height(extraSize));
            }

            if (_radialDescription != null)
            {
                ShowRadialDescription();
            }
        }
コード例 #4
0
 public static RadialMenuItem RadialFromParam(RadialMenu menu, string name, Vrc3Param param)
 {
     return(new RadialMenuControl(menu, name, null, ControlType.RadialPuppet, 1f, null, new[] { param }, null, null));
 }
コード例 #5
0
            public static RadialMenuControl AxisFromParams(RadialMenu menu, string name, Vrc3Param xParam, Vrc3Param yParam)
            {
                var subLabels = new VRCExpressionsMenu.Control.Label[4];

                return(new RadialMenuControl(menu, name, null, ControlType.TwoAxisPuppet, 1f, null, new[] { xParam, yParam }, null, subLabels));
            }
コード例 #6
0
 public static RadialMenuControl ParamStateToggle(RadialMenu menu, string name, Vrc3Param param, float activeValue)
 {
     return(new RadialMenuControl(menu, name, null, ControlType.Toggle, activeValue, param, new Vrc3Param[0], null, null));
 }
コード例 #7
0
 public static RadialMenuControl ToggleFromParam(RadialMenu menu, string name, Vrc3Param param)
 {
     return(ParamStateToggle(menu, name, param, 1f));
 }
コード例 #8
0
 public RadialPage(RadialMenu radialMenu, IReadOnlyList <RadialMenuItem> controls)
 {
     _radialMenu = radialMenu;
     _controls   = controls;
 }
コード例 #9
0
        public override void InitForAvatar()
        {
            StartVrcHooks();

            AvatarAnimator.applyRootMotion           = false;
            AvatarAnimator.runtimeAnimatorController = null;
            AvatarAnimator.updateMode  = AnimatorUpdateMode.Normal;
            AvatarAnimator.cullingMode = AnimatorCullingMode.CullCompletely;
            DestroyGraphs();

            var layerList = _avatarDescriptor.baseAnimationLayers.ToList();

            layerList.AddRange(_avatarDescriptor.specialAnimationLayers);
            layerList.Sort(ModuleVrc3Styles.Data.LayerSort);

            _playableGraph = PlayableGraph.Create("Gesture Manager 3.1");
            var externalOutput = AnimationPlayableOutput.Create(_playableGraph, "Gesture Manager", AvatarAnimator);
            var playableMixer  = AnimationLayerMixerPlayable.Create(_playableGraph, layerList.Count + 1);

            externalOutput.SetSourcePlayable(playableMixer);

            _fromBlend.Clear();
            _avatarClips.Clear();
            _weightControllers      = new RadialWeightController[layerList.Count];
            _humanAnimatorPlayables = new AnimatorControllerPlayable[layerList.Count];

            for (var i = 0; i < layerList.Count; i++)
            {
                var vrcAnimLayer = layerList[i];
                var iGraph       = i + 1;

                if (vrcAnimLayer.animatorController)
                {
                    foreach (var clip in vrcAnimLayer.animatorController.animationClips)
                    {
                        _avatarClips.Add(clip);
                    }
                }

                var isFx     = vrcAnimLayer.type == VRCAvatarDescriptor.AnimLayerType.FX;
                var isAdd    = vrcAnimLayer.type == VRCAvatarDescriptor.AnimLayerType.Additive;
                var isPose   = vrcAnimLayer.type == VRCAvatarDescriptor.AnimLayerType.IKPose || vrcAnimLayer.type == VRCAvatarDescriptor.AnimLayerType.TPose;
                var isAction = vrcAnimLayer.type == VRCAvatarDescriptor.AnimLayerType.Sitting || vrcAnimLayer.type == VRCAvatarDescriptor.AnimLayerType.Action;
                var limit    = isPose || isAction;

                var controller = vrcAnimLayer.animatorController ? vrcAnimLayer.animatorController : ModuleVrc3Styles.Data.ControllerOf[vrcAnimLayer.type];
                var mask       = vrcAnimLayer.isDefault || isFx ? ModuleVrc3Styles.Data.MaskOf[vrcAnimLayer.type] : vrcAnimLayer.mask;

                if (!controller)
                {
                    continue;
                }

                _humanAnimatorPlayables[i] = AnimatorControllerPlayable.Create(_playableGraph, Vrc3ProxyOverride.OverrideController(controller));
                _weightControllers[i]      = new RadialWeightController(playableMixer, iGraph);
                for (var j = 0; j < _humanAnimatorPlayables[i].GetLayerCount(); j++)
                {
                    _humanAnimatorPlayables[i].SetLayerWeight(j, 1f);
                }

                playableMixer.ConnectInput(iGraph, _humanAnimatorPlayables[i], 0, 1);
                _fromBlend[vrcAnimLayer.type] = _weightControllers[i];

                if (limit)
                {
                    playableMixer.SetInputWeight(iGraph, 0f);
                }
                if (isAdd)
                {
                    playableMixer.SetLayerAdditive((uint)iGraph, true);
                }
                if (mask)
                {
                    playableMixer.SetLayerMaskFromAvatarMask((uint)iGraph, mask);
                }
            }

            _playableGraph.SetTimeUpdateMode(DirectorUpdateMode.GameTime);
            _playableGraph.Play();
            _playableGraph.Evaluate(0f);

            RadialMenu.Set(AvatarAnimator, Menu, Parameters, _humanAnimatorPlayables);
            RadialMenu.GetParam("TrackingType")?.InternalSet(1f);
            RadialMenu.GetParam("Upright")?.InternalSet(1f);
            RadialMenu.GetParam("Grounded")?.InternalSet(1f);
            RadialMenu.GetParam("VelocityX")?.Amplify(-7f);
            RadialMenu.GetParam("VelocityZ")?.Amplify(7f);
            RadialMenu.GetParam("AvatarVersion")?.InternalSet(3f);
            RadialMenu.GetParam("Seated")?.OnChange(OnSeatedModeChange);
        }
コード例 #10
0
 private void ForgetAvatar()
 {
     AvatarAnimator.Rebind();
     RadialMenu.ForgetParams();
     DestroyGraphs();
 }