Files
Misaki bb600bbbc4 first
2025-12-04 19:11:29 +08:00

105 lines
3.9 KiB
C++

/**
* Copyright(c) Live2D Inc. All rights reserved.
*
* Use of this source code is governed by the Live2D Open Software license
* that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
*/
#pragma once
class TouchManager
{
public:
TouchManager();
float GetCenterX() const { return _lastX; }
float GetCenterY() const { return _lastY; }
float GetDeltaX() const { return _deltaX; }
float GetDeltaY() const{ return _deltaY; }
float GetStartX() const{ return _startX; }
float GetStartY() const{ return _startY; }
float GetScale() const { return _scale; }
float GetX() const{ return _lastX; }
float GetY() const{ return _lastY; }
float GetX1() const{ return _lastX1; }
float GetY1() const{ return _lastY1; }
float GetX2() const{ return _lastX2; }
float GetY2() const{ return _lastY2; }
bool IsSingleTouch() const { return _touchSingle; }
bool IsFlickAvailable() const { return _flipAvailable; }
void DisableFlick() { _flipAvailable = false; }
/*
* @brief タッチ開始時イベント
*
* @param[in] deviceY タッチした画面のyの値
* @param[in] deviceX タッチした画面のxの値
*/
void TouchesBegan(float deviceX, float deviceY);
/*
* @brief ドラッグ時のイベント
*
* @param[in] deviceX タッチした画面のyの値
* @param[in] deviceY タッチした画面のxの値
*/
void TouchesMoved(float deviceX, float deviceY);
/*
* @brief ドラッグ時のイベント
*
* @param[in] deviceX1 1つめのタッチした画面のxの値
* @param[in] deviceY1 1つめのタッチした画面のyの値
* @param[in] deviceX2 2つめのタッチした画面のxの値
* @param[in] deviceY2 2つめのタッチした画面のyの値
*/
void TouchesMoved(float deviceX1, float deviceY1, float deviceX2, float deviceY2);
/*
* @brief フリックの距離測定
*
* @return フリック距離
*/
float GetFlickDistance() const;
private:
/*
* @brief 点1から点2への距離を求める
*
* @param[in] x1 1つめのタッチした画面のxの値
* @param[in] y1 1つめのタッチした画面のyの値
* @param[in] x2 2つめのタッチした画面のxの値
* @param[in] y2 2つめのタッチした画面のyの値
* @return 2点の距離
*/
float CalculateDistance(float x1, float y1, float x2, float y2) const;
/*
* 二つの値から、移動量を求める。
* 違う方向の場合は移動量0。同じ方向の場合は、絶対値が小さい方の値を参照する
*
* @param[in] v1 1つめの移動量
* @param[in] v2 2つめの移動量
*
* @return 小さい方の移動量
*/
float CalculateMovingAmount(float v1, float v2);
float _startY; // タッチを開始した時のxの値
float _startX; // タッチを開始した時のyの値
float _lastX; // シングルタッチ時のxの値
float _lastY; // シングルタッチ時のyの値
float _lastX1; // ダブルタッチ時の一つ目のxの値
float _lastY1; // ダブルタッチ時の一つ目のyの値
float _lastX2; // ダブルタッチ時の二つ目のxの値
float _lastY2; // ダブルタッチ時の二つ目のyの値
float _lastTouchDistance; // 2本以上でタッチしたときの指の距離
float _deltaX; // 前回の値から今回の値へのxの移動距離。
float _deltaY; // 前回の値から今回の値へのyの移動距離。
float _scale; // このフレームで掛け合わせる拡大率。拡大操作中以外は1。
bool _touchSingle; // シングルタッチ時はtrue
bool _flipAvailable; // フリップが有効かどうか
};