Esempio n. 1
0
        public Vector3 GetMousePositionOnMapWorldSpace(Vector3 mousePositionScreenSpace)
        {
            //any distance greater than 0 should work, we only need to form a line equation.
            mousePositionScreenSpace.z = 1f;
            var startingPoint = _currentCamera.transform.position;
            var endPoint      = _currentCamera.ScreenToWorldPoint(mousePositionScreenSpace);

            var mapY = _mapTransform.position.y;

            var(x, z) = LineEquations.GetXzGivenY(mapY, startingPoint, endPoint);


            return(new Vector3(x, mapY, z));
        }
        /// <summary>
        /// Finding 4 intersection point of camera frustum on the infinite plane(at mapTransform's height).
        /// Returning the maximum size of a rect that it can be bounded within the 4 intersection point.
        /// </summary>
        public (float minWidth, float distanceToTop, float distanceToBottom) GetViewDistanceToFrustumOnPlaneInWorldSpace(
            Camera editorCamera,
            Transform mapTransform)
        {
            var cameraFrustumCorners = GetFrustumCorners(editorCamera);
            var cameraPosition       = editorCamera.transform.position;
            var targetYPosition      = mapTransform.position.y;
            var intersectionCorners  = new Vector3[cameraFrustumCorners.Length];

            for (var i = 0; i < cameraFrustumCorners.Length; i++)
            {
                var(x, z) = LineEquations.GetXzGivenY(targetYPosition, cameraPosition, cameraFrustumCorners[i]);
                intersectionCorners[i] = new Vector3(x, targetYPosition, z);
            }

            var distanceToTop    = intersectionCorners[1].z - cameraPosition.z;
            var distanceToBottom = cameraPosition.z - intersectionCorners[0].z;
            var minWidth         = intersectionCorners[3].x - intersectionCorners[0].x;

            return(minWidth, distanceToTop, distanceToBottom);
        }