using System; using UnityEngine; using UnityEngine.Serialization; [ExecuteInEditMode] public class Dimensions : MonoBehaviour { [Tooltip("Player panels height")] public float panelHeightPixels; [Tooltip("Size in Unity units")] public Vector2 playGroundSize; [Tooltip("Height of the empty space between board and death zone")] public float emptySpaceHeight; public Camera mainCamera; public EdgeCollider2D topC, bottomC, leftC, rightC; public SpriteRenderer playGround; public SpriteRenderer playerPanelTop; public SpriteRenderer playerPanelBottom; public SpriteRenderer background; public static Dimensions Singleton; private void Awake() { Singleton = this; GetComponents(); SetDimensions(); } private void GetComponents() { topL = topC.GetComponent(); bottomL = bottomC.GetComponent(); } public float top, bottom, left, right; public float boardTop, boardBottom; public float Width => right * 2; public float Height => top * 2; private LineRenderer topL, bottomL; private void SetDimensions() { top = playGroundSize.y / 2; bottom = -top; right = playGroundSize.x / 2; left = -right; boardTop = top - emptySpaceHeight; boardBottom = -boardTop; Vector2 v1 = new Vector3(left, 0); Vector2 v2 = new Vector3(right, 0); Vector2 v3 = new Vector3(0, top); Vector2 v4 = new Vector3(0, bottom); topC.transform.position = new Vector2(0, top); bottomC.transform.position = new Vector2(0, bottom); leftC.transform.position = new Vector2(left, 0); rightC.transform.position = new Vector2(right, 0); topC.points = new[] {v1, v2}; bottomC.points = new[] {v1, v2}; leftC.points = new[] {v3, v4}; rightC.points = new[] {v3, v4}; playGround.transform.rotation = Quaternion.Euler(0, 0, 90); playGround.size = new Vector2(playGroundSize.y, playGroundSize.x); const float lineWidth = 0.5f; Vector3 offset = Vector3.up * lineWidth / 2; topL.positionCount = bottomL.positionCount = 2; var v12 = new[] {(Vector3) v1 - offset, (Vector3) v2 - offset}; topL.SetPositions(v12); v12 = new[] {(Vector3) v1 + offset, (Vector3) v2 + offset}; bottomL.SetPositions(v12); mainCamera.orthographicSize = 0.5f / (1 - 2 * panelHeightPixels / mainCamera.pixelHeight) * playGroundSize.y; float height = mainCamera.orthographicSize * 2; float width = mainCamera.aspect * height; float panelHeight = (height - playGroundSize.y) / 2; playerPanelTop.transform.position = new Vector2(0, (height + Height) / 4); playerPanelBottom.transform.position = new Vector2(0, -(height + Height) / 4); playerPanelTop.size = playerPanelBottom.size = new Vector2(width, panelHeight); background.size = new Vector2(width, playGroundSize.y); } private void Update() { if (Application.isPlaying) return; SetDimensions(); } }