using System; using UnityEngine; using System.Collections; using UnityEngine.UI; public class TweenInOut : MonoBehaviour { private Graphic graphic; private RectTransform rectTransform; private Rect mapRect; private Vector2 defPivot; private Vector2 defSize; private Vector2 defPosition; private Vector2 initialPosition; private bool needRestore; private Camera worldCamera { get { if (graphic.canvas.renderMode == RenderMode.ScreenSpaceOverlay) return null; return graphic.canvas.worldCamera; } } private void OnMapClick() { if (needRestore) RestoreSize(); Vector2 localPoint; RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, Input.mousePosition, worldCamera, out localPoint); mapRect = rectTransform.rect; defPivot = rectTransform.pivot; defSize = rectTransform.sizeDelta; defPosition = rectTransform.anchoredPosition; initialPosition = Input.mousePosition; Vector2 pivot = new Vector2(); float ox = localPoint.x + mapRect.width * defPivot.x; float oy = localPoint.y + mapRect.height * defPivot.y; pivot.x = ox / mapRect.width; pivot.y = oy / mapRect.height; Vector2 offsetMax = rectTransform.offsetMax; Vector2 offsetMin = rectTransform.offsetMin; rectTransform.pivot = pivot; rectTransform.offsetMax = offsetMax; rectTransform.offsetMin = offsetMin; ZoomIn(); } private void ZoomIn() { needRestore = true; iTween.ScaleTo(gameObject, iTween.Hash( "scale", new Vector3(5, 5, 5), "time", 3, "oncomplete", "ZoomOut" )); } private void ZoomOut() { iTween.ScaleTo(gameObject, iTween.Hash( "scale", Vector3.one, "time", 3, "oncomplete", "RestoreSize" )); } private void RestoreSize() { iTween.Stop(); rectTransform.pivot = defPivot; rectTransform.sizeDelta = defSize; rectTransform.anchoredPosition = defPosition; rectTransform.localScale = Vector3.one; needRestore = false; } private void Start() { OnlineMapsControlBase.instance.OnMapClick += OnMapClick; graphic = GetComponent(); rectTransform = transform as RectTransform; OnlineMapsControlBase.instance.allowZoom = false; } }