Beispiel #1
0
        internal static void DisplaySubtitle(LoadVoice voice, string text, string speaker = "")
        {
            if (KK_Subtitles.showUntranslated.Value == false)
            {
                foreach (var x in text.ToList())
                {
                    if (JPChars.Contains(x))
                    {
                        return;
                    }
                }
            }

            Font fontFace = (Font)Resources.GetBuiltinResource(typeof(Font), $"{KK_Subtitles.fontName.Value}.ttf");
            int  fsize    = KK_Subtitles.fontSize.Value;

            fsize = (int)(fsize < 0 ? (fsize * Screen.height / -100.0) : fsize);

            GameObject subtitle = new GameObject(voice.assetName);

            subtitle.transform.SetParent(Pane.transform);

            var rect = subtitle.GetComponent <RectTransform>() ?? subtitle.AddComponent <RectTransform>();

            rect.pivot     = new Vector2(0.5f, 0);
            rect.sizeDelta = new Vector2(Screen.width * 0.990f, fsize + (fsize * 0.05f));

            var subtitleText = subtitle.GetComponent <Text>() ?? subtitle.AddComponent <Text>();

            subtitleText.font               = fontFace;
            subtitleText.fontSize           = fsize;
            subtitleText.fontStyle          = fontFace.dynamic ? KK_Subtitles.fontStyle.Value : FontStyle.Normal;
            subtitleText.alignment          = KK_Subtitles.textAlign.Value;
            subtitleText.horizontalOverflow = HorizontalWrapMode.Wrap;
            subtitleText.verticalOverflow   = VerticalWrapMode.Overflow;
            subtitleText.color              = KK_Subtitles.textColor.Value;

            var subOutline = subtitle.GetComponent <Outline>() ?? subtitle.AddComponent <Outline>();

            subOutline.effectColor    = KK_Subtitles.outlineColor.Value;
            subOutline.effectDistance = new Vector2(KK_Subtitles.outlineThickness.Value, KK_Subtitles.outlineThickness.Value);

            subtitleText.text = speaker.IsNullOrEmpty() ? text : $"{speaker}:{text}";

            Logger.Log(LogLevel.Debug, $"KK_Subtitles:{text}");

            voice.OnDestroyAsObservable().Subscribe(delegate(Unit _)
            {
                subtitle.transform.SetParent(null);
                Object.Destroy(subtitle);
            });
        }
        internal static void DisplayHSubtitle(LoadVoice voice)
        {
            List <HActionBase> lstProc   = (List <HActionBase>)AccessTools.Field(typeof(HSceneProc), "lstProc").GetValue(KK_Subtitles.HSceneProcInstance);
            HActionBase        mode      = lstProc[(int)KK_Subtitles.HSceneProcInstance.flags.mode];
            HVoiceCtrl         voicectrl = (HVoiceCtrl)AccessTools.Field(typeof(HActionBase), "voice").GetValue(mode);

            //At the start of the H scene, all the text was loaded. Look through the loaded stuff and find the text for the current spoken voice.
            string text = "";

            FindText();
            void FindText()
            {
                foreach (var a in voicectrl.dicVoiceIntos)
                {
                    foreach (var b in a)
                    {
                        foreach (var c in b.Value)
                        {
                            text = c.Value.Where(x => x.Value.pathAsset == voice.assetBundleName && x.Value.nameFile == voice.assetName).Select(x => x.Value.word).FirstOrDefault();
                            if (!text.IsNullOrEmpty())
                            {
                                return;
                            }
                        }
                    }
                }
            }

            if (text.IsNullOrEmpty())
            {
                return;
            }

            if (KK_Subtitles.showUntranslated.Value == false)
            {
                foreach (var x in text.ToList())
                {
                    if (JPChars.Contains(x))
                    {
                        return;
                    }
                }
            }

            //string speaker = voice.voiceTrans.gameObject.GetComponentInParent<ChaControl>().chaFile.parameter.firstname;

            DisplaySubtitle(voice, text);
        }
        internal static void DisplayDialogueSubtitle(LoadVoice voice)
        {
            string text = "";

            FindText();
            void FindText()
            {
                foreach (var a in KK_Subtitles.ActionGameInfoInstance.dicTalkInfo)
                {
                    foreach (var b in a.Value)
                    {
                        foreach (var c in b.Value)
                        {
                            foreach (var d in c.Value.Where(x => x is ActionGame.Communication.Info.GenericInfo).Select(x => x as ActionGame.Communication.Info.GenericInfo))
                            {
                                text = d.talk.Where(x => x.assetbundle == voice.assetBundleName && x.file == voice.assetName).Select(x => x.text).FirstOrDefault();
                                if (!text.IsNullOrEmpty())
                                {
                                    return;
                                }
                            }
                        }
                    }
                }
            }

            if (text.IsNullOrEmpty())
            {
                return;
            }

            if (KK_Subtitles.showUntranslated.Value == false)
            {
                foreach (var x in text.ToList())
                {
                    if (JPChars.Contains(x))
                    {
                        return;
                    }
                }
            }

            //string speaker = voice.voiceTrans.gameObject.GetComponentInParent<ChaControl>().chaFile.parameter.firstname;

            DisplaySubtitle(voice, text);
        }