You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.8 KiB

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<LineRenderer>();
bottomL = bottomC.GetComponent<LineRenderer>();
}
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();
}
}