public IEnumerator SetCharaState(ShowCharaSet data, int expression, string charaName) { LastShowPos = data.PosType; var charaData = GlobalConfig.Instance.NovelsCharas.ToList().Find(o => o.Key == data.CharaKey); if (CurrentShowDict.ContainsKey(data.PosType)) { CurrentShowDict[data.PosType].CharaKey = data.CharaKey; CurrentShowDict[data.PosType].State = data.State; CurrentShowDict[data.PosType].Expression = expression; CurrentShowDict[data.PosType].IsFlipX = data.IsFlipX; if (string.IsNullOrEmpty(charaName)) { if (charaData != null) { CurrentShowDict[data.PosType].Name = charaData.Name; } } else { CurrentShowDict[data.PosType].Name = charaName; } } switch (data.PosType) { case CharaShowData.EPosType.Left: if (CurrentShowDict[CharaShowData.EPosType.Right].State == CharaShowData.EEffType.Show) { CurrentShowDict[CharaShowData.EPosType.Right].State = CharaShowData.EEffType.Dark; Anim_Right.SetInteger("State", (int)CharaShowData.EEffType.Dark); } Anim_Left.SetInteger("State", (int)data.State); break; case CharaShowData.EPosType.Right: if (CurrentShowDict[CharaShowData.EPosType.Left].State == CharaShowData.EEffType.Show) { CurrentShowDict[CharaShowData.EPosType.Left].State = CharaShowData.EEffType.Dark; Anim_Left.SetInteger("State", (int)CharaShowData.EEffType.Dark); } Anim_Right.SetInteger("State", (int)data.State); break; case CharaShowData.EPosType.Center: SetCharaClose(CharaShowData.EPosType.Left); SetCharaClose(CharaShowData.EPosType.Right); Anim_Center.SetInteger("State", (int)data.State); break; } //设置对话框位置 if (CurrentDialogType == EDialogType.DialogBox) { if (data.PosType == CharaShowData.EPosType.Left) { ImageSwitch_DialogBg.SetImage(0); } else { ImageSwitch_DialogBg.SetImage(1); } } FreshSprite(); yield return(new WaitForSeconds(0.3f)); }
public IEnumerator Run() { while (NovelsManager.Instance == null || UINovelsPanel.Instance == null) { yield return(null); } var cacheContent = NovelsManager.Instance.CacheContent; var lastType = EContentType.None; for (int i = 0; i < Contents.Count; i++) { var currentType = Contents[i].GetType(); //全屏文本或文本内容类型切换时清理上一次的文本 if (currentType == EContentType.Black || (lastType != EContentType.None && currentType != lastType)) { NovelsManager.Instance.CacheContent = cacheContent = ""; UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.Dialog, cacheContent); } lastType = currentType; var str = Contents[i].GetStr() + ""; switch (currentType) { case EContentType.Dialog: { var dialogContent = Contents[i] as DialogueContent; if (dialogContent == null) { continue; } yield return(UINovelsPanel.Instance.DialogEnter(dialogContent.DialogBoxType)); //关闭立绘 if ((dialogContent.Close & DialogueContent.EClose.Left) == DialogueContent.EClose.Left) { UINovelsPanel.Instance.SetCharaClose(CharaShowData.EPosType.Left); } if ((dialogContent.Close & DialogueContent.EClose.Right) == DialogueContent.EClose.Right) { UINovelsPanel.Instance.SetCharaClose(CharaShowData.EPosType.Right); } if ((dialogContent.Close & DialogueContent.EClose.Center) == DialogueContent.EClose.Center) { UINovelsPanel.Instance.SetCharaClose(CharaShowData.EPosType.Center); } //寻找显示数据 ShowCharaSet showData = null; if (!string.IsNullOrEmpty(dialogContent.ShowStr) && GlobalConfig.Instance.CharaMap.ContainsKey(dialogContent.ShowStr)) { showData = GlobalConfig.Instance.CharaMap[dialogContent.ShowStr]; } //清理文本 if (dialogContent.IsClearCache || (showData != null && showData.PosType != UINovelsPanel.Instance.LastShowPos) || dialogContent.DialogBoxType != UINovelsPanel.Instance.CurrentDialogType) { NovelsManager.Instance.CacheContent = cacheContent = ""; UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.Dialog, cacheContent); } //显示立绘 if (showData != null) { yield return(UINovelsPanel.Instance.SetCharaState(showData, (int)dialogContent.Expression, dialogContent.CharaName)); } if (dialogContent.IsNextLine) { if (!string.IsNullOrEmpty(cacheContent)) { cacheContent += "\n"; } } //文本特效 switch (dialogContent.TextEffect) { case ETextEffect.None: { cacheContent += str; UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.Dialog, cacheContent); } break; case ETextEffect.Step: { if (!string.IsNullOrEmpty(str)) { var charArr = str.ToCharArray(); var charIndex = 0; while (charIndex < charArr.Length) { UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.Dialog, cacheContent + str.Substring(0, charIndex)); charIndex += 1; AudioManager.Instance.PlaySound(GlobalConfig.Instance.SFX_TextAppear, AudioGroupType.Effect); if (dialogContent.EffectTime != 0) { yield return(new WaitForSeconds(dialogContent.EffectTime)); } else { yield return(new WaitForSeconds((float)SaveManager.Instance.Cfg.CharSpeed / 1000)); } } cacheContent += str; UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.Dialog, cacheContent); } } break; case ETextEffect.Fade: cacheContent += str; UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.Dialog, cacheContent); yield return(UINovelsPanel.Instance.TextFadeIn(UINovelsPanel.EShowType.Dialog, dialogContent.EffectTime)); break; } //点击下一步 if (dialogContent != null && dialogContent.IsNeedClick && !SaveManager.Instance.Cfg.IsSkip) { NovelsManager.Instance.IsAcceptConfirm = false; UINovelsPanel.Instance.Image_NextStepTip.gameObject.SetActive(true); while (true) { if (NovelsManager.Instance.IsAcceptConfirm) { NovelsManager.Instance.IsAcceptConfirm = false; UINovelsPanel.Instance.Image_NextStepTip.gameObject.SetActive(false); break; } yield return(null); } } var tmpWait = dialogContent.LeaveWait; if (tmpWait == 0) { tmpWait = (float)SaveManager.Instance.Cfg.ForceTextWait / 1000; } yield return(new WaitForSeconds(tmpWait)); //关闭对话框 if (dialogContent.IsCloseDialog) { yield return(UINovelsPanel.Instance.DialogLeave()); } //关闭黑屏框 if (dialogContent.IsCloseBlack) { yield return(UINovelsPanel.Instance.BlackLeave(0.5f)); } } break; case EContentType.Black: { var blackContent = Contents[i] as BlackScreenContent; if (blackContent == null) { continue; } yield return(UINovelsPanel.Instance.BlackEnter(blackContent.BGType, blackContent.EnterFade)); switch (blackContent.TextEffect) { case ETextEffect.None: { cacheContent += str; UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.BlackScreen, cacheContent); } break; case ETextEffect.Step: { if (!string.IsNullOrEmpty(str)) { var charArr = str.ToCharArray(); var charIndex = 0; while (charIndex < charArr.Length) { UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.BlackScreen, str.Substring(0, charIndex)); charIndex += 1; AudioManager.Instance.PlaySound(GlobalConfig.Instance.SFX_TextAppear, AudioGroupType.Effect); yield return(new WaitForSeconds((float)SaveManager.Instance.Cfg.CharSpeed / 1000)); } } } break; case ETextEffect.Fade: cacheContent += str; UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.BlackScreen, cacheContent); yield return(UINovelsPanel.Instance.TextFadeIn(UINovelsPanel.EShowType.BlackScreen, blackContent.EffectTime)); break; } UINovelsPanel.Instance.SetContent(UINovelsPanel.EShowType.BlackScreen, str); if (blackContent.IsNeedClick && !SaveManager.Instance.Cfg.IsSkip) { while (true) { if (NovelsManager.Instance.IsAcceptConfirm) { NovelsManager.Instance.IsAcceptConfirm = false; break; } yield return(null); } } if (blackContent.StayTime > 0) { yield return(new WaitForSeconds(blackContent.StayTime)); } if (blackContent.IsClose) { yield return(UINovelsPanel.Instance.BlackLeave(blackContent.LeaveFade)); } yield return(new WaitForSeconds((float)SaveManager.Instance.Cfg.ForceTextWait / 1000)); NovelsManager.Instance.IsAcceptConfirm = false; } break; case EContentType.Event: { if (GlobalConfig.Instance.EventMap.ContainsKey(str)) { yield return(GlobalConfig.Instance.EventMap[str].Run()); } } break; case EContentType.Audio: { var audioContent = Contents[i] as SEAudioContent; var lenth = AudioManager.Instance.PlaySound(audioContent.Data, AudioGroupType.Effect); if (audioContent.IsWait) { yield return(new WaitForSeconds(lenth)); } } break; case EContentType.Popup: { var popupContent = Contents[i] as PopupContent; yield return(UIPopupWindow.Instance.Open(popupContent.Data)); } break; } } }