|
|
|
@ -4,8 +4,6 @@ using UnityEngine; |
|
|
|
using UnityEngine.UI; |
|
|
|
using UnityEngine.EventSystems; |
|
|
|
using UnityEngine.InputSystem; |
|
|
|
using static EnemyNode; |
|
|
|
using static UnityEngine.Rendering.DebugUI; |
|
|
|
using System; |
|
|
|
using Unity.VisualScripting; |
|
|
|
using System.Data; |
|
|
|
@ -15,12 +13,11 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
// public Vector3 OriginTransform;
|
|
|
|
//private Vector3 EndTransform;
|
|
|
|
[Header("拖拽参数")] |
|
|
|
public bool follow; |
|
|
|
public Transform originalParent; |
|
|
|
public Vector3 originalpoint; |
|
|
|
|
|
|
|
public EventSystem eventSystem; |
|
|
|
bool canUse = true;//决定卡牌是否可以释放
|
|
|
|
public bool canUse = true;//决定卡牌是否可以释放
|
|
|
|
bool choosed;//标识卡牌是否被选中
|
|
|
|
|
|
|
|
[Header("贝塞尔曲线瞄准")] |
|
|
|
@ -29,12 +26,25 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
[Header("影响格参数")] |
|
|
|
public MapUnity currentNode;//瞄准的格子
|
|
|
|
|
|
|
|
[Header("卡牌拖拽状态")] |
|
|
|
public CardDragState dragState = CardDragState.noDrag ; |
|
|
|
public enum CardDragState |
|
|
|
{ |
|
|
|
onBeginDrag, |
|
|
|
onDrag, |
|
|
|
onEndDrag, |
|
|
|
noDrag |
|
|
|
} |
|
|
|
PointerEventData eventData; |
|
|
|
List<RaycastResult> result = new List<RaycastResult>(); |
|
|
|
|
|
|
|
//[Header("卡牌属性")]
|
|
|
|
private CardEntity cardEntity; |
|
|
|
public bool ready;//是否已到达可释放位置
|
|
|
|
|
|
|
|
[Header("卡牌属性")] |
|
|
|
public List<MapUnity> castingPool;//卡牌打出范围
|
|
|
|
|
|
|
|
private CardEntity cardEntity; |
|
|
|
|
|
|
|
[Header("射线图层剔除")] |
|
|
|
public LayerMask layerMask; |
|
|
|
|
|
|
|
@ -43,6 +53,11 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
|
|
|
|
void Start() |
|
|
|
{ |
|
|
|
originalParent = gameObject.transform.parent; |
|
|
|
dragState = CardDragState.noDrag; |
|
|
|
eventSystem = GameObject.FindObjectOfType<EventSystem>(); |
|
|
|
eventData = new PointerEventData(eventSystem); |
|
|
|
|
|
|
|
cardOnMouseEnter = GetComponent<CardOnMouseEnter>(); |
|
|
|
|
|
|
|
eventSystem = GameObject.FindObjectOfType<EventSystem>(); |
|
|
|
@ -54,7 +69,177 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
{ |
|
|
|
handleRightClickCancel(); |
|
|
|
|
|
|
|
|
|
|
|
if (dragState != CardDragState.noDrag && dragState != CardDragState.onDrag) |
|
|
|
{ |
|
|
|
//UI射线检测
|
|
|
|
eventData.position = Mouse.current.position.value; |
|
|
|
|
|
|
|
eventSystem.RaycastAll(eventData, result); |
|
|
|
if (result.Count > 0) |
|
|
|
{ |
|
|
|
Debug.Log(result[0].gameObject.name); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
switch (dragState) |
|
|
|
{ |
|
|
|
case CardDragState.onBeginDrag: |
|
|
|
if(choosed ==false ) |
|
|
|
{ |
|
|
|
TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.useCard; |
|
|
|
CardChoose(eventData); |
|
|
|
dragState = CardDragState.onDrag; |
|
|
|
} |
|
|
|
break; |
|
|
|
case CardDragState.onDrag: |
|
|
|
CardFollow(); |
|
|
|
if (Mouse.current.leftButton.wasReleasedThisFrame && ready) |
|
|
|
{ |
|
|
|
dragState = CardDragState.onEndDrag; |
|
|
|
} |
|
|
|
break; |
|
|
|
case CardDragState.onEndDrag: |
|
|
|
TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.none; |
|
|
|
CardUse(); |
|
|
|
break; |
|
|
|
case CardDragState.noDrag: |
|
|
|
if (Mouse.current.leftButton.wasReleasedThisFrame && GameManager.Instance.onDrag == false) |
|
|
|
{ |
|
|
|
eventData.position = Mouse.current.position.value; |
|
|
|
|
|
|
|
eventSystem.RaycastAll(eventData, result); |
|
|
|
if (result.Count > 0) |
|
|
|
{ |
|
|
|
Debug.Log(result[0].gameObject.name); |
|
|
|
if (result[0].gameObject == this.gameObject) |
|
|
|
{ |
|
|
|
dragState = CardDragState.onBeginDrag; |
|
|
|
GameManager.Instance.onDrag = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//卡片动作
|
|
|
|
//开始选中
|
|
|
|
public void CardChoose(PointerEventData eventData) |
|
|
|
{ |
|
|
|
banActionCardCheck(); |
|
|
|
disArmCheck(); |
|
|
|
costCheck(); |
|
|
|
disCardCheck(); |
|
|
|
if (!cardEntity.canUse) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
choosed = true; |
|
|
|
|
|
|
|
GetComponent<CanvasGroup>().blocksRaycasts = false; |
|
|
|
originalpoint = this.transform.localPosition; |
|
|
|
|
|
|
|
transform.SetParent(transform.parent.parent); |
|
|
|
transform.position = eventData.position; |
|
|
|
GetComponent<RectTransform>().localScale = cardOnMouseEnter.targetScale; |
|
|
|
|
|
|
|
//根据卡牌数据决定是否调用曲线
|
|
|
|
if (cardEntity.cardOriginalData.CastingRange != 0) |
|
|
|
{ |
|
|
|
//释放范围为0则不需要调用曲线
|
|
|
|
ainPanle.SetActive(true); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
ainPanle.SetActive(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//拖拽中
|
|
|
|
public void CardFollow() |
|
|
|
{ |
|
|
|
if (!cardEntity.canUse) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
dyeing(); |
|
|
|
|
|
|
|
eventData.position = Mouse.current.position.value; |
|
|
|
|
|
|
|
eventSystem.RaycastAll(eventData, result); |
|
|
|
Debug.Log(result[0].gameObject.name); |
|
|
|
if (result.Count > 0) |
|
|
|
{ |
|
|
|
if(result[0].gameObject.name == "TotalPanel") |
|
|
|
{ |
|
|
|
if( ready == false) |
|
|
|
{ |
|
|
|
ready = true; |
|
|
|
} |
|
|
|
transform.position = cardOnMouseEnter.originPoint; |
|
|
|
if (cardEntity.cardOriginalData.CastingRange != 0) |
|
|
|
{ |
|
|
|
ainPanleWork(eventData); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
noAinPanleWork(eventData); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if(ready ==true ) |
|
|
|
{ |
|
|
|
resetComponentPosition(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
transform.position = eventData.position; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
// if (eventData.pointerCurrentRaycast.gameObject.name == )
|
|
|
|
// {
|
|
|
|
// follow = false;
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// follow = true;
|
|
|
|
// }
|
|
|
|
// if (follow == true)
|
|
|
|
// {
|
|
|
|
// transform.position = eventData.position;
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// transform.position = CardActiveSort.Instance.preparePoint.transform.position;
|
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
//卡牌释放
|
|
|
|
public void CardUse() |
|
|
|
{ |
|
|
|
GameManager.Instance.onDrag = false; |
|
|
|
|
|
|
|
if (canUse) |
|
|
|
{ |
|
|
|
CardActiveSort.Instance.ReflashCardPoint(); |
|
|
|
StartCoroutine(OnDragIEnumerator(eventData)); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
canUse = true; |
|
|
|
resetComponentPosition(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//检查卡牌的费用是否可以释放
|
|
|
|
private void costCheck() |
|
|
|
{ |
|
|
|
@ -157,13 +342,17 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
} |
|
|
|
cardEntity.influencePreviewPool.Clear(); |
|
|
|
|
|
|
|
|
|
|
|
ready = false; |
|
|
|
GameManager.Instance.onDrag = false; |
|
|
|
dragState = CardDragState.noDrag; |
|
|
|
choosed = false; |
|
|
|
canUse = true;//取消释放
|
|
|
|
ainPanle.SetActive(false); |
|
|
|
//其他位置都归位
|
|
|
|
transform.SetParent(originalParent); |
|
|
|
GetComponent<CanvasGroup>().blocksRaycasts = true; |
|
|
|
transform.localScale = new Vector3(1f, 1f, 1f); |
|
|
|
// transform.position = originalpoint;
|
|
|
|
// CardActiveSort.Instance.ReflashCardPoint();
|
|
|
|
|
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
@ -172,49 +361,14 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
{ |
|
|
|
|
|
|
|
if (choosed && Mouse.current.rightButton.wasPressedThisFrame) |
|
|
|
{ |
|
|
|
GameManager.Instance.onDrag = false; |
|
|
|
Debug.Log("取消释放"); |
|
|
|
canUse = false;//取消释放
|
|
|
|
ainPanle.SetActive(false); |
|
|
|
{ |
|
|
|
resetComponentPosition(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void OnBeginDrag(PointerEventData eventData) |
|
|
|
{ |
|
|
|
// if (GameObject.Find("CardPanel") != null)
|
|
|
|
// graphicRaycaster = GameObject.Find("CardPanel").GetComponent<GraphicRaycaster>();
|
|
|
|
banActionCardCheck(); |
|
|
|
disArmCheck(); |
|
|
|
costCheck(); |
|
|
|
disCardCheck(); |
|
|
|
if (!cardEntity.canUse) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
GameManager.Instance.onDrag = true; |
|
|
|
choosed = true; |
|
|
|
|
|
|
|
GetComponent<CanvasGroup>().blocksRaycasts = false; |
|
|
|
|
|
|
|
originalParent = this.gameObject.transform.parent; |
|
|
|
originalpoint = this.transform.localPosition; |
|
|
|
|
|
|
|
transform.SetParent(transform.parent.parent); |
|
|
|
transform.position = eventData.position; |
|
|
|
GetComponent<RectTransform>().localScale = cardOnMouseEnter.targetScale; |
|
|
|
|
|
|
|
//根据卡牌数据决定是否调用曲线
|
|
|
|
if (cardEntity.cardOriginalData.CastingRange != 0) |
|
|
|
{ |
|
|
|
//释放范围为0则不需要调用曲线
|
|
|
|
ainPanle.SetActive(true); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
ainPanle.SetActive(false); |
|
|
|
} |
|
|
|
dragState = CardDragState.onBeginDrag; |
|
|
|
} |
|
|
|
|
|
|
|
private void ainPanleWork(PointerEventData eventData) |
|
|
|
@ -358,38 +512,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
|
|
|
|
public void OnDrag(PointerEventData eventData) |
|
|
|
{ |
|
|
|
if (!cardEntity.canUse) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (cardEntity.cardOriginalData.CastingRange != 0) |
|
|
|
{ |
|
|
|
ainPanleWork(eventData); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
noAinPanleWork(eventData); |
|
|
|
} |
|
|
|
dyeing(); |
|
|
|
|
|
|
|
Debug.Log(eventData.pointerCurrentRaycast.gameObject.name); |
|
|
|
if (eventData.pointerCurrentRaycast.gameObject.name == "TotalPanel") |
|
|
|
{ |
|
|
|
follow = false; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
follow = true; |
|
|
|
} |
|
|
|
if (follow == true ) |
|
|
|
{ |
|
|
|
transform.position = eventData.position; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
transform.position = CardActiveSort .Instance .preparePoint .transform .position ; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void dyeing() |
|
|
|
@ -405,9 +528,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
|
|
|
|
public void OnEndDrag(PointerEventData eventData) |
|
|
|
{ |
|
|
|
GameManager.Instance.onDrag = false; |
|
|
|
|
|
|
|
StartCoroutine(OnDragIEnumerator(eventData)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private IEnumerator OnDragIEnumerator(PointerEventData eventData) |
|
|
|
@ -431,41 +552,23 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag |
|
|
|
//先判断该卡牌的类型是否是需要范围
|
|
|
|
if (cardEntity.cardOriginalData.CastingRange != 0) |
|
|
|
{ |
|
|
|
//检测碰撞的地图节点是否被影响(可释放)
|
|
|
|
if (currentNode == null || currentNode.influenced == false) |
|
|
|
if(currentNode != null&& currentNode.influenced) |
|
|
|
{ |
|
|
|
//遍历范围预览池消除影响色(红色,卡牌的释放范围)
|
|
|
|
foreach (MapUnity mapUnity in MapUnityManager.Instance.castPool) |
|
|
|
{ |
|
|
|
mapUnity.influenced = false; |
|
|
|
} |
|
|
|
MapUnityManager.Instance.castPool.Clear(); |
|
|
|
} |
|
|
|
else if (currentNode.influenced) |
|
|
|
{ |
|
|
|
|
|
|
|
//卡牌释放效果
|
|
|
|
yield return StartCoroutine(cardEntity.settle(0)); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
cardEntity.influencePreviewPool.Clear(); |
|
|
|
GetComponent<CanvasGroup>().blocksRaycasts = true; |
|
|
|
|
|
|
|
//其他位置都归位
|
|
|
|
transform.SetParent(originalParent); |
|
|
|
transform.localPosition = originalpoint; |
|
|
|
yield break; |
|
|
|
else |
|
|
|
{ |
|
|
|
resetComponentPosition(); |
|
|
|
} |
|
|
|
}//范围类,需要指定被影响的节点才能释放
|
|
|
|
else |
|
|
|
{ |
|
|
|
//卡牌释放效果
|
|
|
|
yield return StartCoroutine(cardEntity.settle(0)); |
|
|
|
|
|
|
|
yield break; |
|
|
|
|
|
|
|
}//无范围类,直接释放
|
|
|
|
|
|
|
|
}//无范围类,直接释放
|
|
|
|
yield break; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
|