using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;
public class FlyBtnScript : MonoBehaviour
{
[Tooltip(" 拖拽时按钮最大位移距离")]
public float MaxDragPosition = 500;
[Tooltip(" 放开时最小起可飞距离")]
public float CanFlyDistance = 300;
[Tooltip(" 按钮起飞后触发距离")]
public float Bnt_TakeEffectDistance = 2000;
public String Msg;
[HideInInspector]
public Button Btn;
[HideInInspector]
public EventTrigger eventTrigger;
[HideInInspector]
public Vector3 AwakePoint;
[HideInInspector]
public Vector3 StartPoint;
[HideInInspector]
public Vector3 EndPoint;
[HideInInspector]
public bool IsDown;
[HideInInspector]
public bool CanMove;
private void Awake()
{
AwakePoint = new Vector3(0.0F, 1.0F, 90.0F);
print(AwakePoint);
}
void Start()
{
Btn = transform.GetComponent<Button>();
eventTrigger = transform.GetComponent<EventTrigger>();
if (eventTrigger == null)
{
eventTrigger = gameObject.AddComponent<EventTrigger>();
}
AddPointerEvent(eventTrigger, EventTriggerType.PointerDown, PointDown);
AddPointerEvent(eventTrigger, EventTriggerType.PointerEnter, PointerEnter);
AddPointerEvent(eventTrigger, EventTriggerType.PointerUp, PointUp);
}
private void PointerEnter(BaseEventData arg0)
{
}
private void PointUp(BaseEventData arg0)
{
print("transform.localPosition.y:" + transform.localPosition.y);
if (transform.localPosition.y > CanFlyDistance)
{
Debug.Log("PointUp:" + transform.name);
EndPoint =Input.mousePosition;
float D = (EndPoint - StartPoint).magnitude;
if (D > 200)
{
CanMove = true;
}
else
{
print("D "+D);
transform.DOMove(AwakePoint, 0.5f);
}
}
else
{
transform.DOMove(AwakePoint, 0.5f);
}
IsDown = false;
}
private Vector3 distance;
private void PointDown(BaseEventData arg0)
{
StartPoint = Input.mousePosition;
distance = transform.localPosition - Input.mousePosition;
IsDown = true;
}
void Update()
{
if (IsDown)
{
if (Vector3.Distance(Input.mousePosition, StartPoint)> MaxDragPosition)
{
Vector3 point = ((Input.mousePosition - AwakePoint)) + AwakePoint;
transform.localPosition = point+distance;
}
else
{
Vector3 mousePositionOnScreen = Input.mousePosition + distance;
transform.localPosition = mousePositionOnScreen;
}
}
if (CanMove)
{
transform.Translate((EndPoint - StartPoint).normalized*10);
if ((transform.position - AwakePoint).magnitude > Bnt_TakeEffectDistance)
{
Invok();
CanMove = false;
}
}
}
public void Invok()
{
SendNetWorkMessage.Instance.SocketSendMessage(Msg);
MessageManager1.Instance.SendMsgToOtherScreen(Msg);
PageManager.Instance.ShowOnePage(2);
Page2Script.Instance.ShowOneTittle(transform.GetSiblingIndex());
}
void AddPointerEvent(EventTrigger eventTrigger, EventTriggerType eventTriggerType, UnityEngine.Events.UnityAction<BaseEventData> callback)
{
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = eventTriggerType;
entry.callback = new EventTrigger.TriggerEvent();
entry.callback.AddListener(callback);
eventTrigger.triggers.Add(entry);
}
}