示例#1
0
        internal void Create()
        {
            EditorUtility.DisplayProgressBar("GestureCombo", "Clearing virtual activity layer", 0f);
            var machine = ReinitializeLayerAsMachinist();

            EditorUtility.DisplayProgressBar("GestureCombo", "Creating virtual activity layer", 0f);

            var init = machine.NewState("Init", 3, 3)
                       .WithWriteDefaultsSetTo(_writeDefaultsForLogicalStates);

            var virtualActivity = new IntParameterist(SharedLayerUtils.HaiVirtualActivity);

            Statist defaultState = null;

            foreach (var layer in _comboLayers)
            {
                var virtualStageValue = layer.internalVirtualStageValue;
                var turnedOn          = machine.NewState("Enter Virtual-" + virtualStageValue, 5, 3 + virtualStageValue * 2)
                                        .WithWriteDefaultsSetTo(_writeDefaultsForLogicalStates)
                                        .Drives(virtualActivity, layer.internalVirtualStageValue);
                var turnedOff = machine.NewState("Exit Virtual-" + virtualStageValue, 5, 3 + virtualStageValue * 2 + 1)
                                .WithWriteDefaultsSetTo(_writeDefaultsForLogicalStates);

                if (!string.IsNullOrEmpty(layer.booleanParameterName))
                {
                    turnedOff.Drives(new BoolParameterist(layer.booleanParameterName), false);
                }

                var turningOn = init.TransitionsTo(turnedOn);
                foreach (var otherLayer in _comboLayers)
                {
                    if (otherLayer.booleanParameterName != "")
                    {
                        var otherLayerBool = new BoolParameterist(otherLayer.booleanParameterName);
                        var isSameLayer    = layer.booleanParameterName == otherLayer.booleanParameterName;

                        turnedOn.Drives(otherLayerBool, isSameLayer);
                        turningOn.When(otherLayerBool).Is(isSameLayer);

                        turnedOn.TransitionsTo(turnedOff)
                        .When(otherLayerBool).Is(!isSameLayer);
                    }
                }

                turnedOff.AutomaticallyMovesTo(init);

                if (virtualStageValue == 0)
                {
                    defaultState = turnedOn;
                }
            }

            // This shouldn't be null, there should always be a virtual stage value of 0
            if (defaultState != null)
            {
                // This transition needs to be created last
                init.AutomaticallyMovesTo(defaultState);
            }
        }
示例#2
0
        internal void CreateOrReplaceView()
        {
            var machinist = _animatorGenerator.CreateOrRemakeLayerAtSameIndex("Hai_J1I7T_View", 1f)
                            .WithEntryPosition(0, -3)
                            .WithExitPosition(0, -5);
            var init = machinist.NewState("Init", 1, -2)
                       .Drives(InitializedParameterist, false);
            var waiting = machinist.NewState("Waiting", 0, 0)
                          .Drives(InitializedParameterist, true);

            var assetContainer_Base = new AnimatorController();
            var assetContainer      = new AssetContainerist(assetContainer_Base)
                                      .GenerateAssetFileIn("", "GeneratedJ1I7T__", "");

            int     height      = 0;
            Statist previousOn  = init;
            Statist previousOff = null;

            foreach (var group in _manifest.Groups)
            {
                var groupParam    = new BoolParameterist(group.parameterName);
                var internalParam = new BoolParameterist("JHTIS_T_" + group.parameterName);
                var itemName      = group.parameterName;

                _animatorGenerator.CreateParamsAsNeeded(groupParam, internalParam);

                if (group.togglables.Count != 0)
                {
                    Dictionary <string, ToggleableInitialStateV2> subgroup = group.togglables
                                                                             .Where(togglable => togglable.item != null)
                                                                             .GroupBy(togglable => ResolveRelativePath(_manifest.Avatar.transform, togglable.item.transform))
                                                                             .ToDictionary(items => items.Key, items => items.First().initialState);

                    if (subgroup.Count != 0)
                    {
                        var clipForOn  = CreateClipToEnable(itemName, subgroup);
                        var clipForOff = CreateClipToDisable(itemName, subgroup);

                        var off = machinist.NewState($"{itemName} OFF", 2, height)
                                  .WithAnimation(clipForOff.Expose())
                                  .Drives(internalParam, false);
                        var on = machinist.NewState($"{itemName} ON", 3, height)
                                 .WithAnimation(clipForOn.Expose())
                                 .Drives(internalParam, true);

                        waiting.TransitionsTo(off).WithExitTimeTo(1f)
                        .When(groupParam).IsFalse()
                        .And(internalParam).IsTrue();
                        waiting.TransitionsTo(on).WithExitTimeTo(1f)
                        .When(groupParam).IsTrue()
                        .And(internalParam).IsFalse();

                        off.TransitionsTo(waiting).WithExitTimeTo(1f)
                        .When(InitializedParameterist).IsTrue();
                        on.TransitionsTo(waiting).WithExitTimeTo(1f)
                        .When(InitializedParameterist).IsTrue();

                        previousOn.TransitionsTo(off).WithExitTimeTo(1f)
                        .When(InitializedParameterist).IsFalse()
                        .And(groupParam).IsFalse();
                        previousOn.TransitionsTo(on).WithExitTimeTo(1f)
                        .When(InitializedParameterist).IsFalse()
                        .And(groupParam).IsTrue();

                        previousOff?.TransitionsTo(off).WithExitTimeTo(1f)
                        .When(InitializedParameterist).IsFalse()
                        .And(groupParam).IsFalse();
                        previousOff?.TransitionsTo(on).WithExitTimeTo(1f)
                        .When(InitializedParameterist).IsFalse()
                        .And(groupParam).IsTrue();

                        previousOff = off;
                        previousOn  = on;

                        assetContainer.Include(clipForOn);
                        assetContainer.Include(clipForOff);

                        height++;
                    }
                }
            }

            previousOn.AutomaticallyMovesTo(waiting);
            previousOff?.AutomaticallyMovesTo(waiting);

            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }