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); } }
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(); }