axmol/tests/live2d-tests/Classes/TouchManager.h

65 lines
2.3 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
#include "cocos2d.h"
class TouchManager
{
private:
float startY; // タッチを開始した位置
float startX;
float lastX; // シングルタッチ時のxの値
float lastY; // シングルタッチ時のyの値
float lastX1; // ダブルタッチ時の一つ目のxの値
float lastY1; // ダブルタッチ時の一つ目のyの値
float lastX2; // ダブルタッチ時の二つ目のxの値
float lastY2; // ダブルタッチ時の二つ目のyの値
float lastTouchDist; // 2本以上でタッチしたときの指の距離
float deltaX; // 前回の値から今回の値へのxの移動距離。
float deltaY; // 前回の値から今回の値へのyの移動距離。
float scale; // このフレームで掛け合わせる拡大率。拡大操作中以外は1。
bool touchSingle; // シングルタッチ時はtrue
bool flipAvailable; // フリップが有効かどうか
public:
TouchManager();
float getCenterX() { return lastX; }
float getCenterY() { return lastY; }
float getDeltaX() { return deltaX; }
float getDeltaY() { return deltaY; }
float getStartX() { return startX; }
float getStartY() { return startY; }
float getScale() { return scale; }
float getX() { return lastX; }
float getY() { return lastY; }
float getX1() { return lastX1; }
float getY1() { return lastY1; }
float getX2() { return lastX2; }
float getY2() { return lastY2; }
bool isSingleTouch() { return touchSingle; }
bool isFlickAvailable() { return flipAvailable; }
void disableFlick() { flipAvailable = false; }
void touchesBegan(float deviceX, float deviceY);
void touchesBegan(float deviceX1, float deviceY1, float deviceX2, float deviceY2);
void touchesMoved(axis::Point touches[], int num);
void touchesMoved(float deviceX, float deviceY);
void touchesMoved(float deviceX1, float deviceY1, float deviceX2, float deviceY2);
float getFlickDistance();
private:
float distance(float x1, float y1, float x2, float y2);
float calcShift(float v1, float v2);
};