using UnityEngine;
using System.Collections;
public class Move : MonoBehaviour {
#if UNITY_IPHONE || UNITY_ANDROID || UNITY_WP8 || UNITY_BLACKBERRY
float ratio = 0.0f;
bool isRationChanged = false;
CameraControl cameraControl;
Vector2 oldPosition1;
Vector2 oldPosition2;
Vector2 tempPosition1;
Vector2 tempPosition2;
ScaleType scaleType = ScaleType.None;
void Start() {
cameraControl = transform.GetComponent<CameraControl>();
}
void LateUpdate() {
if (Input.touchCount >= 1) {
if (Input.GetTouch(0).phase == TouchPhase.Began || Input.GetTouch(1).phase == TouchPhase.Began) {
tempPosition1 = Input.GetTouch(0).position;
tempPosition2 = Input.GetTouch(1).position;
oldPosition1 = tempPosition1;
oldPosition2 = tempPosition2;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved) {
scaleType = GetScaleType();
tempPosition1 = Input.GetTouch(0).position;
tempPosition2 = Input.GetTouch(1).position;
//if (IsScale(oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {
// ratio += 0.01f;
//} else {
// ratio -= 0.01f;
//}
ScaleEvent(scaleType);
if (isRationChanged) { isRationChanged = false; cameraControl.move(ratio); }
oldPosition1 = tempPosition1;
oldPosition2 = tempPosition2;
}
}
}
void ScaleEvent(ScaleType type) {
switch (scaleType) {
case ScaleType.Large:
if (!IsScale(oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {
ratio -= 0.01f;
isRationChanged = true;
}
break;
case ScaleType.Small:
if (IsScale(oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {
ratio += 0.01f;
isRationChanged = true;
}
break;
case ScaleType.Middle:
if (IsScale(oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {
ratio += 0.01f;
isRationChanged = true;
} else {
ratio -= 0.01f;
isRationChanged = true;
}
break;
}
}
ScaleType GetScaleType() {
float distance = Vector3.Distance(cameraControl.subCamera.transform.position, GameControl.Instance.CurrentPlayer.transform.position);
if (distance <= 3) {
return ScaleType.Large;
}
if (distance >= 20) {
return ScaleType.Small;
}
return ScaleType.Middle;
}
bool IsScale(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2) {
float leng1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y));
float leng2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y));
return leng2 > leng1;
}
enum ScaleType {
None = 0,
Large = 1,
Small = 2,
Middle = 3
}
#endif
}
using System.Collections;
public class Move : MonoBehaviour {
#if UNITY_IPHONE || UNITY_ANDROID || UNITY_WP8 || UNITY_BLACKBERRY
float ratio = 0.0f;
bool isRationChanged = false;
CameraControl cameraControl;
Vector2 oldPosition1;
Vector2 oldPosition2;
Vector2 tempPosition1;
Vector2 tempPosition2;
ScaleType scaleType = ScaleType.None;
void Start() {
cameraControl = transform.GetComponent<CameraControl>();
}
void LateUpdate() {
if (Input.touchCount >= 1) {
if (Input.GetTouch(0).phase == TouchPhase.Began || Input.GetTouch(1).phase == TouchPhase.Began) {
tempPosition1 = Input.GetTouch(0).position;
tempPosition2 = Input.GetTouch(1).position;
oldPosition1 = tempPosition1;
oldPosition2 = tempPosition2;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved) {
scaleType = GetScaleType();
tempPosition1 = Input.GetTouch(0).position;
tempPosition2 = Input.GetTouch(1).position;
//if (IsScale(oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {
// ratio += 0.01f;
//} else {
// ratio -= 0.01f;
//}
ScaleEvent(scaleType);
if (isRationChanged) { isRationChanged = false; cameraControl.move(ratio); }
oldPosition1 = tempPosition1;
oldPosition2 = tempPosition2;
}
}
}
void ScaleEvent(ScaleType type) {
switch (scaleType) {
case ScaleType.Large:
if (!IsScale(oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {
ratio -= 0.01f;
isRationChanged = true;
}
break;
case ScaleType.Small:
if (IsScale(oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {
ratio += 0.01f;
isRationChanged = true;
}
break;
case ScaleType.Middle:
if (IsScale(oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {
ratio += 0.01f;
isRationChanged = true;
} else {
ratio -= 0.01f;
isRationChanged = true;
}
break;
}
}
ScaleType GetScaleType() {
float distance = Vector3.Distance(cameraControl.subCamera.transform.position, GameControl.Instance.CurrentPlayer.transform.position);
if (distance <= 3) {
return ScaleType.Large;
}
if (distance >= 20) {
return ScaleType.Small;
}
return ScaleType.Middle;
}
bool IsScale(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2) {
float leng1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y));
float leng2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y));
return leng2 > leng1;
}
enum ScaleType {
None = 0,
Large = 1,
Small = 2,
Middle = 3
}
#endif
}