[TASK] Initial commit with basic product setup
This commit is contained in:
139
Assets/Mapbox SDK/Mapbox/Examples/Scripts/CameraMovement.cs
Normal file
139
Assets/Mapbox SDK/Mapbox/Examples/Scripts/CameraMovement.cs
Normal file
@@ -0,0 +1,139 @@
|
||||
namespace Mapbox.Examples
|
||||
{
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using Mapbox.Unity.Map;
|
||||
|
||||
public class CameraMovement : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
AbstractMap _map;
|
||||
|
||||
[SerializeField]
|
||||
float _panSpeed = 20f;
|
||||
|
||||
[SerializeField]
|
||||
float _zoomSpeed = 50f;
|
||||
|
||||
[SerializeField]
|
||||
Camera _referenceCamera;
|
||||
|
||||
Quaternion _originalRotation;
|
||||
Vector3 _origin;
|
||||
Vector3 _delta;
|
||||
bool _shouldDrag;
|
||||
|
||||
void HandleTouch()
|
||||
{
|
||||
float zoomFactor = 0.0f;
|
||||
//pinch to zoom.
|
||||
switch (Input.touchCount)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
HandleMouseAndKeyBoard();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
// Store both touches.
|
||||
Touch touchZero = Input.GetTouch(0);
|
||||
Touch touchOne = Input.GetTouch(1);
|
||||
|
||||
// Find the position in the previous frame of each touch.
|
||||
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
|
||||
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
|
||||
|
||||
// Find the magnitude of the vector (the distance) between the touches in each frame.
|
||||
float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
|
||||
float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
|
||||
|
||||
// Find the difference in the distances between each frame.
|
||||
zoomFactor = 0.05f * (touchDeltaMag - prevTouchDeltaMag);
|
||||
}
|
||||
ZoomMapUsingTouchOrMouse(zoomFactor);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ZoomMapUsingTouchOrMouse(float zoomFactor)
|
||||
{
|
||||
var y = zoomFactor * _zoomSpeed;
|
||||
transform.localPosition += (transform.forward * y);
|
||||
}
|
||||
|
||||
void HandleMouseAndKeyBoard()
|
||||
{
|
||||
if (Input.GetMouseButton(0) && !EventSystem.current.IsPointerOverGameObject())
|
||||
{
|
||||
var mousePosition = Input.mousePosition;
|
||||
mousePosition.z = _referenceCamera.transform.localPosition.y;
|
||||
_delta = _referenceCamera.ScreenToWorldPoint(mousePosition) - _referenceCamera.transform.localPosition;
|
||||
_delta.y = 0f;
|
||||
if (_shouldDrag == false)
|
||||
{
|
||||
_shouldDrag = true;
|
||||
_origin = _referenceCamera.ScreenToWorldPoint(mousePosition);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_shouldDrag = false;
|
||||
}
|
||||
|
||||
if (_shouldDrag == true)
|
||||
{
|
||||
var offset = _origin - _delta;
|
||||
offset.y = transform.localPosition.y;
|
||||
transform.localPosition = offset;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (EventSystem.current.IsPointerOverGameObject())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var x = Input.GetAxis("Horizontal");
|
||||
var z = Input.GetAxis("Vertical");
|
||||
var y = Input.GetAxis("Mouse ScrollWheel") * _zoomSpeed;
|
||||
if (!(Mathf.Approximately(x, 0) || Mathf.Approximately(y, 0) || Mathf.Approximately(z, 0)))
|
||||
{
|
||||
transform.localPosition += transform.forward * y + (_originalRotation * new Vector3(x * _panSpeed, 0, z * _panSpeed));
|
||||
_map.UpdateMap();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Awake()
|
||||
{
|
||||
_originalRotation = Quaternion.Euler(0, transform.eulerAngles.y, 0);
|
||||
|
||||
if (_referenceCamera == null)
|
||||
{
|
||||
_referenceCamera = GetComponent<Camera>();
|
||||
if (_referenceCamera == null)
|
||||
{
|
||||
throw new System.Exception("You must have a reference camera assigned!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
|
||||
if (Input.touchSupported && Input.touchCount > 0)
|
||||
{
|
||||
HandleTouch();
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleMouseAndKeyBoard();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user