using System; using System.Collections.Generic; using System.Text; using UnityEngine; namespace Thousandto.Code.Logic { /// /// 滑屏操作的处理器 /// public class SlashHandler { #region//常量定义 //滑屏的最远距离 public const float CN_SLASH_DIS_MAX = 30.0f; #endregion #region//私有变量 //开始滑屏的位置 private Vector2 _startSlashPos = Vector2.zero; //结束滑屏的位置 private Vector2 _endSlashPos = Vector2.zero; //记录滑屏的帧数 private int _slashFrameCounter = 0; //滑屏的最小距离 private float _slashMinimumDis = Screen.height * 0.15f; //滑屏的最小速度 private float _slashMinimumSpeed = Screen.height; //滑屏开始的时间 private float _startSlashTime = 0.0f; //结束滑屏的时间 private float _endSlashTime = 0.0f; //是否能够激活滑屏操作 private bool _enableSlash = false; #endregion #region//属性信息 //当前是否能够滑屏 public bool EnableSlash { get { return _enableSlash; } set { _enableSlash = value; } } #endregion #region//公共方法接口 public void Refresh() { _enableSlash = false; } public void Reset() { } //滑屏开始 public void SlashBegin(Vector2 startPos) { _enableSlash = true; OnSlash_InitData(startPos); } //滑屏移动 public void SlashMove(Vector2 fingerPos, Vector2 delta) { OnSlash_UpdateData(fingerPos); } //滑屏结束 public void SlashEnd(Vector2 fingerPos) { OnSlash_UpdateData(fingerPos); OnSlash_ResetData(); } #endregion #region //私有方法 // 开始滑屏时的初始化处理 private void OnSlash_InitData(Vector2 startPos) { // start slash _startSlashTime = Time.time; _startSlashPos = startPos; _endSlashPos = _startSlashPos; _slashFrameCounter++; } //滑屏过程当中的处理 private void OnSlash_UpdateData(Vector2 endPos) { _endSlashTime = Time.time; _endSlashPos = endPos; _slashFrameCounter++; if (_enableSlash) { Vector2 slashDir = _endSlashPos - _startSlashPos; float slashDis = slashDir.magnitude; if (slashDis > CN_SLASH_DIS_MAX) { OnSlash_ResetData(); } } } //恢复数据 private void OnSlash_ResetData() { // reset all vars _slashFrameCounter = 0; _startSlashPos = Vector2.zero; _endSlashPos = Vector2.zero; _startSlashTime = 0.0f; _endSlashTime = 0.0f; } #endregion } }