//messageListを整理します private void RearrangeMessageList() { int startIndexToRemove; //削除を始める場所 startIndexToRemove = -1; //最後にactivatedがfalseになっている場所を検索 for (int i = 0; i < messageList.Count; i++) { ParamPrivate paramPrivate = messageList[i].paramPrivate; //Debug.Log(string.Format("[HUD_MessageManager] ID{0}.activated: {1}", i, paramPrivate.activated)); //Debug.Log(paramPrivate.text); if (paramPrivate.activated) { startIndexToRemove = i + 1; } else { startIndexToRemove = i; } } if (startIndexToRemove >= 0) { messageList.RemoveRange(startIndexToRemove, messageList.Count - startIndexToRemove); } //現在使用している格納数に2つの余裕を持たせるように容量を確保 messageList.Capacity = messageList.Count + 2; //Debug.Log(messageList.Count); }
// //関数: // 説明: // messageを設定する // /// <summary> /// messageを設定する /// </summary> /// <param name="text"></param> /// <param name="type"></param> /// <param name="mode"></param> /// <param name="messageParam"></param> /// <returns></returns> public int Set(string text, MESSAGE_TYPE type, MESSAGE_MODE mode, Param messageParam) { int i; ParamPrivate paramPrivate; paramPrivate = new ParamPrivate(); paramPrivate.activated = true; paramPrivate.isPlaying = false; paramPrivate.messageState = MESSAGE_STATE.READY; paramPrivate.text = text; paramPrivate.messageStartTime = 0.0f; paramPrivate.messageMode = mode; paramPrivate.messageType = type; paramPrivate.transparency = 0.0f; if (messageList.Count == 0) { return(CreateMessageElement(0, paramPrivate, (Param)messageParam.Clone())); } for (i = 0; i < messageList.Count; i++) { if (!messageList[i].paramPrivate.activated) { break; } } return(CreateMessageElement(i, paramPrivate, (Param)messageParam.Clone())); }
//関数: private int CreateMessageElement(int index, ParamPrivate paramPrivate, Param param) // 説明: // messageList内の指定された場所にmessageElementを作成します private int CreateMessageElement(int index, ParamPrivate paramPrivate, Param param) { //格納数が足らないとき新たに格納場所を追加 if (messageList.Count < index + 1) { messageList.Add(new MessageListElement()); } //メッセージ変数を代入 messageList[index].paramPrivate = paramPrivate; messageList[index].param = param; return(index); }
// //関数: Exit // 説明: // messageを終了する // /// <summary> /// Messageを終了する /// </summary> /// <param name="id"></param> public void Exit(int id) { if (!CheckID(id)) { return; } ParamPrivate paramPrivate = messageList[id].paramPrivate; if (paramPrivate.isPlaying) { paramPrivate.messageState = MESSAGE_STATE.TO_END; } }
public void ShowDontOverride(int id) { if (!CheckID(id)) { return; } ParamPrivate paramPrivate = messageList[id].paramPrivate; if (!paramPrivate.isPlaying) { Show(id); } }
// //関数: Show, ShowDontOverride, ShowAlert, ShowAlertDontOverride // 説明: // messageを開始する // /// <summary> /// Messageを表示する /// </summary> /// <param name="id"></param> public void Show(int id) { if (!CheckID(id)) { return; } ParamPrivate paramPrivate = messageList[id].paramPrivate; paramPrivate.isPlaying = true; paramPrivate.messageStartTime = Time.unscaledTime; paramPrivate.messageState = MESSAGE_STATE.START; paramPrivate.transparency = 0.0f; return; }
//関数: private WriteMessage() // 説明: // メッセージの描画処理を行います // コンポーネント"Text"内のメンバー変数"Text"に文字列を格納します private void WriteMessage() { bool textBoxSwitch = false; string centerText = ""; string textBoxText = ""; string topText = ""; string bottomText = ""; string topLeftText = ""; string bottomRightText = ""; //各メッセージを処理 for (int i = 0; i < messageList.Count; i++) { string text = ""; ParamPrivate paramPrivate = messageList[i].paramPrivate; Param param = messageList[i].param; //メッセージ内容代入 if (paramPrivate.activated) { if (messageList[i].paramPrivate.isPlaying) { int transparencyInt = (int)paramPrivate.transparency; text += "<color=#" + param.color + "{a}" + ">"; text += paramPrivate.text; text += "</color>\n"; text = text.Replace("{a}", transparencyInt.ToString("X2")); if (paramPrivate.messageType == MESSAGE_TYPE.BOX) { textBoxSwitch = true; } } } //各描画位置へメッセージを代入 switch (paramPrivate.messageType) { case MESSAGE_TYPE.CENTER: centerText += text; break; case MESSAGE_TYPE.BOX: textBoxText += text; break; case MESSAGE_TYPE.TOP: topText += text; break; case MESSAGE_TYPE.BOTTOM: bottomText += text; break; case MESSAGE_TYPE.TOP_LEFT: topLeftText += text; break; case MESSAGE_TYPE.BOTTOM_RIGHT: bottomRightText += text; break; } } //テキストボックス表示,非表示設定 if (textBoxSwitch ^ textBoxObj.activeSelf) { textBoxObj.SetActive(textBoxSwitch); } //コンポーネント"Text"に文字列を格納 centerTextText.text = centerText; textBoxTextText.text = textBoxText; topTextText.text = topText; bottomTextText.text = bottomText; topLeftTextText.text = topLeftText; bottomRightTextText.text = bottomRightText; }