private void CreateAvatarMaskAssetIfNecessary(ComboGestureCompiler compiler)
        {
            if (compiler.generatedAvatarMask != null)
            {
                return;
            }

            var folderToCreateAssetIn = ResolveFolderToCreateNeutralizedAssetsIn(compiler.folderToGenerateNeutralizedAssetsIn, compiler.animatorController);
            var mask = new AvatarMask();

            AssetDatabase.CreateAsset(mask, folderToCreateAssetIn + "/GeneratedCGEMask__" + DateTime.Now.ToString("yyyy'-'MM'-'dd'_'HHmmss") + ".asset");
            compiler.generatedAvatarMask = mask;
        }
Пример #2
0
        public ComboGestureCompilerInternal(
            ComboGestureCompiler compiler,
            AssetContainer assetContainer)
        {
            _comboLayers         = compiler.comboLayers;
            _parameterGeneration = _comboLayers.Count <= 1 ? ParameterGeneration.Unique : (compiler.parameterMode == ParameterMode.SingleInt ? ParameterGeneration.UserDefinedActivity : ParameterGeneration.VirtualActivity);
            switch (_parameterGeneration)
            {
            case ParameterGeneration.Unique:
                _activityStageName = null;
                break;

            case ParameterGeneration.UserDefinedActivity:
                _activityStageName = compiler.activityStageName;
                break;

            case ParameterGeneration.VirtualActivity:
                _activityStageName = SharedLayerUtils.HaiVirtualActivity;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            _animatorController             = (AnimatorController)compiler.animatorController;
            _gesturePlayableLayerController = compiler.gesturePlayableLayerController as AnimatorController;
            _customEmptyClip = compiler.customEmptyClip;
            _analogBlinkingUpperThreshold = compiler.analogBlinkingUpperThreshold;
            _featuresToggles = (compiler.doNotGenerateBlinkingOverrideLayer ? FeatureToggles.DoNotGenerateBlinkingOverrideLayer : 0)
                               | (compiler.doNotGenerateLipsyncOverrideLayer ? FeatureToggles.DoNotGenerateLipsyncOverrideLayer : 0)
                               | (compiler.doNotGenerateWeightCorrectionLayer ? FeatureToggles.DoNotGenerateWeightCorrectionLayer : 0)
                               | (compiler.doNotFixSingleKeyframes ? FeatureToggles.DoNotFixSingleKeyframes : 0);
            _conflictPrevention = ConflictPrevention.OfFxLayer(compiler.writeDefaultsRecommendationMode);
            _conflictPreventionTempGestureLayer = ConflictPrevention.OfGestureLayer(compiler.writeDefaultsRecommendationModeGesture, compiler.gestureLayerTransformCapture);
            _compilerConflictFxLayerMode        = compiler.conflictFxLayerMode;
            _compilerIgnoreParamList            = compiler.ignoreParamList;
            _compilerFallbackParamList          = compiler.fallbackParamList;
            _avatarDescriptor           = compiler.avatarDescriptor;
            _expressionsAvatarMask      = compiler.expressionsAvatarMask ? compiler.expressionsAvatarMask : AssetDatabase.LoadAssetAtPath <AvatarMask>(SharedLayerUtils.FxPlayableLayerAvatarMaskPath);
            _logicalAvatarMask          = compiler.logicalAvatarMask ? compiler.logicalAvatarMask : AssetDatabase.LoadAssetAtPath <AvatarMask>(SharedLayerUtils.FxPlayableLayerAvatarMaskPath);
            _weightCorrectionAvatarMask = compiler.weightCorrectionAvatarMask ? compiler.weightCorrectionAvatarMask : AssetDatabase.LoadAssetAtPath <AvatarMask>(SharedLayerUtils.FxPlayableLayerAvatarMaskPath);
            _gesturePlayableLayerExpressionsAvatarMask = compiler.gesturePlayableLayerExpressionsAvatarMask ? compiler.gesturePlayableLayerExpressionsAvatarMask : AssetDatabase.LoadAssetAtPath <AvatarMask>(GesturePlayableLayerAvatarMaskPath);
            _gesturePlayableLayerTechnicalAvatarMask   = compiler.gesturePlayableLayerTechnicalAvatarMask ? compiler.gesturePlayableLayerTechnicalAvatarMask : AssetDatabase.LoadAssetAtPath <AvatarMask>(GesturePlayableLayerAvatarMaskPath);
            _integrateLimitedLipsync    = false; // For now, Limited Lipsync is disabled regardless of the compiler value
            _limitedLipsync             = compiler.lipsyncForWideOpenMouth;
            _assetContainer             = assetContainer;
            _useGestureWeightCorrection = compiler.WillUseGestureWeightCorrection();
            _useSmoothing = _useGestureWeightCorrection;
        }
        private void MaskRemovalUi(ComboGestureCompiler compiler)
        {
            var isMaskUsed = compiler.animatorController != null && ((AnimatorController)compiler.animatorController).layers.Any(layer => layer.avatarMask == compiler.generatedAvatarMask);

            EditorGUI.BeginDisabledGroup(!isMaskUsed);
            if (GUILayout.Button(CgeLocale.CGEC_Remove_applied_masks))
            {
                DoRemoveAppliedMasks(compiler);
            }

            EditorGUI.EndDisabledGroup();

            EditorGUI.BeginDisabledGroup(isMaskUsed);
            if (GUILayout.Button(CgeLocale.CGEC_Unbind_Asset_container))
            {
                DoRemoveAppliedMasksAndAssetContainer(compiler);
            }

            EditorGUI.EndDisabledGroup();
        }
 private static AssetContainer CreateContainerIfNotExists(ComboGestureCompiler compiler, string folderToCreateAssetIn)
 {
     return(compiler.assetContainer == null?AssetContainer.CreateNew(folderToCreateAssetIn) : AssetContainer.FromExisting(compiler.assetContainer));
 }
 private void DoRemoveAppliedMasksAndAssetContainer(ComboGestureCompiler compiler)
 {
     new CgeMaskApplicator(AsCompiler().animatorController, compiler.generatedAvatarMask).RemoveAppliedMask();
     generatedAvatarMask.objectReferenceValue = null;
 }
 private void DoRemoveAppliedMasks(ComboGestureCompiler compiler)
 {
     new CgeMaskApplicator(AsCompiler().animatorController, compiler.generatedAvatarMask).RemoveAppliedMask();
 }
 private void AddMissingMasks(ComboGestureCompiler compiler)
 {
     CreateAvatarMaskAssetIfNecessary(compiler);
     new CgeMaskApplicator(compiler.animatorController, compiler.generatedAvatarMask).AddMissingMasks();
     new CgeMaskApplicator(compiler.animatorController, compiler.generatedAvatarMask).UpdateMask();
 }