/**************************************************************************** * 2021.10 DESKTOP-PBQ45G2 ****************************************************************************/ using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using QFramework; namespace QFramework { public enum ToolStatus { Normal, Select, Hint } public delegate void ToolElementEventHandle(object sender, ToolElement e); public partial class ToolElement : UIElement { private ToolStatus mtoolStatus; public ToolStatus M_ToolStatus { get { return mtoolStatus; } set { if (mtoolStatus != value) { mtoolStatus = value; OnToolStatusChanged(); } } } public ToolElementEventHandle ToolSelectStatusChanged; private Image toolBtnImg; public Sprite toolBtnNormailSprite; public Sprite toolBtnHighlightSprite; public Sprite toolBtnSelectSprite; public Sprite toolBtnHintSprite; private bool isHintTool = false; public bool IsHintTool { get { return isHintTool; } set { if (isHintTool != value) { isHintTool = value; if (isHintTool) { if (M_ToolStatus == ToolStatus.Select) return; M_ToolStatus = ToolStatus.Hint; } else if (M_ToolStatus == ToolStatus.Hint) { M_ToolStatus = ToolStatus.Normal; } } } } private ToolConfig toolConfig; private void Awake() { toolBtnImg = ToolBtn.GetComponent(); ToolBtn.onClick.AddListener(() => { ToolBtnClick(); }); } private void ToolBtnClick() { if (M_ToolStatus != ToolStatus.Select) { M_ToolStatus = ToolStatus.Select; } else if (isHintTool) { M_ToolStatus = ToolStatus.Hint; } else { M_ToolStatus = ToolStatus.Normal; } if (toolConfig.changedCursor) { Cursor.SetCursor(M_ToolStatus == ToolStatus.Select ? toolConfig.cursor : null, Vector2.zero, CursorMode.Auto); } } /// /// 初始化工具配置 /// /// public void InitConfig(ToolConfig config) { toolConfig = config; ToolImg.sprite = toolConfig.toolImg; if (toolConfig.toolImg == null) { ToolName.text = toolConfig.toolName; } else { ToolName.text = toolConfig.toolImg.name; } } /// /// 清除工具配置 /// public void ClearConfig() { ClearState(); toolConfig = null; } /// /// 清除按钮状态 /// public void ClearState() { IsHintTool = false; M_ToolStatus = ToolStatus.Normal; if (toolConfig.changedCursor) { Cursor.SetCursor(M_ToolStatus == ToolStatus.Select ? toolConfig.cursor : null, Vector2.zero, CursorMode.Auto); } } private void OnToolStatusChanged() { switch (mtoolStatus) { case ToolStatus.Normal: toolBtnImg.sprite = toolBtnNormailSprite; break; case ToolStatus.Select: toolBtnImg.sprite = toolBtnSelectSprite; break; case ToolStatus.Hint: toolBtnImg.sprite = toolBtnHintSprite; break; } ToolSelectStatusChanged?.Invoke(this, this); } } }