/** * 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; // フリップが有効かどうか };