summaryrefslogtreecommitdiff
path: root/Pathfinding Visualizer/Assets/CodeMonkey/Utils/Button_Sprite.cs
diff options
context:
space:
mode:
authorSimon O'Shea <osheas1@wit.edu>2023-07-31 18:45:01 -0400
committerSimon O'Shea <osheas1@wit.edu>2023-07-31 18:45:01 -0400
commit5f9e8f979deb94e9219113ed09b49142c040cb57 (patch)
treea67bd606205f7fb28e48d351028b3478bc49145b /Pathfinding Visualizer/Assets/CodeMonkey/Utils/Button_Sprite.cs
parent4699ce72871eaa6ee27c01971383b9d1fced1946 (diff)
import successful, grid has visuals
cell values and grid lines are displayed. no interaction available yet.
Diffstat (limited to 'Pathfinding Visualizer/Assets/CodeMonkey/Utils/Button_Sprite.cs')
-rw-r--r--Pathfinding Visualizer/Assets/CodeMonkey/Utils/Button_Sprite.cs212
1 files changed, 212 insertions, 0 deletions
diff --git a/Pathfinding Visualizer/Assets/CodeMonkey/Utils/Button_Sprite.cs b/Pathfinding Visualizer/Assets/CodeMonkey/Utils/Button_Sprite.cs
new file mode 100644
index 0000000..da3a5c9
--- /dev/null
+++ b/Pathfinding Visualizer/Assets/CodeMonkey/Utils/Button_Sprite.cs
@@ -0,0 +1,212 @@
+/*
+ ------------------- 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
+ --------------------------------------------------
+ */
+
+//#define SOUND_MANAGER // Has Sound_Manager in project
+//#define CURSOR_MANAGER // Has Cursor_Manager in project
+
+using System;
+using UnityEngine;
+using System.Collections.Generic;
+using UnityEngine.EventSystems;
+
+namespace CodeMonkey.Utils {
+
+ /*
+ * Button Actions on a World BoxCollider
+ * */
+ public class Button_Sprite : MonoBehaviour {
+
+ private static Func<Camera> GetWorldCamera;
+
+ public static void SetGetWorldCamera(Func<Camera> GetWorldCamera) {
+ Button_Sprite.GetWorldCamera = GetWorldCamera;
+ }
+
+
+
+
+
+ public Action ClickFunc = null;
+ public Action MouseRightDownOnceFunc = null;
+ public Action MouseRightDownFunc = null;
+ public Action MouseRightUpFunc = null;
+ public Action MouseDownOnceFunc = null;
+ public Action MouseUpOnceFunc = null;
+ public Action MouseOverOnceFunc = null;
+ public Action MouseOutOnceFunc = null;
+ public Action MouseOverOnceTooltipFunc = null;
+ public Action MouseOutOnceTooltipFunc = null;
+
+ private bool draggingMouseRight;
+ private Vector3 mouseRightDragStart;
+ public Action<Vector3, Vector3> MouseRightDragFunc = null;
+ public Action<Vector3, Vector3> MouseRightDragUpdateFunc = null;
+ public bool triggerMouseRightDragOnEnter = false;
+
+ public enum HoverBehaviour {
+ Custom,
+ Change_Color,
+ Change_Image,
+ Change_SetActive,
+ }
+ public HoverBehaviour hoverBehaviourType = HoverBehaviour.Custom;
+ private Action hoverBehaviourFunc_Enter, hoverBehaviourFunc_Exit;
+
+ public Color hoverBehaviour_Color_Enter = new Color(1, 1, 1, 1), hoverBehaviour_Color_Exit = new Color(1, 1, 1, 1);
+ public SpriteRenderer hoverBehaviour_Image;
+ public Sprite hoverBehaviour_Sprite_Exit, hoverBehaviour_Sprite_Enter;
+ public bool hoverBehaviour_Move = false;
+ public Vector2 hoverBehaviour_Move_Amount = Vector2.zero;
+ private Vector3 posExit, posEnter;
+ public bool triggerMouseOutFuncOnClick = false;
+ public bool clickThroughUI = false;
+
+ private Action internalOnMouseDownFunc = null, internalOnMouseEnterFunc = null, internalOnMouseExitFunc = null;
+
+#if SOUND_MANAGER
+ public Sound_Manager.Sound mouseOverSound, mouseClickSound;
+#endif
+#if CURSOR_MANAGER
+ public CursorManager.CursorType cursorMouseOver, cursorMouseOut;
+#endif
+
+
+
+
+ public void SetHoverBehaviourChangeColor(Color colorOver, Color colorOut) {
+ hoverBehaviourType = HoverBehaviour.Change_Color;
+ hoverBehaviour_Color_Enter = colorOver;
+ hoverBehaviour_Color_Exit = colorOut;
+ if (hoverBehaviour_Image == null) hoverBehaviour_Image = transform.GetComponent<SpriteRenderer>();
+ hoverBehaviour_Image.color = hoverBehaviour_Color_Exit;
+ SetupHoverBehaviour();
+ }
+ void OnMouseDown() {
+ if (!clickThroughUI && IsPointerOverUI()) return; // Over UI!
+
+ if (internalOnMouseDownFunc != null) internalOnMouseDownFunc();
+ if (ClickFunc != null) ClickFunc();
+ if (MouseDownOnceFunc != null) MouseDownOnceFunc();
+ if (triggerMouseOutFuncOnClick) OnMouseExit();
+ }
+ public void Manual_OnMouseExit() {
+ OnMouseExit();
+ }
+ void OnMouseUp() {
+ if (MouseUpOnceFunc != null) MouseUpOnceFunc();
+ }
+ void OnMouseEnter() {
+ if (!clickThroughUI && IsPointerOverUI()) return; // Over UI!
+
+ if (internalOnMouseEnterFunc != null) internalOnMouseEnterFunc();
+ if (hoverBehaviour_Move) transform.localPosition = posEnter;
+ if (hoverBehaviourFunc_Enter != null) hoverBehaviourFunc_Enter();
+ if (MouseOverOnceFunc != null) MouseOverOnceFunc();
+ if (MouseOverOnceTooltipFunc != null) MouseOverOnceTooltipFunc();
+ }
+ void OnMouseExit() {
+ if (internalOnMouseExitFunc != null) internalOnMouseExitFunc();
+ if (hoverBehaviour_Move) transform.localPosition = posExit;
+ if (hoverBehaviourFunc_Exit != null) hoverBehaviourFunc_Exit();
+ if (MouseOutOnceFunc != null) MouseOutOnceFunc();
+ if (MouseOutOnceTooltipFunc != null) MouseOutOnceTooltipFunc();
+ }
+
+ void OnMouseOver() {
+ if (!clickThroughUI && IsPointerOverUI()) return; // Over UI!
+
+ if (Input.GetMouseButton(1)) {
+ if (MouseRightDownFunc != null) MouseRightDownFunc();
+ if (!draggingMouseRight && triggerMouseRightDragOnEnter) {
+ draggingMouseRight = true;
+ mouseRightDragStart = GetWorldPositionFromUI();
+ }
+ }
+ if (Input.GetMouseButtonDown(1)) {
+ draggingMouseRight = true;
+ mouseRightDragStart = GetWorldPositionFromUI();
+ if (MouseRightDownOnceFunc != null) MouseRightDownOnceFunc();
+ }
+ }
+ void Update() {
+ if (draggingMouseRight) {
+ if (MouseRightDragUpdateFunc != null) MouseRightDragUpdateFunc(mouseRightDragStart, GetWorldPositionFromUI());
+ }
+ if (Input.GetMouseButtonUp(1)) {
+ if (draggingMouseRight) {
+ draggingMouseRight = false;
+ if (MouseRightDragFunc != null) MouseRightDragFunc(mouseRightDragStart, GetWorldPositionFromUI());
+ }
+ if (MouseRightUpFunc != null) MouseRightUpFunc();
+ }
+ }
+
+
+ void Awake() {
+ if (GetWorldCamera == null) SetGetWorldCamera(() => Camera.main); // Set default World Camera
+ posExit = transform.localPosition;
+ posEnter = transform.localPosition + (Vector3)hoverBehaviour_Move_Amount;
+ SetupHoverBehaviour();
+
+#if SOUND_MANAGER
+ // Sound Manager
+ internalOnMouseDownFunc += () => { if (mouseClickSound != Sound_Manager.Sound.None) Sound_Manager.PlaySound(mouseClickSound); };
+ internalOnMouseEnterFunc += () => { if (mouseOverSound != Sound_Manager.Sound.None) Sound_Manager.PlaySound(mouseOverSound); };
+#endif
+
+#if CURSOR_MANAGER
+ // Cursor Manager
+ internalOnMouseExitFunc += () => { if (cursorMouseOut != CursorManager.CursorType.None) CursorManager.SetCursor(cursorMouseOut); };
+ internalOnMouseEnterFunc += () => { if (cursorMouseOver != CursorManager.CursorType.None) CursorManager.SetCursor(cursorMouseOver); };
+#endif
+ }
+ private void SetupHoverBehaviour() {
+ switch (hoverBehaviourType) {
+ case HoverBehaviour.Change_Color:
+ hoverBehaviourFunc_Enter = delegate () { hoverBehaviour_Image.color = hoverBehaviour_Color_Enter; };
+ hoverBehaviourFunc_Exit = delegate () { hoverBehaviour_Image.color = hoverBehaviour_Color_Exit; };
+ break;
+ case HoverBehaviour.Change_Image:
+ hoverBehaviourFunc_Enter = delegate () { hoverBehaviour_Image.sprite = hoverBehaviour_Sprite_Enter; };
+ hoverBehaviourFunc_Exit = delegate () { hoverBehaviour_Image.sprite = hoverBehaviour_Sprite_Exit; };
+ break;
+ case HoverBehaviour.Change_SetActive:
+ hoverBehaviourFunc_Enter = delegate () { hoverBehaviour_Image.gameObject.SetActive(true); };
+ hoverBehaviourFunc_Exit = delegate () { hoverBehaviour_Image.gameObject.SetActive(false); };
+ break;
+ }
+ }
+
+
+
+
+
+
+
+ private static Vector3 GetWorldPositionFromUI() {
+ Vector3 worldPosition = GetWorldCamera().ScreenToWorldPoint(Input.mousePosition);
+ return worldPosition;
+ }
+ private static bool IsPointerOverUI() {
+ if (EventSystem.current.IsPointerOverGameObject()) {
+ return true;
+ } else {
+ PointerEventData pe = new PointerEventData(EventSystem.current);
+ pe.position = Input.mousePosition;
+ List<RaycastResult> hits = new List<RaycastResult>();
+ EventSystem.current.RaycastAll(pe, hits);
+ return hits.Count > 0;
+ }
+ }
+ }
+
+} \ No newline at end of file