using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class TestData
{
public int _Id;
public int _Num;
}
public class DragManager
{
private static DragManager _DragManager;
public static DragManager GetInstance()
{
if (null == _DragManager)
{
_DragManager = new DragManager();
}
return _DragManager;
}
DragItem _DragItem = null;
}
// 在item身上 - 拖拽出另一个item ,没有下阵一说
public class Item : MonoBehaviour {
public UISprite _Item; // 要拖拽的item 身上要加
UIEventListener _UIEventListener = null;
TestData _TestData = null;
void Start () {
_UIEventListener = _Item.gameObject.GetComponent<UIEventListener>();
if(_UIEventListener == null)
{
_Item.gameObject.AddComponent<UIEventListener>();
_UIEventListener = _Item.gameObject.GetComponent<UIEventListener>();
}
if (_UIEventListener != null)
{
_UIEventListener.onPress = Press;
_UIEventListener.onDrag = Drag;
}
}
/// <summary>
/// 根据data设置数据
/// </summary>
private void SetData(TestData data)
{
_TestData = data;
}
private void Drag(GameObject obj, Vector2 delta)
{
DragManager.GetInstance()._DragItem.OnDragDropMove(delta);
}
private void Press(GameObject obj, bool isPressed)
{
if (isPressed)
{
// 开始拖拽
DragManager.GetInstance()._DragItem.OnDragStart(obj, _TestData);
}
else
{
// 拖拽完毕
DragManager.GetInstance()._DragItem.OnDragEnd();
}
}
}
// 上阵,下阵一说
public class ZhenRongItem : UIDragDropItem {
public UITexture _Head; // 要拖拽的item 身上要加
UIEventListener _UIEventListener = null;
public long _HeroGuid = -1;
public int _Pos = -1;
void Start () {
_UIEventListener = _Head.gameObject.GetComponent<UIEventListener>();
if(_UIEventListener == null)
{
_Head.gameObject.AddComponent<UIEventListener>();
_UIEventListener = _Head.gameObject.GetComponent<UIEventListener>();
}
if (_UIEventListener != null)
{
_UIEventListener.onPress = Press;
}
}
/// <summary>
/// 根据data设置数据
/// </summary>
private void Flush(int pos, long heroGuid)
{
_Pos = pos;
_HeroGuid = heroGuid;
}
private void Press(GameObject obj, bool isPressed)
{
if (isPressed) // 设置拖拽的时候 - icon的显示隐藏
{
_Head.depth += 2;
}
else
{
_Head.depth -= 2;
}
}
protected override void OnDragDropStart()
{
base.OnDragDropStart();
}
// 拖拽结束处理
protected override void OnDragDropRelease(GameObject surface)
{
base.OnDragDropRelease(surface);
List<int> layers = new List<int>();
layers.Add(LayerMask.NameToLayer(LayerManger.UI));
List<RaycastHit> hits = RayCast.GetHitResultByScreenPoint(UICamera.currentTouch.pos, layers, UICamera.currentCamera);
for (int i = 0; i < hits.Count; i++)
{
// 判断为未移动,不交换也不下阵
if (hits[i].collider.transform.parent == gameObject.transform.parent && hits[i].collider.gameObject != gameObject)
{
transform.localPosition = Vector3.zero;
return;
}
}
ShouchengHeroIcon heroIcon = surface.GetComponent<ShouchengHeroIcon>();
if (heroIcon == null)
{
//下阵
transform.localPosition = Vector3.zero;
Flush(_Pos, -1);
// 发送下阵消息
ClientEvent eve = new ClientEvent();
eve.AddParameter(_HeroGuid);
ClientEventManager.GetInstance().ActiveEvent(NTFrame.GameEvent.GameEventID.GEAddShouchengHeroInfo, eve);
return;
}
// 换阵
transform.localPosition = Vector3.zero;
long tempHeroId = _HeroGuid;
Flush(_Pos, heroIcon._HeroGuid);
heroIcon.Flush(heroIcon._Pos, tempHeroId);
// 发送换阵容消息
ClientEvent eve1 = new ClientEvent();
eve1.AddParameter(_Pos);
eve1.AddParameter(_HeroGuid);
eve1.AddParameter(heroIcon._Pos);
eve1.AddParameter(heroIcon._HeroGuid);
ClientEventManager.GetInstance().ActiveEvent(NTFrame.GameEvent.GameEventID.GEExchangeShouchengHeroInfo, eve1);
}
}
public class DragItem : MonoBehaviour {
private UIRoot _Root;
private UITexture _HeadIcon = null; // icon 这个信息和你拖拽的item一样东西
TestData _TestData = null;
void Awake()
{
_Root = NGUITools.FindInParents<UIRoot>(transform.parent);
}
/// <summary>
/// 开始拖拽 - 设置数据
/// </summary>
public void OnDragStart(GameObject obj, TestData data)
{
if (obj == null)
{
return;
}
_TestData = data;
// 拖拽item初始位置是被拖拽的位置
transform.localPosition = obj.transform.localPosition + obj.transform.parent.localPosition + obj.transform.parent.parent.localPosition + obj.transform.parent.parent.parent.localPosition;
UITools.setActive(gameObject, true);
// 下面-根据具体情况-设置数据
}
/// <summary>
/// 拖拽中 - 更新item位置
/// </summary>
public void OnDragDropMove(Vector2 delta)
{
transform.localPosition += (Vector3)(delta * _Root.pixelSizeAdjustment);
}
/// <summary>
/// 拖拽结束 - 更新结果
/// </summary>
public void OnDragEnd()
{
UITools.setActive(gameObject, false); //隐藏obj
UITools.ClearTexture(_HeadIcon);// 清楚UI
// 拖拽完毕 刷新结果
List<int> layers = new List<int>();
layers.Add(LayerMask.NameToLayer(LayerManger.UI));
List<RaycastHit> hits = RayCast.GetHitResultByScreenPoint(UICamera.currentTouch.pos, layers, UICamera.currentCamera);
Item _Item = null;
for (int i = 0; i < hits.Count; i++) // 鼠标点击的位置 - 检测射线 -
{
_Item = hits[i].collider.GetComponent<Item>();
if (_Item != null)
{
break;
}
}
if (_Item == null)
{
return;
}
// 拖拽成功
// 需要怎么设置就怎么设置数据了
}
}