2025-03-10 10:18:11 +08:00

157 lines
5.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using ZXK.UTility;
using DG.Tweening;
/*******************************************************************************
*Create By CG
*Function 每个工具控制
*******************************************************************************/
namespace ZXK.ZPS
{
public class UIToolItemCtrl : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
[SerializeField]//每个工具图片载体
private Image _itemToolImg = null;
[SerializeField]//每个工具图片载体
private Text _itemName = null;
[SerializeField]//背景常态和选中,,文本常态和选中
private Sprite[] _defaultAndSelectBg = null;
private Transform _toolContainerTran = null;
private Transform _toolSelectContainerTran = null;
private Transform _toolTempContainerTran = null;
private string _toolName = null;
private RectTransform _rectTransform = null;
private int _originalPosIndex = 0;
private bool _isMove = false;
[MyReadOnly]
public bool _IsToolSelectState = false;
/// <summary>
/// 初始化工具
/// </summary>
/// <param name="toolName">工具名字</param>
/// <param name="toolParent">所有工具父物体</param>
/// <param name="toolTempParent">临时工具箱</param>
/// <param name="toolSelectParent">选中的工具父物体</param>
public void InitToolItem(string toolName, Sprite toolImg, Transform toolParent, Transform toolTempParent, Transform toolSelectParent)
{
_rectTransform = GetComponent<RectTransform>();
transform.name = _toolName = toolName;
_itemName.text = toolName;
if (toolImg != null)
{
_itemToolImg.sprite = toolImg;
}
_toolContainerTran = toolParent;
_toolTempContainerTran = toolTempParent;
_toolSelectContainerTran = toolSelectParent;
_originalPosIndex = transform.GetSiblingIndex();
}
public void SetLight(bool isNext)
{
_isMove = isNext;
transform.Find("TxtBg").GetComponent<Image>().sprite= _isMove ? _defaultAndSelectBg[3] : _defaultAndSelectBg[2];
transform.GetComponent<Image>().sprite = _isMove ? _defaultAndSelectBg[1] : _defaultAndSelectBg[0];
//transform.GetComponent<Image>().color = _isMove ? Color.yellow : Color.white;
if (_isMove)
transform.GetComponent<Image>().DOFade(0.3f, 0.5f).SetLoops(-1, LoopType.Yoyo).SetId("ToolLight");
else
DOTween.Kill("ToolLight");
}
public void SetDefault()
{
_isMove = false;
DOTween.Kill("ToolLight");
transform.Find("TxtBg").GetComponent<Image>().sprite = _isMove ? _defaultAndSelectBg[3] : _defaultAndSelectBg[2];
transform.GetComponent<Image>().sprite = _isMove ? _defaultAndSelectBg[1] : _defaultAndSelectBg[0];
//transform.GetComponent<Image>().color = _isMove ? Color.yellow : Color.white;
transform.SetParent(_toolContainerTran);
}
public void OnBeginDrag(PointerEventData eventData)
{
if (GameRoot.Instance._CurModel == EnumCtrl.Model.Train)
{
if (_isMove)
{
//Debug.Log("开始移动");
transform.SetParent(_toolTempContainerTran);
}
}
else
{
//Debug.Log("开始移动");
transform.SetParent(_toolTempContainerTran);
}
}
public void OnDrag(PointerEventData eventData)
{
if (GameRoot.Instance._CurModel == EnumCtrl.Model.Train)
{
if (_isMove)
{
Vector3 pos;
RectTransformUtility.ScreenPointToWorldPointInRectangle(_rectTransform, eventData.position, eventData.enterEventCamera, out pos);
_rectTransform.position = pos;
}
}
else
{
Vector3 pos;
RectTransformUtility.ScreenPointToWorldPointInRectangle(_rectTransform, eventData.position, eventData.enterEventCamera, out pos);
_rectTransform.position = pos;
}
}
public void OnEndDrag(PointerEventData eventData)
{
if (GameRoot.Instance._CurModel == EnumCtrl.Model.Train)
{
if (_isMove)
{
if (RectTransformUtility.RectangleContainsScreenPoint(_toolSelectContainerTran.parent.GetComponent<RectTransform>(), eventData.position))
{
//Debug.Log("在内部");
_IsToolSelectState = true;
transform.SetParent(_toolSelectContainerTran);
}
else
{
//Debug.Log("在外部");
_IsToolSelectState = false;
transform.SetParent(_toolContainerTran);
transform.SetSiblingIndex(_originalPosIndex);
}
}
}
else
{
if (RectTransformUtility.RectangleContainsScreenPoint(_toolSelectContainerTran.parent.GetComponent<RectTransform>(), eventData.position))
{
//Debug.Log("在内部");
_IsToolSelectState = true;
transform.SetParent(_toolSelectContainerTran);
}
else
{
//Debug.Log("在外部");
_IsToolSelectState = false;
transform.SetParent(_toolContainerTran);
transform.SetSiblingIndex(_originalPosIndex);
}
}
}
}
}