using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine.EventSystems;
///
///
///
public class InputTouchContorler : MonoBehaviour
{
///////
/////// 玩家的邮件系统发生变化
///////
////public System.EventHandler OnChangeAnimationEvent;
// Use this for initialization
private void Start()
{
Input.multiTouchEnabled = true;
}
#region 点击更改动作/ 拖拽,移动显示位置/ 手指操作,缩放人物大小
///
///
///
private float touchMoveDistance = 800.0f;
//距离最值
private float MaxCameraSize = 15;
///
///
///
private float MinCameraSize = 5;
///
///
///
private float DefaultCameraSize = 13;
///
///
///
private ETouchState curTouch_NumOperateState = ETouchState.Null;
///
///
///
private float CurCameraSize = 13;
///
/// 缩放的进度值
///
private float lastMulityTouch_MoveMagnitude = 0.0f;
//当前手势
private Vector2 lastMulityTouch_MoveDir;
///////
/////// 上次单点触控的操作类型
///////
////private string lastSingleTouch_PhaseName = string.Empty;
///
/// 上次单点触控的鼠标位置
///
private Vector2 lastSingleTouch_Position = Vector2.zero;
///
/// 上次触控操作的 手指数量
///
private ETouchState lastTouch_NumOperateState = ETouchState.Null;
///
/// 是否开启缩放操作监控
///
public bool IsEnterScaleHeroOperate = false;
///
/// 是否开启拖拽操作监控
///
public bool IsEnterDragHeroOperate = false;
///
///
///
private void Update()
{
if (!DragonBonesBGControler.Instance().CheckIsOpenTouchOperatehero())
{
return;
}
//多点触控
if (Input.touchCount > 1)
{
////lastSingleTouch_PhaseName = string.Empty;
curTouch_NumOperateState = ETouchState.two;
if (lastTouch_NumOperateState != curTouch_NumOperateState)
{
lastTouch_NumOperateState = curTouch_NumOperateState;
}
//停止拖拽 移动位置操作
IsEnterScaleHeroOperate = true;
////两只手指都处于移动状态
if (Input.touches[0].phase == TouchPhase.Moved || Input.touches[1].phase == TouchPhase.Moved)
{
////计算移动方向
Vector2 mDir = Input.touches[1].position - Input.touches[0].position;
if (lastMulityTouch_MoveMagnitude < 0.1f)
{
lastMulityTouch_MoveMagnitude = mDir.magnitude;
return;
}
float temp = 5.0f * (Mathf.Abs(lastMulityTouch_MoveMagnitude - mDir.magnitude) / touchMoveDistance);
////LogHelper.LogError("qqwang!!!! CurCameraSize::" + CurCameraSize + " touchDis::" + mDir.magnitude + "lastDis::" + lastMulityTouch_MoveMagnitude + "/// chazhi::" + temp);
////根据向量的大小判断当前手势是放大还是缩小
if (mDir.sqrMagnitude > lastMulityTouch_MoveDir.sqrMagnitude)
{
////CurCameraSize -= speed;
CurCameraSize -= temp;
}
else
{
////CurCameraSize += speed;
CurCameraSize += temp;
}
////更新当前手势
lastMulityTouch_MoveDir = mDir;
lastMulityTouch_MoveMagnitude = mDir.magnitude;
////限制距离
CurCameraSize = Mathf.Clamp(CurCameraSize, MinCameraSize, MaxCameraSize);
}
}
else if (Input.touchCount == 1)
{
lastMulityTouch_MoveDir = Vector2.zero;
lastMulityTouch_MoveMagnitude = 0;
IsEnterScaleHeroOperate = false;
curTouch_NumOperateState = ETouchState.single;
if (lastTouch_NumOperateState == ETouchState.two)
{
lastSingleTouch_Position = Input.touches[0].position;
lastTouch_NumOperateState = ETouchState.single;
return;
}
else
{
if (lastTouch_NumOperateState != curTouch_NumOperateState)
{
lastTouch_NumOperateState = curTouch_NumOperateState;
}
}
switch (Input.GetTouch(0).phase)
{
case TouchPhase.Began:
lastSingleTouch_Position = Input.touches[0].position;
////lastSingleTouch_PhaseName = Input.GetTouch(0).phase.ToString();
break;
case TouchPhase.Moved:
case TouchPhase.Stationary:
Vector2 delta = Input.touches[0].position - lastSingleTouch_Position;
if (delta.sqrMagnitude > 0)
{
IsEnterDragHeroOperate = true;
////lastSingleTouch_PhaseName = Input.GetTouch(0).phase.ToString();
////当前手势 是 拖拽操作
////LogHelper.LogError("qqwang!!!! Input.touchCount==1 》》》Pos:" + Input.touches[0].position + ">>> delta::" + delta.ToString());
lastSingleTouch_Position = Input.touches[0].position;
////更改拖拽的位置
DragonBonesBGControler.Instance().OnChangeModelPosition(delta);
}
break;
case TouchPhase.Ended:
case TouchPhase.Canceled:
IsEnterDragHeroOperate = false;
////if (lastSingleTouch_PhaseName == TouchPhase.Began.ToString())
////{
////if (OnChangeAnimationEvent != null)
////{
//// OnChangeAnimationEvent.Invoke(null, EventArgs.Empty);
////}
////}
break;
}
}
else
{
lastMulityTouch_MoveMagnitude = 0;
lastMulityTouch_MoveDir = Vector2.zero;
lastSingleTouch_Position = Vector2.zero;
////lastSingleTouch_PhaseName = string.Empty;
lastTouch_NumOperateState = ETouchState.Null;
IsEnterDragHeroOperate = false;
IsEnterScaleHeroOperate = false;
}
if (IsEnterScaleHeroOperate)
{
////计算相机的角度和位置
//通知去更改相机的scale
DragonBonesBGControler.Instance().OnChangeCameraSize(CurCameraSize);
}
}
#endregion
public void Reset()
{
lastMulityTouch_MoveMagnitude = 0;
lastMulityTouch_MoveDir = Vector2.zero;
lastSingleTouch_Position = Vector2.zero;
////lastSingleTouch_PhaseName = string.Empty;
lastTouch_NumOperateState = ETouchState.Null;
IsEnterScaleHeroOperate = false;
IsEnterDragHeroOperate = false;
CurCameraSize = DefaultCameraSize;
}
}
public class ControlerWindowdData
{
public string windowName;
public bool controle;
}
public enum ETouchState
{
single,
two,
Null
}