/// <summary> /// 先頭ウインドウをサクジョする /// </summary> private void DestroyWindow() { Queue <TalkWindow2> bufQ = new Queue <TalkWindow2>(); //カウントチェック if (WindowTalkListQ.Count < 1) { return; } else { //まわして、範囲内のものはバッファキューに、範囲外のものは削除 while (WindowTalkListQ.Count > 0) { TalkWindow2 talkWindow = WindowTalkListQ.Dequeue(); if (WindowTalkListQ.Count >= LiplisSetting.Instance.Setting.GetSpeechBallonNum()) { talkWindow.CloseWindow(); } else { //1個取り出し、削除 bufQ.Enqueue(talkWindow); } } //すげかえる WindowTalkListQ = bufQ; } }
/// <summary> /// ウインドウ作成 /// </summary> /// <param name="message"></param> /// <param name="AllocationId"></param> public void CreateWindow(string message, int AllocationId) { //キャラクターデータ取得 LiplisModel charData = LiplisModels.Instance.GetCharacterModel(AllocationId); //おしゃべりウインドウ生成し、現在ウインドウ設置 this.NowTalkWindow = charData.CreateWindowTalk(message, TextMainTalk); }
/// <summary> /// ウインドウをセットする /// </summary> /// <param name="talkWindow"></param> /// <param name="AllocationId"></param> public void SetWindow(TalkWindow2 talkWindow, int AllocationId) { //ターゲットモデルセット talkWindow.TargetModel = ActiveModel; //ウインドウを追加する AddWindow(talkWindow); //ウインドウ DestroyWindow(); }
/// <summary> /// ウインドウを追加する /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="z"></param> /// <param name="message"></param> private void AddWindow(TalkWindow2 talkWindow) { //1個以上ならスライドする if (WindowTalkListQ.Count >= 1) { //一つ前のウインドウの高さを取得する float prvHeight = this.NowTalkWindow.heightImg; float height = NowTalkWindow.ParentWindow.GetComponent <RectTransform>().sizeDelta.y; //ウインドウ移動量設定 SlideWindow(talkWindow); } //キューに追加 this.WindowTalkListQ.Enqueue(talkWindow); //現在おしゃべりウインドウ設置 this.NowTalkWindow = talkWindow; }
/// <summary> /// ウインドをスライドする /// </summary> private void SlideWindow(TalkWindow2 newTalkWindow) { //ウインドウが無ければ動かさない if (WindowTalkListQ.Count < 1) { return; } //移動量算出 float moveVal = GetWindowMoveValue(newTalkWindow.GetCurrentText()); //回してスライド foreach (var talkWindow in WindowTalkListQ) { if (!talkWindow.flgEnd) { //移動目標設定 talkWindow.SetMoveTarget(new Vector3(talkWindow.ParentWindow.transform.localPosition.x, talkWindow.ParentWindow.transform.localPosition.y + moveVal, talkWindow.ParentWindow.transform.localPosition.z)); } } }
public TalkWindow2 CreateWindowTalk(GameObject window, string message, Text TextMainTalk) { try { //ウインドウ名設定 window.name = "TalkWindow" + WindowTalkListQ.Count; //親キャンバスに登録 window.transform.SetParent(CanvasRendering.transform, false); //位置設定 window.transform.localPosition = WINDOW_POS.GetPos(ModelLocation, modelSetting.SpeechBallonLocationY); //サイズ変更 RectTransform windowRect = window.GetComponent <RectTransform>(); //ウインドウサイズ設定 windowRect.sizeDelta = CulcWindowSize(message); //ローカルスケール設定 windowRect.localScale = new Vector3(1f, 1f, 1f); //ウインドウインスタンス取得 TalkWindow2 talkWindow = window.GetComponent <TalkWindow2>(); //モデル設定 talkWindow.TargetModel = ActiveModel; //テキスト設定 talkWindow.SetNextLine(message); //ペアレント設定 talkWindow.SetParentWindow(window); //ペアレント設定 talkWindow.SetMainText(TextMainTalk); //高さ設定 talkWindow.SetHeightImg(windowRect.sizeDelta.y); //生成時刻設定 talkWindow.SetCreateTime(DateTime.Now); //ウインドウ画像の設定 talkWindow.SetColor(GetColorFromSetting()); //NULLでなければウインドウセット if (talkWindow != null) { //ウインドウセット SetWindow(talkWindow, AllocationId); } //結果を返す return(talkWindow); } catch (Exception ex) { Debug.Log(ex); return(null); } }