using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using FSEvent; using FSBattle; using FSRole; using FSAssist; namespace FSCard { /* * 卡片组 * 包含鼠标进入,拖拽等一系列事件的回调 */ public class CardAction : MonoBehaviour, IPointerEnterHandler, IPointerDownHandler, IPointerUpHandler, IBeginDragHandler, IDragHandler { // 给定一个参数保存鼠标按下时候的位置 public Vector3 StartPos { set; get; } // 给定一个参数来保存鼠标移动时候的位置 private Vector3 movePos; // Use this for initialization void Start() { } // Update is called once per frame void Update() { } /* * 鼠标进入时候的回调 */ public void OnPointerEnter(PointerEventData eventData) { Vector3 anchPos = GetComponent().anchoredPosition; } /* * 鼠标按下时的回调 */ public void OnPointerDown(PointerEventData eventData) { // 给起始和移动参数保存值 //startPos = eventData.position; movePos = eventData.position; } /* * 鼠标抬起时的回调 */ public void OnPointerUp(PointerEventData eventData) { print("敌方比较数组 : " + BattleFieldManager.Instance.CpArray.Count); for (int i = 0; i < BattleFieldManager.Instance.CpArray.Count; i++) { Dictionary cpCard = (Dictionary)BattleFieldManager.Instance.CpArray[i]; // 需要保证敌方卡片存在 if (cpCard.ContainsKey(AssistConfig.Enemy) && !cpCard.ContainsKey(AssistConfig.Army)) { Transform trs = cpCard[AssistConfig.Enemy]; // 获取碰撞位置 BoxCollider2D enemyBox = trs.GetComponent(); // 我方碰撞位置 BoxCollider2D roleBox = transform.GetComponent(); // 当接触时 if (enemyBox.bounds.Intersects(roleBox.bounds)) { Card myCard = this.GetComponent(); Card enemyCard = trs.GetComponent(); // 设置目标 myCard.Target = enemyCard.Source; // 需要保证剩下的能量足够 if (myCard.Source.CurrentAttr.Mp >= myCard.Cost) { myCard.Source.CurrentAttr.Mp -= myCard.Cost; // 排列新的位置 transform.position = new Vector3(trs.position.x, Screen.height / 2 - AssistConfig.CpCardHeightSpace, 0); transform.localScale = new Vector3(AssistConfig.CardScale, AssistConfig.CardScale, AssistConfig.CardScale); transform.rotation = Quaternion.Euler(0, 0, 0); Dictionary info = new Dictionary(); info.Add("card", this.transform); info.Add("index", i); EventListener.Instance.PostEvent(EventEnum.EVENT_ARMY_DEAL_CARD, info); info.Add("role", myCard.Source); EventListener.Instance.PostEvent(EventEnum.EVENT_UPDATE_PLAYER_ENGINE, info); } else { // 否则将卡片移回原位 transform.position = StartPos; print("能量不足 ... " + myCard.Source.CurrentAttr.Mp + " - " + myCard.Cost); } return; } } } transform.position = StartPos; } public void OnBeginDrag(PointerEventData eventData) { print("开始拖拽 ... "); } /* * 鼠标拖拽时的回调 */ public void OnDrag(PointerEventData eventData) { // 首先记录下抬起时候的位置 Vector3 endPos = eventData.position; // 计算出卡片拖拽时候的位置,由原位置加上最终位置减去移动位置 Vector3 pos = new Vector3(transform.position.x + (endPos.x - movePos.x), transform.position.y + (endPos.y - movePos.y), 0); // 赋值给当前组件 transform.position = pos; // 再更新移动位置 movePos = endPos; } } }