Files
Main/Assets/Code/Logic/_Required/Input/Handler/SlashHandler.cs
2025-01-25 04:38:09 +08:00

118 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
namespace Thousandto.Code.Logic
{
/// <summary>
/// 滑屏操作的处理器
/// </summary>
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
}
}