Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.78 KB | None | 0 0
  1. //Main script
  2. using System;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5.  
  6. public class MailWindow : Window
  7. {
  8. #region Data
  9.  
  10. public GameObject infoMailMessagePrefab;
  11. public GameObject jobContractMailMessagePrefab;
  12.  
  13. [HideInInspector]
  14. public List<MailMessage> mailMessages;
  15.  
  16. #endregion Data
  17.  
  18. #region Unity Stuff
  19.  
  20. private void Start()
  21. {
  22. for (int i = 0; i < 10; i++)
  23. {
  24. JobContractMailMessage mailMessage = new JobContractMailMessage()
  25. {
  26. subjectText = "I'm little subject " + i,
  27. contentText = "I'm super long big awesome and nice message that occupies whole content preview and places three dots at the end and to be seen it must be expanded! " + i,
  28. timeStampText = i.ToString()
  29. };
  30.  
  31. ReceiveMailMessage(mailMessage);
  32. }
  33. }
  34.  
  35. #endregion Unity Stuff
  36.  
  37. #region Public API
  38.  
  39. public void ReceiveMailMessage(MailMessage message)
  40. {
  41. if (message is InfoMailMessage)
  42. {
  43. GameObject mail = Instantiate(infoMailMessagePrefab, transform.Find("Scroll View/Viewport/Content"));
  44.  
  45. mail.GetComponent<InfoMailMessage>().subjectText = message.subjectText;
  46. mail.GetComponent<InfoMailMessage>().contentText = message.contentText;
  47. mail.GetComponent<InfoMailMessage>().timeStampText = message.timeStampText;
  48. }
  49. else if (message is JobContractMailMessage)
  50. {
  51. GameObject mail = Instantiate(jobContractMailMessagePrefab, transform.Find("Scroll View/Viewport/Content"));
  52.  
  53. mail.GetComponent<JobContractMailMessage>().subjectText = message.subjectText;
  54. mail.GetComponent<JobContractMailMessage>().contentText = message.contentText;
  55. mail.GetComponent<JobContractMailMessage>().timeStampText = message.timeStampText;
  56. }
  57. }
  58.  
  59. #endregion Public API
  60. }
  61.  
  62. //Mail class
  63. using System.Collections.Generic;
  64. using UnityEngine;
  65. using UnityEngine.EventSystems;
  66. using UnityEngine.UI;
  67.  
  68. public class MailMessage : MonoBehaviour, IPointerClickHandler
  69. {
  70. #region Data
  71.  
  72. [HideInInspector]
  73. public string subjectText;
  74.  
  75. [HideInInspector]
  76. public string contentText;
  77.  
  78. [HideInInspector]
  79. public string timeStampText;
  80.  
  81. protected Text subject;
  82. protected Text content;
  83. protected Text timeStamp;
  84. protected Button delete;
  85.  
  86. protected string completeContent;
  87. protected bool isExpanded;
  88. protected TextGenerator contentTextGenerator;
  89.  
  90. #endregion Data
  91.  
  92. #region Unity Stuff
  93.  
  94. private void Start()
  95. {
  96. Initialize();
  97. }
  98.  
  99. #endregion Unity Stuff
  100.  
  101. #region Protected API
  102.  
  103. protected virtual void Initialize()
  104. {
  105. contentTextGenerator = new TextGenerator();
  106.  
  107. subject = transform.Find("SubjectText").GetComponent<Text>();
  108. content = transform.Find("ContentText").GetComponent<Text>();
  109. timeStamp = transform.Find("TimeStampText").GetComponent<Text>();
  110. delete = transform.Find("DeleteButton").GetComponent<Button>();
  111.  
  112. subject.text = subjectText;
  113. content.text = contentText;
  114. timeStamp.text = timeStampText;
  115.  
  116. delete.gameObject.SetActive(false);
  117. delete.onClick.AddListener(Delete);
  118.  
  119. completeContent = content.text;
  120. contentTextGenerator.Populate(content.text, content.GetGenerationSettings(content.GetComponent<RectTransform>().sizeDelta));
  121. if (content.text.ToCharArray().Length > contentTextGenerator.characterCountVisible)
  122. {
  123. content.text = content.text.SubstringAndReplaceWithOffset(contentTextGenerator.characterCountVisible, "...");
  124. }
  125. }
  126.  
  127. public virtual void Expand()
  128. {
  129. contentTextGenerator.Populate(completeContent, content.GetGenerationSettings(content.GetComponent<RectTransform>().sizeDelta));
  130. content.text = completeContent;
  131. delete.gameObject.SetActive(true);
  132.  
  133. ResizeAll(35);
  134. if (content.text.ToCharArray().Length > contentTextGenerator.characterCountVisible)
  135. {
  136. ResizeAll(15);
  137. }
  138.  
  139. isExpanded = true;
  140. }
  141.  
  142. public virtual void UnExpand()
  143. {
  144. ResizeAll(-35);
  145. if (content.text.ToCharArray().Length > contentTextGenerator.characterCountVisible)
  146. {
  147. ResizeAll(-15);
  148. }
  149.  
  150. contentTextGenerator.Populate(content.text, content.GetGenerationSettings(content.GetComponent<RectTransform>().sizeDelta));
  151. content.text = content.text.SubstringAndReplaceWithOffset(contentTextGenerator.characterCountVisible, "...");
  152. delete.gameObject.SetActive(false);
  153.  
  154. isExpanded = false;
  155. }
  156.  
  157. protected virtual void Delete()
  158. {
  159. Destroy(gameObject);
  160. UnExpand();
  161. RefreshUI();
  162. }
  163.  
  164. protected void ResizeAll(int size)
  165. {
  166. Resize(size, GetComponent<RectTransform>());
  167. Resize(size, transform.parent.GetComponent<RectTransform>());
  168. Resize(size, content.GetComponent<RectTransform>());
  169.  
  170. RefreshUI();
  171. }
  172.  
  173. protected static void Resize(int size, RectTransform rectTransform)
  174. {
  175. rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, rectTransform.sizeDelta.y + size);
  176. }
  177.  
  178. protected void RefreshUI()
  179. {
  180. //TODO: Is there non-hacky way to solve this
  181. transform.parent.GetComponent<VerticalLayoutGroup>().enabled = false;
  182. transform.parent.GetComponent<VerticalLayoutGroup>().enabled = true;
  183. }
  184.  
  185. public void OnPointerClick(PointerEventData eventData)
  186. {
  187. if (isExpanded)
  188. {
  189. UnExpand();
  190. return;
  191. }
  192.  
  193. Expand();
  194. }
  195.  
  196. #endregion Protected API
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement