WorkerController.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using UnityEngine;
  6. using UnityEngine.UI;
  7. public class WorkerController : MonoBehaviour
  8. {
  9. List<Structure> structures = new List<Structure>();
  10. public GameObject WorkersList;
  11. // Start is called before the first frame update
  12. void Start()
  13. {
  14. System.Random rnd = new System.Random();
  15. for (int i = 0; i < 240; i++)
  16. {
  17. var ts = new DateTime(2020, 03, 26, 10,Convert.ToInt32(i/60), i%60);
  18. //else ts = new DateTime(2020, 03, 26, 10, 17, i - 60);
  19. structures.Add(new Structure
  20. {
  21. id = structures.Count + 1,
  22. coord_x = rnd.Next(0, 13),
  23. coord_y = rnd.Next(0, 10),
  24. ts = ts,
  25. acc_id = 356,
  26. location_id = 22,
  27. zone_id = 2
  28. });
  29. structures.Add(new Structure
  30. {
  31. id = structures.Count + 1,
  32. coord_x = rnd.Next(0, 13),
  33. coord_y = rnd.Next(0, 10),
  34. ts = ts,
  35. acc_id = 341,
  36. location_id = 22,
  37. zone_id = 2
  38. });
  39. }
  40. foreach(var s in structures.Select(s => s.acc_id).Distinct())
  41. WorkerMarker(s);
  42. }
  43. // Update is called once per frame
  44. void Update()
  45. {
  46. foreach (var m in markers)
  47. m.marker.SetActive(m.toggle.isOn);
  48. }
  49. List<Marker> markers = new List<Marker>();
  50. class Marker
  51. {
  52. public Toggle toggle { get; set; }
  53. public GameObject marker { get; set; }
  54. public int acc_id { get; set; }
  55. }
  56. /// <summary>
  57. /// Создание маркера для сотрудника
  58. /// </summary>
  59. /// <param name="acc_id"></param>
  60. void WorkerMarker(int acc_id)
  61. {
  62. var worker_toggle = Instantiate(Resources.Load("GameObjects/Toggle", typeof(Toggle))) as Toggle;
  63. worker_toggle.name = acc_id.ToString();
  64. worker_toggle.transform.GetChild(1).gameObject.GetComponent<Text>().text = acc_id.ToString();
  65. worker_toggle.transform.SetParent(WorkersList.transform);
  66. var worker_marker = Instantiate(Resources.Load("GameObjects/Capsule", typeof(GameObject))) as GameObject;
  67. worker_marker.name = "marker_" + acc_id.ToString();
  68. worker_marker.GetComponent<Renderer>().material.color = UnityEngine.Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f);
  69. markers.Add(new Marker { acc_id = acc_id, marker = worker_marker, toggle = worker_toggle });
  70. }
  71. /// <summary>
  72. /// Смена положения маркера
  73. /// </summary>
  74. /// <param name="index"></param>
  75. /// <param name="worker"></param>
  76. /// <param name="worker_marker"></param>
  77. /// <returns></returns>
  78. static IEnumerator MarkerPostion(float pause, Vector3 pos, GameObject worker_marker)
  79. {
  80. yield return new WaitForSeconds(pause);
  81. Debug.Log(pause);
  82. worker_marker.transform.position = pos;
  83. }
  84. /// <summary>
  85. /// Запуск отрисовки
  86. /// Остановить нельзя
  87. /// </summary>
  88. public void ButtonStart()
  89. {
  90. foreach (var m in markers)
  91. {
  92. if (m.toggle.isOn)
  93. {
  94. var worker = structures.Where(w => w.acc_id == m.acc_id).ToList();
  95. for (int i = 0; i < worker.Count; i++)
  96. {
  97. var w = worker.ElementAt(i);
  98. var z0 = m.marker.transform.position;
  99. var z1 = new Vector3(w.coord_x, 0.5f, w.coord_y);
  100. // var x = z1.x - z0.x;
  101. // var y = z1.y - z0.y;
  102. //var z = Mathf.Sqrt(x * x + y * y);
  103. //for (float x = z0.x; i < z1.x; x++)
  104. // var pos = new Vector3(w.coord_x + z, 0.5f, w.coord_y + z);
  105. // StartCoroutine(MarkerPostion(i - z, pos, m.marker));
  106. }
  107. }
  108. }
  109. }
  110. }
  111. }