import successful, grid has visuals
cell values and grid lines are displayed. no interaction available yet.
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
/*
|
||||
------------------- 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 UnityEngine.UI;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace CodeMonkey.Utils {
|
||||
|
||||
/*
|
||||
* Button in the UI
|
||||
* */
|
||||
public class Button_UI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler {
|
||||
|
||||
public Action ClickFunc = null;
|
||||
public Action MouseRightClickFunc = null;
|
||||
public Action MouseMiddleClickFunc = null;
|
||||
public Action MouseDownOnceFunc = null;
|
||||
public Action MouseUpFunc = null;
|
||||
public Action MouseOverOnceTooltipFunc = null;
|
||||
public Action MouseOutOnceTooltipFunc = null;
|
||||
public Action MouseOverOnceFunc = null;
|
||||
public Action MouseOutOnceFunc = null;
|
||||
public Action MouseOverFunc = null;
|
||||
public Action MouseOverPerSecFunc = null; //Triggers every sec if mouseOver
|
||||
public Action MouseUpdate = null;
|
||||
public Action<PointerEventData> OnPointerClickFunc;
|
||||
|
||||
public enum HoverBehaviour {
|
||||
Custom,
|
||||
Change_Color,
|
||||
Change_Color_Auto,
|
||||
Change_Image,
|
||||
Change_SetActive,
|
||||
}
|
||||
public HoverBehaviour hoverBehaviourType = HoverBehaviour.Custom;
|
||||
private Action hoverBehaviourFunc_Enter, hoverBehaviourFunc_Exit;
|
||||
|
||||
public Color hoverBehaviour_Color_Enter, hoverBehaviour_Color_Exit;
|
||||
public Image hoverBehaviour_Image;
|
||||
public Sprite hoverBehaviour_Sprite_Exit, hoverBehaviour_Sprite_Enter;
|
||||
public bool hoverBehaviour_Move = false;
|
||||
public Vector2 hoverBehaviour_Move_Amount = Vector2.zero;
|
||||
private Vector2 posExit, posEnter;
|
||||
public bool triggerMouseOutFuncOnClick = false;
|
||||
private bool mouseOver;
|
||||
private float mouseOverPerSecFuncTimer;
|
||||
|
||||
private Action internalOnPointerEnterFunc = null, internalOnPointerExitFunc = null, internalOnPointerClickFunc = null;
|
||||
|
||||
#if SOUND_MANAGER
|
||||
public Sound_Manager.Sound mouseOverSound, mouseClickSound;
|
||||
#endif
|
||||
#if CURSOR_MANAGER
|
||||
public CursorManager.CursorType cursorMouseOver, cursorMouseOut;
|
||||
#endif
|
||||
|
||||
|
||||
public virtual void OnPointerEnter(PointerEventData eventData) {
|
||||
if (internalOnPointerEnterFunc != null) internalOnPointerEnterFunc();
|
||||
if (hoverBehaviour_Move) transform.GetComponent<RectTransform>().anchoredPosition = posEnter;
|
||||
if (hoverBehaviourFunc_Enter != null) hoverBehaviourFunc_Enter();
|
||||
if (MouseOverOnceFunc != null) MouseOverOnceFunc();
|
||||
if (MouseOverOnceTooltipFunc != null) MouseOverOnceTooltipFunc();
|
||||
mouseOver = true;
|
||||
mouseOverPerSecFuncTimer = 0f;
|
||||
}
|
||||
|
||||
public virtual void OnPointerExit(PointerEventData eventData) {
|
||||
if (internalOnPointerExitFunc != null) internalOnPointerExitFunc();
|
||||
if (hoverBehaviour_Move) transform.GetComponent<RectTransform>().anchoredPosition = posExit;
|
||||
if (hoverBehaviourFunc_Exit != null) hoverBehaviourFunc_Exit();
|
||||
if (MouseOutOnceFunc != null) MouseOutOnceFunc();
|
||||
if (MouseOutOnceTooltipFunc != null) MouseOutOnceTooltipFunc();
|
||||
mouseOver = false;
|
||||
}
|
||||
|
||||
public virtual void OnPointerClick(PointerEventData eventData) {
|
||||
if (internalOnPointerClickFunc != null) internalOnPointerClickFunc();
|
||||
if (OnPointerClickFunc != null) OnPointerClickFunc(eventData);
|
||||
if (eventData.button == PointerEventData.InputButton.Left) {
|
||||
if (triggerMouseOutFuncOnClick) {
|
||||
OnPointerExit(eventData);
|
||||
}
|
||||
if (ClickFunc != null) ClickFunc();
|
||||
}
|
||||
if (eventData.button == PointerEventData.InputButton.Right)
|
||||
if (MouseRightClickFunc != null) MouseRightClickFunc();
|
||||
if (eventData.button == PointerEventData.InputButton.Middle)
|
||||
if (MouseMiddleClickFunc != null) MouseMiddleClickFunc();
|
||||
}
|
||||
|
||||
public void Manual_OnPointerExit() {
|
||||
OnPointerExit(null);
|
||||
}
|
||||
|
||||
public bool IsMouseOver() {
|
||||
return mouseOver;
|
||||
}
|
||||
|
||||
public void OnPointerDown(PointerEventData eventData) {
|
||||
if (MouseDownOnceFunc != null) MouseDownOnceFunc();
|
||||
}
|
||||
|
||||
public void OnPointerUp(PointerEventData eventData) {
|
||||
if (MouseUpFunc != null) MouseUpFunc();
|
||||
}
|
||||
|
||||
private void Update() {
|
||||
if (mouseOver) {
|
||||
if (MouseOverFunc != null) MouseOverFunc();
|
||||
mouseOverPerSecFuncTimer -= Time.unscaledDeltaTime;
|
||||
if (mouseOverPerSecFuncTimer <= 0) {
|
||||
mouseOverPerSecFuncTimer += 1f;
|
||||
if (MouseOverPerSecFunc != null) MouseOverPerSecFunc();
|
||||
}
|
||||
}
|
||||
if (MouseUpdate != null) MouseUpdate();
|
||||
|
||||
}
|
||||
|
||||
private void Awake() {
|
||||
posExit = transform.GetComponent<RectTransform>().anchoredPosition;
|
||||
posEnter = transform.GetComponent<RectTransform>().anchoredPosition + hoverBehaviour_Move_Amount;
|
||||
SetHoverBehaviourType(hoverBehaviourType);
|
||||
|
||||
#if SOUND_MANAGER
|
||||
// Sound Manager
|
||||
internalOnPointerEnterFunc += () => { if (mouseOverSound != Sound_Manager.Sound.None) Sound_Manager.PlaySound(mouseOverSound); };
|
||||
internalOnPointerClickFunc += () => { if (mouseClickSound != Sound_Manager.Sound.None) Sound_Manager.PlaySound(mouseClickSound); };
|
||||
#endif
|
||||
|
||||
#if CURSOR_MANAGER
|
||||
// Cursor Manager
|
||||
internalOnPointerEnterFunc += () => { if (cursorMouseOver != CursorManager.CursorType.None) CursorManager.SetCursor(cursorMouseOver); };
|
||||
internalOnPointerExitFunc += () => { if (cursorMouseOut != CursorManager.CursorType.None) CursorManager.SetCursor(cursorMouseOut); };
|
||||
#endif
|
||||
}
|
||||
|
||||
public void SetHoverBehaviourType(HoverBehaviour hoverBehaviourType) {
|
||||
this.hoverBehaviourType = hoverBehaviourType;
|
||||
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;
|
||||
case HoverBehaviour.Change_Color_Auto:
|
||||
Color color = hoverBehaviour_Image.color;
|
||||
if (color.r >= 1f) color.r = .9f;
|
||||
if (color.g >= 1f) color.g = .9f;
|
||||
if (color.b >= 1f) color.b = .9f;
|
||||
Color colorOver = color * 1.3f; // Over color lighter
|
||||
hoverBehaviourFunc_Enter = delegate () { hoverBehaviour_Image.color = colorOver; };
|
||||
hoverBehaviourFunc_Exit = delegate () { hoverBehaviour_Image.color = color; };
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void RefreshHoverBehaviourType() {
|
||||
SetHoverBehaviourType(hoverBehaviourType);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Class for temporarily intercepting a button action
|
||||
* Useful for Tutorial disabling specific buttons
|
||||
* */
|
||||
public class InterceptActionHandler {
|
||||
|
||||
private Action removeInterceptFunc;
|
||||
|
||||
public InterceptActionHandler(Action removeInterceptFunc) {
|
||||
this.removeInterceptFunc = removeInterceptFunc;
|
||||
}
|
||||
public void RemoveIntercept() {
|
||||
removeInterceptFunc();
|
||||
}
|
||||
}
|
||||
public InterceptActionHandler InterceptActionClick(Func<bool> testPassthroughFunc) {
|
||||
return InterceptAction("ClickFunc", testPassthroughFunc);
|
||||
}
|
||||
public InterceptActionHandler InterceptAction(string fieldName, Func<bool> testPassthroughFunc) {
|
||||
return InterceptAction(GetType().GetField(fieldName), testPassthroughFunc);
|
||||
}
|
||||
public InterceptActionHandler InterceptAction(System.Reflection.FieldInfo fieldInfo, Func<bool> testPassthroughFunc) {
|
||||
Action backFunc = fieldInfo.GetValue(this) as Action;
|
||||
InterceptActionHandler interceptActionHandler = new InterceptActionHandler(() => fieldInfo.SetValue(this, backFunc));
|
||||
fieldInfo.SetValue(this, (Action)delegate () {
|
||||
if (testPassthroughFunc()) {
|
||||
// Passthrough
|
||||
interceptActionHandler.RemoveIntercept();
|
||||
backFunc();
|
||||
}
|
||||
});
|
||||
|
||||
return interceptActionHandler;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user