World_Sprite.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*
  2. ------------------- Code Monkey -------------------
  3. Thank you for downloading the Code Monkey Utilities
  4. I hope you find them useful in your projects
  5. If you have any questions use the contact form
  6. Cheers!
  7. unitycodemonkey.com
  8. --------------------------------------------------
  9. */
  10. using System;
  11. using UnityEngine;
  12. namespace CodeMonkey.Utils {
  13. /*
  14. * Sprite in the World
  15. * */
  16. public class World_Sprite {
  17. private const int sortingOrderDefault = 5000;
  18. public GameObject gameObject;
  19. public Transform transform;
  20. private SpriteRenderer spriteRenderer;
  21. public static World_Sprite CreateDebugButton(Vector3 position, System.Action ClickFunc) {
  22. World_Sprite worldSprite = new World_Sprite(null, position, new Vector3(10, 10), Assets.i.s_White, Color.green, sortingOrderDefault);
  23. worldSprite.AddButton(ClickFunc, null, null);
  24. return worldSprite;
  25. }
  26. public static World_Sprite CreateDebugButton(Transform parent, Vector3 localPosition, System.Action ClickFunc) {
  27. World_Sprite worldSprite = new World_Sprite(parent, localPosition, new Vector3(10, 10), Assets.i.s_White, Color.green, sortingOrderDefault);
  28. worldSprite.AddButton(ClickFunc, null, null);
  29. return worldSprite;
  30. }
  31. public static World_Sprite CreateDebugButton(Transform parent, Vector3 localPosition, string text, System.Action ClickFunc, int fontSize = 30, float paddingX = 5, float paddingY = 5) {
  32. GameObject gameObject = new GameObject("DebugButton");
  33. gameObject.transform.parent = parent;
  34. gameObject.transform.localPosition = localPosition;
  35. TextMesh textMesh = UtilsClass.CreateWorldText(text, gameObject.transform, Vector3.zero, fontSize, Color.white, TextAnchor.MiddleCenter, TextAlignment.Center, 20000);
  36. Bounds rendererBounds = textMesh.GetComponent<MeshRenderer>().bounds;
  37. Color color = UtilsClass.GetColorFromString("00BA00FF");
  38. if (color.r >= 1f) color.r = .9f;
  39. if (color.g >= 1f) color.g = .9f;
  40. if (color.b >= 1f) color.b = .9f;
  41. Color colorOver = color * 1.1f; // button over color lighter
  42. World_Sprite worldSprite = new World_Sprite(gameObject.transform, Vector3.zero, rendererBounds.size + new Vector3(paddingX, paddingY), Assets.i.s_White, color, sortingOrderDefault);
  43. worldSprite.AddButton(ClickFunc, () => worldSprite.SetColor(colorOver), () => worldSprite.SetColor(color));
  44. return worldSprite;
  45. }
  46. public static World_Sprite Create(Transform parent, Vector3 localPosition, Vector3 localScale, Sprite sprite, Color color, int sortingOrderOffset) {
  47. return new World_Sprite(parent, localPosition, localScale, sprite, color, sortingOrderOffset);
  48. }
  49. public static World_Sprite Create(Transform parent, Vector3 localPosition, Vector3 localScale, Sprite sprite = null, Color? color = null, int sortingOrderOffset = 0) {
  50. if (sprite == null) {
  51. sprite = Assets.i.s_White;
  52. }
  53. if (color == null) {
  54. color = Color.white;
  55. }
  56. return new World_Sprite(parent, localPosition, localScale, sprite, (Color)color, sortingOrderOffset);
  57. }
  58. public static World_Sprite Create(Vector3 worldPosition, Sprite sprite) {
  59. return new World_Sprite(null, worldPosition, new Vector3(1, 1, 1), sprite, Color.white, 0);
  60. }
  61. public static World_Sprite Create(Vector3 worldPosition, Vector3 localScale, Sprite sprite, Color color, int sortingOrderOffset) {
  62. return new World_Sprite(null, worldPosition, localScale, sprite, color, sortingOrderOffset);
  63. }
  64. public static World_Sprite Create(Vector3 worldPosition, Vector3 localScale, Sprite sprite, Color color) {
  65. return new World_Sprite(null, worldPosition, localScale, sprite, color, 0);
  66. }
  67. public static World_Sprite Create(Vector3 worldPosition, Vector3 localScale, Color color) {
  68. return new World_Sprite(null, worldPosition, localScale, Assets.i.s_White, color, 0);
  69. }
  70. public static World_Sprite Create(Vector3 worldPosition, Vector3 localScale, Color color, int sortingOrderOffset) {
  71. return new World_Sprite(null, worldPosition, localScale, Assets.i.s_White, color, sortingOrderOffset);
  72. }
  73. public static World_Sprite Create(Vector3 worldPosition, Vector3 localScale) {
  74. return new World_Sprite(null, worldPosition, localScale, Assets.i.s_White, Color.white, 0);
  75. }
  76. public static World_Sprite Create(Vector3 worldPosition, Vector3 localScale, int sortingOrderOffset) {
  77. return new World_Sprite(null, worldPosition, localScale, Assets.i.s_White, Color.white, sortingOrderOffset);
  78. }
  79. public static int GetSortingOrder(Vector3 position, int offset, int baseSortingOrder = sortingOrderDefault) {
  80. return (int)(baseSortingOrder - position.y) + offset;
  81. }
  82. public World_Sprite(Transform parent, Vector3 localPosition, Vector3 localScale, Sprite sprite, Color color, int sortingOrderOffset) {
  83. Vector3 position = localPosition;
  84. if (parent != null) {
  85. position = parent.TransformPoint(position);
  86. }
  87. int sortingOrder = GetSortingOrder(position, sortingOrderOffset);
  88. gameObject = UtilsClass.CreateWorldSprite(parent, "Sprite", sprite, localPosition, localScale, sortingOrder, color);
  89. transform = gameObject.transform;
  90. spriteRenderer = gameObject.GetComponent<SpriteRenderer>();
  91. }
  92. public void SetActive(bool isActive) {
  93. gameObject.SetActive(isActive);
  94. }
  95. public SpriteRenderer GetSpriteRenderer() {
  96. return spriteRenderer;
  97. }
  98. public void SetName(string name) {
  99. gameObject.name = name;
  100. }
  101. public void SetSortingOrderOffset(int sortingOrderOffset) {
  102. SetSortingOrder(GetSortingOrder(gameObject.transform.position, sortingOrderOffset));
  103. }
  104. public void SetSortingOrder(int sortingOrder) {
  105. gameObject.GetComponent<SpriteRenderer>().sortingOrder = sortingOrder;
  106. }
  107. public void SetSortingLayerName(string layerName) {
  108. gameObject.GetComponent<SpriteRenderer>().sortingLayerName = layerName;
  109. }
  110. public int GetSortingOrder() {
  111. return gameObject.GetComponent<SpriteRenderer>().sortingOrder;
  112. }
  113. public void SetParent(GameObject parentGameObject) {
  114. SetParent(parentGameObject.transform);
  115. }
  116. public void SetParent(Transform parent) {
  117. transform.parent = parent;
  118. }
  119. public void SetLocalScale(Vector3 localScale) {
  120. transform.localScale = localScale;
  121. }
  122. public void SetPosition(Vector3 localPosition) {
  123. transform.localPosition = localPosition;
  124. }
  125. public void SetPosition(Func<Vector3> getLocalPosition) {
  126. FunctionUpdater.Create(() => {
  127. transform.localPosition = getLocalPosition();
  128. });
  129. }
  130. public Vector3 GetPosition() {
  131. return transform.position;
  132. }
  133. public Vector3 GetLocalScale() {
  134. return transform.localScale;
  135. }
  136. public float GetRotation() {
  137. return transform.localEulerAngles.z;
  138. }
  139. public void SetRotation(float rotation) {
  140. transform.localEulerAngles = new Vector3(0, 0, rotation);
  141. }
  142. public void SetColor(Color color) {
  143. spriteRenderer.color = color;
  144. }
  145. public void SetSprite(Sprite sprite) {
  146. spriteRenderer.sprite = sprite;
  147. }
  148. public void SetFlip(bool flipX, bool flipY) {
  149. spriteRenderer.flipX = flipX;
  150. spriteRenderer.flipY = flipY;
  151. }
  152. public void Show() {
  153. gameObject.SetActive(true);
  154. }
  155. public void Hide() {
  156. gameObject.SetActive(false);
  157. }
  158. public Button_Sprite AddButton(System.Action ClickFunc, System.Action MouseOverOnceFunc, System.Action MouseOutOnceFunc) {
  159. gameObject.AddComponent<BoxCollider2D>();
  160. Button_Sprite buttonSprite = gameObject.AddComponent<Button_Sprite>();
  161. if (ClickFunc != null)
  162. buttonSprite.ClickFunc = ClickFunc;
  163. if (MouseOverOnceFunc != null)
  164. buttonSprite.MouseOverOnceFunc = MouseOverOnceFunc;
  165. if (MouseOutOnceFunc != null)
  166. buttonSprite.MouseOutOnceFunc = MouseOutOnceFunc;
  167. return buttonSprite;
  168. }
  169. public void DestroySelf() {
  170. UnityEngine.Object.Destroy(gameObject);
  171. }
  172. }
  173. }