Spawner.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. namespace Shapes2D {
  2. using UnityEngine;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. public class Spawner : MonoBehaviour {
  6. public GameObject prefab;
  7. float interval = 0.000001f;
  8. int count = 50;
  9. bool dynamic = true;
  10. bool optimizePolygons = true;
  11. int shapeType = 0;
  12. bool randomStyle = true;
  13. float timer;
  14. int spawned;
  15. bool done;
  16. float scale = 1;
  17. List<Shape> shapes = new List<Shape>();
  18. float deltaTime = 0.0f;
  19. // Use this for initialization
  20. void Start () {
  21. // Profiler.maxNumberOfSamplesPerFrame = 8000000;
  22. }
  23. void OnGUI() {
  24. // fps counter from http://wiki.unity3d.com/index.php?title=FramesPerSecond
  25. int w = Screen.width, h = Screen.height;
  26. GUIStyle style = new GUIStyle();
  27. Rect rect = new Rect(10, h - h * 2 / 100 - 10, w, h * 2 / 100);
  28. style.alignment = TextAnchor.UpperLeft;
  29. style.fontSize = h * 2 / 100;
  30. style.normal.textColor = Color.white;
  31. float msec = deltaTime * 1000.0f;
  32. float fps = 1.0f / deltaTime;
  33. string text = string.Format("{0:0.0} ms ({1:0.} fps)", msec, fps);
  34. GUI.Label(rect, text, style);
  35. GUI.Box(new Rect(0, 0, 300, 400), "Shapes2D Stress Test");
  36. Vector2 offset = new Vector2(10, 30);
  37. GUI.Label(new Rect(offset.x, offset.y, 200, 20), "# of shapes to spawn (" + count + "):");
  38. offset.y += 30;
  39. count = (int) GUI.HorizontalSlider(new Rect(offset.x, offset.y, 100, 20), count, 1, 5000);
  40. offset.y += 30;
  41. dynamic = GUI.Toggle(new Rect(offset.x, offset.y, 100, 20), dynamic, "Dynamic");
  42. offset.y += 30;
  43. optimizePolygons = GUI.Toggle(new Rect(offset.x, offset.y, 200, 20), optimizePolygons, "Optimize Polygons");
  44. offset.y += 30;
  45. GUI.Label(new Rect(offset.x, offset.y, 275, 20), "Shape Type (0 = Test Shape, 1 = random) (" + shapeType + ")");
  46. offset.y += 30;
  47. shapeType = (int) GUI.HorizontalSlider(new Rect(offset.x, offset.y, 100, 20), shapeType, 0, 16);
  48. offset.y += 30;
  49. randomStyle = GUI.Toggle(new Rect(offset.x, offset.y, 100, 20), randomStyle, "Random Style");
  50. offset.y += 30;
  51. GUI.Label(new Rect(offset.x, offset.y, 200, 20), "Scale (" + scale + ")");
  52. offset.y += 30;
  53. scale = GUI.HorizontalSlider(new Rect(offset.x, offset.y, 100, 20), scale, 0.1f, 5f);
  54. offset.y += 30;
  55. if (GUI.Button(new Rect(offset.x, offset.y, 100, 40), "Restart")) {
  56. for (int i = 0; i < transform.childCount; i++) {
  57. transform.GetChild(i).gameObject.SetActive(false);
  58. Destroy(transform.GetChild(i).gameObject);
  59. }
  60. timer = 0;
  61. spawned = 0;
  62. done = false;
  63. shapes.Clear();
  64. }
  65. offset.y += 50;
  66. }
  67. // Update is called once per frame
  68. void Update () {
  69. deltaTime += (Time.deltaTime - deltaTime) * 0.1f;
  70. if (dynamic) {
  71. float outline = (Mathf.Cos(Time.timeSinceLevelLoad * 5) + 1) / 2 * (scale / 4);
  72. for (int i = 0; i < shapes.Count; i++)
  73. shapes[i].settings.outlineSize = outline;
  74. }
  75. if (done)
  76. return;
  77. timer += Time.deltaTime;
  78. while (timer >= interval) {
  79. timer -= interval;
  80. if (spawned < count) {
  81. float spread = Camera.main.orthographicSize;
  82. GameObject go = Instantiate(prefab);
  83. go.transform.SetParent(transform);
  84. go.transform.position = transform.position
  85. + new Vector3(Random.Range(-spread, spread), Random.Range(-spread, spread), 0);
  86. go.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360));
  87. go.SetActive(true);
  88. go.transform.localScale = new Vector3(scale, scale, 1);
  89. spawned ++;
  90. Shape shape = go.GetComponent<Shape>();
  91. if (!shape)
  92. continue;
  93. shapes.Add(shape);
  94. if (shapeType == 1) {
  95. shape.settings.shapeType = (ShapeType) Random.Range(0, 4);
  96. if (shape.settings.shapeType == ShapeType.Polygon)
  97. shape.settings.polygonPreset = (PolygonPreset) Random.Range(1, 13);
  98. } else {
  99. if (shapeType == 2)
  100. shape.settings.shapeType = ShapeType.Rectangle;
  101. if (shapeType == 3)
  102. shape.settings.shapeType = ShapeType.Ellipse;
  103. if (shapeType == 4)
  104. shape.settings.shapeType = ShapeType.Triangle;
  105. if (shapeType >= 5) {
  106. shape.settings.shapeType = ShapeType.Polygon;
  107. shape.settings.polygonPreset = (PolygonPreset) (shapeType - 4);
  108. }
  109. }
  110. if (randomStyle) {
  111. shape.settings.outlineColor = Random.ColorHSV(0, 1, 0, 1, 0, 1, 0.25f, 1);
  112. shape.settings.fillColor = Random.ColorHSV(0, 1, 0, 1, 0, 1, 0.25f, 1);
  113. shape.settings.fillColor2 = Random.ColorHSV(0, 1, 0, 1, 0, 1, 0.25f, 1);
  114. shape.settings.fillType = (FillType) Random.Range(0, 7);
  115. shape.settings.lineSize = Random.Range(scale * 0.01f, scale * 0.5f);
  116. shape.settings.gridSize = Random.Range(scale * 0.01f, scale * 0.5f);
  117. shape.settings.gradientType = (GradientType) Random.Range(0, 3);
  118. shape.settings.gradientAxis = (GradientAxis) Random.Range(0, 2);
  119. shape.settings.gradientStart = Random.Range(0f, 1f);
  120. shape.settings.triangleOffset = Random.Range(0f, 1f);
  121. shape.settings.fillRotation = Random.Range(0f, 360f);
  122. shape.settings.fillOffset = new Vector2(Random.Range(0, scale), Random.Range(0, scale));
  123. shape.settings.roundness = Random.Range(0, scale / 2);
  124. if (Random.Range(0, 2) == 1)
  125. shape.settings.blur = Random.Range(0, scale / 8);
  126. shape.settings.outlineSize = Random.Range(0, scale / 4);
  127. }
  128. if (shape.settings.shapeType == ShapeType.Polygon)
  129. shape.settings.usePolygonMap = optimizePolygons;
  130. } else {
  131. done = true;
  132. }
  133. }
  134. }
  135. }
  136. }