Ejemplo n.º 1
0
        private void Update(float deltaTime)
        {
            CheckScreenSize();
            if (_fadeMessage != null)
            {
                foreach (var m in _fadeMessage)
                {
                    m.Fade(deltaTime);
                }
            }
            if (Focus != null && !_focusOverride)
            {
                var focus = CameraSystem.WorldToSystemXY(Focus.position) + FocusOffset;
                var dir   = focus - CameraSystem.PositionXY;
                var dist  = dir.magnitude;
                var move  = _focusStep * deltaTime;
                if (move >= dist)
                {
                    CameraSystem.PositionXY = focus;
                    if (_focusOnce)
                    {
                        Focus = null;
                    }
                }
                else
                {
                    CameraSystem.PositionXY += dir / dist * Mathf.Lerp(0.5f, 2f, dist) * _focusStep * deltaTime;
                }
                MainCamera.transform.position = CameraSystem.WorldPosition;
            }
            if (_dragInertia && _dragInertiaValue > _dragInertiaThreshold)
            {
                _dragInertiaValue *= _dragInertiaDamping;
                var inertia = _dragInertiaValue * _dragInertiaDelta * UnitPerPixel;
                var targetX = CameraSystem.X - inertia.x;
                var targetY = CameraSystem.Y - inertia.y;
                if (PositionLimit != null)
                {
                    (targetX, targetY) = PositionLimit.Limit(targetX, targetY);
                }
                MoveToSystemPos(new Vector2(targetX, targetY));
            }
            if (PositionLimit != null && PositionLimit.Unstable && !Input.anyKey)
            {
                (CameraSystem.X, CameraSystem.Y) = PositionLimit.ElasticPull();
                MainCamera.transform.position    = CameraSystem.WorldPosition;
            }
            if (_zoomTarget != Zoom)
            {
                if (_zoomTransitTime > 0)
                {
                    _zoomTransitTime -= deltaTime;
                    ZoomValue(Mathf.SmoothStep(_zoomTarget, _zoomStart, _zoomTransitTime / _zoomTransitDuration));
                }
                else
                {
                    ZoomValue(_zoomTarget);
                }
            }
            Vector2 mp = Input.mousePosition;

            if (mp.x < 0 || mp.y < 0 || mp.x > Screen.width || mp.y > Screen.height)
            {
                return;
            }
            if (Input.GetMouseButtonDown(0))
            {
                ClickVisual?.EmitAt(UICamera.ScreenToWorldPoint(mp), UIViewScale);
            }
            if (_drag != null && _drag.interactable && Input.mouseScrollDelta.y != 0)
            {
                _zoomTransitTime = 0;
                TargetZoom(_zoomTarget - Input.mouseScrollDelta.y * zoomSetting.scrollStep);
            }
        }