DrawScript.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.EventSystems;
  6. public class DrawScript : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
  7. {
  8. public DrawShape ArrowPrefab;
  9. public DrawShape TextPrefab;
  10. DrawPaintbrush PaintbrushPrefab;
  11. public DrawShape TargetPrefab;
  12. private RectTransform rectTransform_;
  13. Vector2 posMin;
  14. Vector2 posMax;
  15. private List<GameObject> drawShapeList_ = new List<GameObject>();
  16. public void Clear()
  17. {
  18. foreach (GameObject obj in drawShapeList_)
  19. {
  20. Destroy(obj);
  21. }
  22. drawShapeList_.Clear();
  23. PaintbrushPrefab.Clear();
  24. }
  25. void Start ()
  26. {
  27. //ArrowPrefab = Resources.Load("prefabs/prefab1", GameObject) as GameObject;
  28. rectTransform_ = GetComponent<RectTransform>();
  29. PaintbrushPrefab = gameObject.GetComponentsInChildren<DrawPaintbrush>(true)[0];
  30. posMin = rectTransform_.TransformPoint(new Vector2(0, 0));
  31. posMax = rectTransform_.TransformPoint(new Vector2(rectTransform_.rect.width - 1, rectTransform_.rect.height - 1));
  32. }
  33. void Update ()
  34. {
  35. var mousePosition = Input.mousePosition;
  36. if (mousePosition.x > posMin.x &&
  37. mousePosition.x < posMax.x &&
  38. mousePosition.y > posMin.y &&
  39. mousePosition.y < posMax.y)
  40. {
  41. var canUpdateShape = CurrentShapeToDraw != null && IsDrawingShape;
  42. if (canUpdateShape)
  43. {
  44. UpdateShapeVertex(Input.mousePosition);
  45. }
  46. }
  47. }
  48. private DrawShape CurrentShapeToDraw { get; set; }
  49. private bool IsDrawingShape { get; set; }
  50. public void OnPointerDown(PointerEventData eventData)
  51. {
  52. StartDraw(Input.mousePosition);
  53. }
  54. public void OnPointerUp(PointerEventData eventData)
  55. {
  56. StopDraw(Input.mousePosition);
  57. }
  58. public enum DRAW_MODE
  59. {
  60. NO_DRAW,
  61. PAINTBRUSH,
  62. TEXT,
  63. ARROW,
  64. TARGET
  65. };
  66. public DRAW_MODE DrawMode
  67. {
  68. set { drawMode_ = value; }
  69. }
  70. private void StartDraw(Vector2 position)
  71. {
  72. GameObject go;
  73. switch (drawMode_)
  74. {
  75. case DRAW_MODE.ARROW:
  76. CurrentShapeToDraw = Instantiate(ArrowPrefab);
  77. CurrentShapeToDraw.name = "Shape " + _allShapes.Count;
  78. CurrentShapeToDraw.transform.SetParent(transform);
  79. go = GameObject.Find(CurrentShapeToDraw.name);
  80. drawShapeList_.Add(go);
  81. break;
  82. case DRAW_MODE.TEXT:
  83. CurrentShapeToDraw = Instantiate(TextPrefab);
  84. CurrentShapeToDraw.name = "Shape " + _allShapes.Count;
  85. CurrentShapeToDraw.transform.SetParent(transform);
  86. go = GameObject.Find(CurrentShapeToDraw.name);
  87. drawShapeList_.Add(go);
  88. break;
  89. case DRAW_MODE.TARGET:
  90. CurrentShapeToDraw = Instantiate(TargetPrefab);
  91. CurrentShapeToDraw.name = "Shape " + _allShapes.Count;
  92. CurrentShapeToDraw.transform.SetParent(transform);
  93. go = GameObject.Find(CurrentShapeToDraw.name);
  94. drawShapeList_.Add(go);
  95. break;
  96. case DRAW_MODE.PAINTBRUSH:
  97. CurrentShapeToDraw = PaintbrushPrefab;
  98. break;
  99. case DRAW_MODE.NO_DRAW:
  100. return;
  101. }
  102. CurrentShapeToDraw.StartDraw(position);
  103. IsDrawingShape = true;
  104. _allShapes.Add(CurrentShapeToDraw);
  105. }
  106. private void StopDraw(Vector2 position)
  107. {
  108. if (CurrentShapeToDraw != null)
  109. {
  110. CurrentShapeToDraw.StopDraw(position);
  111. CurrentShapeToDraw = null;
  112. }
  113. }
  114. private void UpdateShapeVertex(Vector2 position)
  115. {
  116. if (CurrentShapeToDraw == null)
  117. {
  118. return;
  119. }
  120. CurrentShapeToDraw.UpdateShape(position);
  121. }
  122. DRAW_MODE drawMode_;
  123. private readonly List<DrawShape> _allShapes = new List<DrawShape>();
  124. }