/* ------------------- Code Monkey ------------------- Thank you for downloading the Code Monkey Utilities I hope you find them useful in your projects If you have any questions use the contact form Cheers! unitycodemonkey.com -------------------------------------------------- */ using UnityEngine; namespace CodeMonkey.Utils { /* * Bar in the World, great for quickly making a health bar * */ public class World_Bar { private Outline outline; private GameObject gameObject; private Transform transform; private Transform background; private Transform bar; public static int GetSortingOrder(Vector3 position, int offset, int baseSortingOrder = 5000) { return (int)(baseSortingOrder - position.y) + offset; } public class Outline { public float size = 1f; public Color color = Color.black; } public static World_Bar Create(Vector3 localPosition, Vector3 localScale, Color? backgroundColor, Color barColor, float sizeRatio, Outline outline = null) { return Create(null, localPosition, localScale, backgroundColor, barColor, sizeRatio, 0, outline); } public static World_Bar Create(Transform parent, Vector3 localPosition, Vector3 localScale, Color? backgroundColor, Color barColor, float sizeRatio, int sortingOrder, Outline outline = null) { return new World_Bar(parent, localPosition, localScale, backgroundColor, barColor, sizeRatio, sortingOrder, outline); } public World_Bar(Transform parent, Vector3 localPosition, Vector3 localScale, Color? backgroundColor, Color barColor, float sizeRatio, int sortingOrder, Outline outline = null) { this.outline = outline; SetupParent(parent, localPosition); if (outline != null) SetupOutline(outline, localScale, sortingOrder - 1); if (backgroundColor != null) SetupBackground((Color)backgroundColor, localScale, sortingOrder); SetupBar(barColor, localScale, sortingOrder + 1); SetSize(sizeRatio); } private void SetupParent(Transform parent, Vector3 localPosition) { gameObject = new GameObject("World_Bar"); transform = gameObject.transform; transform.SetParent(parent); transform.localPosition = localPosition; } private void SetupOutline(Outline outline, Vector3 localScale, int sortingOrder) { UtilsClass.CreateWorldSprite(transform, "Outline", Assets.i.s_White, new Vector3(0,0), localScale + new Vector3(outline.size, outline.size), sortingOrder, outline.color); } private void SetupBackground(Color backgroundColor, Vector3 localScale, int sortingOrder) { background = UtilsClass.CreateWorldSprite(transform, "Background", Assets.i.s_White, new Vector3(0,0), localScale, sortingOrder, backgroundColor).transform; } private void SetupBar(Color barColor, Vector3 localScale, int sortingOrder) { GameObject barGO = new GameObject("Bar"); bar = barGO.transform; bar.SetParent(transform); bar.localPosition = new Vector3(-localScale.x / 2f, 0, 0); bar.localScale = new Vector3(1,1,1); Transform barIn = UtilsClass.CreateWorldSprite(bar, "BarIn", Assets.i.s_White, new Vector3(localScale.x / 2f, 0), localScale, sortingOrder, barColor).transform; } public void SetLocalScale(Vector3 localScale) { // Outline if (transform.Find("Outline") != null) { // Has outline transform.Find("Outline").localScale = localScale + new Vector3(outline.size, outline.size); } //Background background.localScale = localScale; // Set Bar Scale bar.localPosition = new Vector3(-localScale.x / 2f, 0, 0); Transform barIn = bar.Find("BarIn"); barIn.localScale = localScale; barIn.localPosition = new Vector3(localScale.x / 2f, 0); } public void SetSortingOrder(int sortingOrder) { bar.Find("BarIn").GetComponent().sortingOrder = sortingOrder; if (background != null) background.GetComponent().sortingOrder = sortingOrder - 1; if (transform.Find("Outline") != null) transform.Find("Outline").GetComponent().sortingOrder = sortingOrder - 2; } public void SetSortingLayerName(string sortingLayerName) { bar.Find("BarIn").GetComponent().sortingLayerName = sortingLayerName; if (background != null) background.GetComponent().sortingLayerName = sortingLayerName; if (transform.Find("Outline") != null) transform.Find("Outline").GetComponent().sortingLayerName = sortingLayerName; } public void SetRotation(float rotation) { transform.localEulerAngles = new Vector3(0, 0, rotation); } public void SetSize(float sizeRatio) { bar.localScale = new Vector3(sizeRatio, 1, 1); } public void SetColor(Color color) { bar.Find("BarIn").GetComponent().color = color; } public void SetActive(bool isActive) { gameObject.SetActive(isActive); } public void Show() { gameObject.SetActive(true); } public void Hide() { gameObject.SetActive(false); } public Button_Sprite AddButton(System.Action ClickFunc, System.Action MouseOverOnceFunc, System.Action MouseOutOnceFunc) { Button_Sprite buttonSprite = gameObject.AddComponent(); if (ClickFunc != null) buttonSprite.ClickFunc = ClickFunc; if (MouseOverOnceFunc != null) buttonSprite.MouseOverOnceFunc = MouseOverOnceFunc; if (MouseOutOnceFunc != null) buttonSprite.MouseOutOnceFunc = MouseOutOnceFunc; return buttonSprite; } public void DestroySelf() { if (gameObject != null) { Object.Destroy(gameObject); } } } }