protected override void AfterUpdate() { base.AfterUpdate(); if (api.showMarkerTooltip == OnlineMapsShowMarkerTooltip.onHover) { OnlineMapsMarkerInstanceBase markerInstance = GetBillboardMarkerFromScreen(Input.mousePosition); if (markerInstance != null) { api.tooltip = markerInstance.marker.label; api.tooltipMarker = markerInstance.marker; } } if (allowAddMarker3DByN && Input.GetKeyUp(KeyCode.N)) { OnlineMapsMarker3D m = new OnlineMapsMarker3D { position = GetCoords(), scale = marker3DScale, control = this }; m.Init(transform); double tlx, tly, brx, bry; api.GetTopLeftPosition(out tlx, out tly); api.GetBottomRightPosition(out brx, out bry); m.Update(tlx, tly, brx, bry, api.zoom); List <OnlineMapsMarker3D> markerList = markers3D.ToList(); markerList.Add(m); markers3D = markerList.ToArray(); } }
private IEnumerator WaitLongPress() { yield return(new WaitForSeconds(longPressDelay)); OnlineMapsMarker marker = null; Vector2 inputPosition = GetInputPosition(); if (this is OnlineMapsControlBase3D && OnlineMapsControlBase3D.instance.marker2DMode == OnlineMapsMarker2DMode.billboard) { OnlineMapsMarkerInstanceBase instanceBase = OnlineMapsControlBase3D.instance.GetBillboardMarkerFromScreen(inputPosition); if (instanceBase != null) { marker = instanceBase.marker as OnlineMapsMarker; } } else { marker = map.GetMarkerFromScreen(inputPosition); } if (marker != null && marker.OnLongPress != null) { marker.OnLongPress(marker); } if (OnMapLongPress != null) { OnMapLongPress(); isMapDrag = false; } longPressEnumenator = null; }
public override IOnlineMapsInteractiveElement GetInteractiveElement(Vector2 screenPosition) { if (IsCursorOnUIElement(screenPosition)) { return(null); } //TODO: Find a way to refactory this method RaycastHit hit; if (Physics.Raycast(activeCamera.ScreenPointToRay(screenPosition), out hit, OnlineMapsUtils.maxRaycastDistance)) { OnlineMapsMarkerInstanceBase markerInstance = hit.collider.gameObject.GetComponent <OnlineMapsMarkerInstanceBase>(); if (markerInstance != null) { return(markerInstance.marker); } } OnlineMapsMarker marker = markerDrawer.GetMarkerFromScreen(screenPosition); if (marker != null) { return(marker); } OnlineMapsDrawingElement drawingElement = map.GetDrawingElement(screenPosition); return(drawingElement); }
protected override void AfterUpdate() { base.AfterUpdate(); Vector2 inputPosition = GetInputPosition(); if (map.showMarkerTooltip == OnlineMapsShowMarkerTooltip.onHover) { OnlineMapsMarkerInstanceBase markerInstance = GetBillboardMarkerFromScreen(inputPosition); if (markerInstance != null) { OnlineMapsTooltipDrawerBase.tooltip = markerInstance.marker.label; OnlineMapsTooltipDrawerBase.tooltipMarker = markerInstance.marker; } } }
public override IOnlineMapsInteractiveElement GetInteractiveElement(Vector2 screenPosition) { #if !IGUI && ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) if (map.notInteractUnderGUI && GUIUtility.hotControl != 0) { return(null); } #endif if (EventSystem.current != null) { PointerEventData pe = new PointerEventData(EventSystem.current); pe.position = screenPosition; List <RaycastResult> hits = new List <RaycastResult>(); EventSystem.current.RaycastAll(pe, hits); if (hits.Count > 0 && hits[0].gameObject != gameObject) { return(null); } } RaycastHit hit; if (Physics.Raycast(activeCamera.ScreenPointToRay(screenPosition), out hit, OnlineMapsUtils.maxRaycastDistance)) { OnlineMapsMarkerInstanceBase markerInstance = hit.collider.gameObject.GetComponent <OnlineMapsMarkerInstanceBase>(); if (markerInstance != null) { return(markerInstance.marker); } } OnlineMapsMarker marker = map.GetMarkerFromScreen(screenPosition); if (marker != null) { return(marker); } OnlineMapsDrawingElement drawingElement = map.GetDrawingElement(screenPosition); return(drawingElement); }
/// <summary> /// Method that is called when you release the map. /// </summary> protected void OnMapBaseRelease() { if (waitZeroTouches && GetTouchCount() == 0) { waitZeroTouches = false; } if (GUIUtility.hotControl != 0) { return; } Vector2 inputPosition = GetInputPosition(); bool isClick = (pressPoint - inputPosition).sqrMagnitude < 400; isMapDrag = false; mapDragStarted = false; dragMarker = null; if (longPressEnumenator != null) { StopCoroutine("WaitLongPress"); longPressEnumenator = null; } lastInputPosition = Vector2.zero; OnlineMaps.isUserControl = false; if (!isMapPress) { return; } isMapPress = false; if (OnMapRelease != null) { OnMapRelease(); } OnlineMapsMarker marker = null; if (this is OnlineMapsControlBase3D && OnlineMapsControlBase3D.instance.marker2DMode == OnlineMapsMarker2DMode.billboard) { OnlineMapsMarkerInstanceBase instanceBase = OnlineMapsControlBase3D.instance.GetBillboardMarkerFromScreen(inputPosition); if (instanceBase != null) { marker = instanceBase.marker as OnlineMapsMarker; } } else { marker = map.GetMarkerFromScreen(inputPosition); } OnlineMapsDrawingElement drawingElement = null; if (map.showMarkerTooltip == OnlineMapsShowMarkerTooltip.onPress && (map.tooltipMarker != null || map.tooltipDrawingElement != null)) { map.tooltipMarker = null; map.tooltipDrawingElement = null; map.tooltip = null; } if (marker != null) { if (marker.OnRelease != null) { marker.OnRelease(marker); } if (isClick && marker.OnClick != null) { marker.OnClick(marker); } } else { drawingElement = map.GetDrawingElement(inputPosition); if (drawingElement != null && drawingElement.OnRelease != null) { drawingElement.OnRelease(drawingElement); } } if (isClick && DateTime.Now.Ticks - lastClickTimes[0] < 5000000) { if (marker != null && marker.OnDoubleClick != null) { marker.OnDoubleClick(marker); } else if (drawingElement != null && drawingElement.OnDoubleClick != null) { drawingElement.OnDoubleClick(drawingElement); } else { if (OnMapDoubleClick != null) { OnMapDoubleClick(); } if (allowZoom && zoomInOnDoubleClick) { ZoomOnPoint(1, inputPosition); } } lastClickTimes[0] = 0; lastClickTimes[1] = 0; } else if (isClick) { if (drawingElement != null && drawingElement.OnClick != null) { drawingElement.OnClick(drawingElement); } if (OnMapClick != null) { OnMapClick(); } } if (map.bufferStatus == OnlineMapsBufferStatus.wait) { map.needRedraw = true; } }
/// <summary> /// Method that is called when you press the map. /// </summary> protected void OnMapBasePress() { isMapPress = false; if (waitZeroTouches) { if (GetTouchCount() <= 1) { waitZeroTouches = false; } else { return; } } dragMarker = null; if (!HitTest()) { return; } #if !IGUI && ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) if (map.notInteractUnderGUI && GUIUtility.hotControl != 0) { return; } #endif Vector2 inputPosition = GetInputPosition(); if (EventSystem.current != null) { PointerEventData pe = new PointerEventData(EventSystem.current); pe.position = inputPosition; List <RaycastResult> hits = new List <RaycastResult>(); EventSystem.current.RaycastAll(pe, hits); if (hits.Count > 0 && hits[0].gameObject != gameObject) { return; } } if (OnMapPress != null) { OnMapPress(); } lastClickTimes[0] = lastClickTimes[1]; lastClickTimes[1] = DateTime.Now.Ticks; bool hit = GetCoords(out lastPositionLng, out lastPositionLat); lastInputPosition = pressPoint = inputPosition; if (!hit) { return; } isMapPress = true; OnlineMapsMarker marker = null; if (this is OnlineMapsControlBase3D && OnlineMapsControlBase3D.instance.marker2DMode == OnlineMapsMarker2DMode.billboard) { OnlineMapsMarkerInstanceBase instanceBase = OnlineMapsControlBase3D.instance.GetBillboardMarkerFromScreen(inputPosition); if (instanceBase != null) { marker = instanceBase.marker as OnlineMapsMarker; } } else { marker = map.GetMarkerFromScreen(inputPosition); } bool allowMapLongPress = true; if (marker != null) { if (marker.OnPress != null) { marker.OnPress(marker); } if (marker.OnLongPress != null) { allowMapLongPress = false; } if (map.showMarkerTooltip == OnlineMapsShowMarkerTooltip.onPress) { map.tooltipMarker = marker; map.tooltip = marker.label; } if (Input.GetKey(KeyCode.LeftControl)) { dragMarker = marker; } } else { OnlineMapsDrawingElement drawingElement = map.GetDrawingElement(inputPosition); if (drawingElement != null) { if (drawingElement.OnPress != null) { drawingElement.OnPress(drawingElement); } if (map.showMarkerTooltip == OnlineMapsShowMarkerTooltip.onPress) { map.tooltipDrawingElement = drawingElement; map.tooltip = drawingElement.tooltip; } } } if (dragMarker == null) { isMapDrag = true; if (allowMapLongPress) { longPressEnumenator = WaitLongPress(); StartCoroutine("WaitLongPress"); } } else { lastClickTimes[0] = 0; } if (allowUserControl) { OnlineMaps.isUserControl = true; } }
protected override void AfterUpdate() { base.AfterUpdate(); Vector2 inputPosition = GetInputPosition(); if (allowCameraControl) { #if (!UNITY_ANDROID && !UNITY_IPHONE) || UNITY_EDITOR if (Input.GetMouseButton(1)) { isCameraControl = true; if (lastInputPosition != inputPosition && lastInputPosition != Vector2.zero) { Vector2 offset = lastInputPosition - inputPosition; cameraRotation.x -= offset.y / 10f * cameraSpeed.x; cameraRotation.y -= offset.x / 10f * cameraSpeed.y; } lastInputPosition = inputPosition; } else if (isCameraControl) { lastInputPosition = Vector2.zero; isCameraControl = false; } #else if (!allowZoom && allowCameraControl) { if (Input.touchCount == 2) { Vector2 p1 = Input.GetTouch(0).position; Vector2 p2 = Input.GetTouch(1).position; Vector2 center = Vector2.Lerp(p1, p2, 0.5f); if (lastGestureCenter == Vector2.zero) { lastGestureCenter = center; } else if (lastGestureCenter != center) { Vector2 offset = lastGestureCenter - center; cameraRotation.x -= offset.y / 10f * cameraSpeed.x; cameraRotation.y -= offset.x / 10f * cameraSpeed.y; lastGestureCenter = center; } lastInputPosition = center; } else { lastGestureCenter = Vector2.zero; } } #endif UpdateCameraPosition(); } if (map.showMarkerTooltip == OnlineMapsShowMarkerTooltip.onHover) { OnlineMapsMarkerInstanceBase markerInstance = GetBillboardMarkerFromScreen(inputPosition); if (markerInstance != null) { map.tooltip = markerInstance.marker.label; map.tooltipMarker = markerInstance.marker; } } if (allowAddMarker3DByN && Input.GetKeyUp(KeyCode.N)) { OnlineMapsMarker3D marker = AddMarker3D(GetCoords(), default3DMarker != null? Instantiate(default3DMarker) as GameObject: null); marker.control = this; marker.scale = marker3DScale; } }
protected override void AfterUpdate() { base.AfterUpdate(); Vector2 inputPosition = GetInputPosition(); if (allowCameraControl) { #if (!UNITY_ANDROID && !UNITY_IPHONE) || UNITY_EDITOR if (Input.GetMouseButton(1)) { isCameraControl = true; if (lastInputPosition != inputPosition && lastInputPosition != Vector2.zero) { Vector2 offset = lastInputPosition - inputPosition; cameraRotation.x -= offset.y / 10f * cameraSpeed.x; cameraRotation.y -= offset.x / 10f * cameraSpeed.y; } lastInputPosition = inputPosition; } else if (isCameraControl) { lastInputPosition = Vector2.zero; isCameraControl = false; } #else if (!allowZoom && allowCameraControl) { if (Input.touchCount == 2) { Vector2 p1 = Input.GetTouch(0).position; Vector2 p2 = Input.GetTouch(1).position; Vector2 center = Vector2.Lerp(p1, p2, 0.5f); if (lastGestureCenter == Vector2.zero) { lastGestureCenter = center; } else if (lastGestureCenter != center) { Vector2 offset = lastGestureCenter - center; cameraRotation.x -= offset.y / 10f * cameraSpeed.x; cameraRotation.y -= offset.x / 10f * cameraSpeed.y; lastGestureCenter = center; } lastInputPosition = center; } else { lastGestureCenter = Vector2.zero; } } #endif UpdateCameraPosition(); } if (api.showMarkerTooltip == OnlineMapsShowMarkerTooltip.onHover) { OnlineMapsMarkerInstanceBase markerInstance = GetBillboardMarkerFromScreen(inputPosition); if (markerInstance != null) { api.tooltip = markerInstance.marker.label; api.tooltipMarker = markerInstance.marker; } } if (allowAddMarker3DByN && Input.GetKeyUp(KeyCode.N)) { OnlineMapsMarker3D m = new OnlineMapsMarker3D { position = GetCoords(), scale = marker3DScale, prefab = default3DMarker != null?Instantiate(default3DMarker) as GameObject : null, control = this }; m.Init(transform); double tlx, tly, brx, bry; api.GetTopLeftPosition(out tlx, out tly); api.GetBottomRightPosition(out brx, out bry); m.Update(tlx, tly, brx, bry, api.zoom); if (markers3D == null) { markers3D = new OnlineMapsMarker3D[0]; } Array.Resize(ref markers3D, markers3D.Length + 1); markers3D[markers3D.Length - 1] = m; } }