예제 #1
0
        public static IPhonemeGetter?GetGetter(this IFaceFxPhonemesGetter faceFx, Target target)
        {
            switch (target)
            {
            case FaceFxPhonemes.Target.Aah:
                return(faceFx.Aah_LipBigAah);

            case FaceFxPhonemes.Target.BigAah:
                return(faceFx.BigAah_LipDST);

            case FaceFxPhonemes.Target.BMP:
                return(faceFx.BMP_LipEee);

            case FaceFxPhonemes.Target.ChJSh:
                return(faceFx.ChJSh_LipFV);

            case FaceFxPhonemes.Target.DST:
                return(faceFx.DST_LipK);

            case FaceFxPhonemes.Target.Eee:
                return(faceFx.Eee_LipL);

            case FaceFxPhonemes.Target.Eh:
                return(faceFx.Eh_LipR);

            case FaceFxPhonemes.Target.FV:
                return(faceFx.FV_LipTh);

            case FaceFxPhonemes.Target.I:
                return(faceFx.I);

            case FaceFxPhonemes.Target.K:
                return(faceFx.K);

            case FaceFxPhonemes.Target.N:
                return(faceFx.N);

            case FaceFxPhonemes.Target.Oh:
                return(faceFx.Oh);

            case FaceFxPhonemes.Target.OohQ:
                return(faceFx.OohQ);

            case FaceFxPhonemes.Target.R:
                return(faceFx.R);

            case FaceFxPhonemes.Target.Th:
                return(faceFx.Th);

            case FaceFxPhonemes.Target.W:
                return(faceFx.W);

            default:
                throw new NotImplementedException();
            }
        }
예제 #2
0
            public static void WriteFaceFxPhonemes(MutagenWriter writer, IFaceFxPhonemesGetter item)
            {
                IPhonemeGetter?[] phonemes = new IPhonemeGetter?[FaceFxPhonemesBinaryCreateTranslation.TargetSize];
                foreach (var target in FaceFxPhonemesBinaryCreateTranslation.Targets)
                {
                    phonemes[(int)target] = item.GetGetter(target);
                }
                if (!phonemes.Any(p => p != null))
                {
                    return;
                }
                var force  = item.ForceNames;
                var hasAll = phonemes.All(p => p != null);

                if (!hasAll || force)
                {
                    for (int i = 0; i < phonemes.Length; i++)
                    {
                        var phoneme = phonemes[i];
                        if (phoneme == null)
                        {
                            continue;
                        }
                        var target = (Target)i;
                        using (HeaderExport.Subrecord(writer, RecordTypes.PHTN))
                        {
                            writer.Write(phoneme.Name, StringBinaryType.NullTerminate);
                        }
                    }
                }
                foreach (var slot in FaceFxPhonemesBinaryCreateTranslation.Slots)
                {
                    using (HeaderExport.Subrecord(writer, RecordTypes.PHWT))
                    {
                        foreach (var target in FaceFxPhonemesBinaryCreateTranslation.Targets)
                        {
                            IPhonemeGetter?phoneme = phonemes[(int)target];
                            if (phoneme == null)
                            {
                                continue;
                            }
                            writer.Write(phoneme.Get(slot));
                        }
                    }
                }
            }