2013-07-20 22:58:46 -06:00
|
|
|
using UnityEngine;
|
|
|
|
using System.Collections;
|
|
|
|
|
|
|
|
public class GameWindow : MonoBehaviour
|
|
|
|
{
|
|
|
|
public int viewPortWidth = 80;
|
|
|
|
public int viewPortHeight = 25;
|
|
|
|
public float verticalShift;
|
|
|
|
public float viewDistance = 5;
|
|
|
|
float n, f, r, l, t, b;
|
|
|
|
Matrix4x4 mat = new Matrix4x4();
|
|
|
|
// Use this for initialization
|
|
|
|
void Start()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// Update is called once per frame
|
|
|
|
void Update()
|
|
|
|
{
|
|
|
|
float screenAspect = (float)Screen.width / (float)Screen.height;
|
|
|
|
float viewportAspect = (float)viewPortWidth / (float)viewPortHeight;
|
|
|
|
|
|
|
|
float fraction = screenAspect / viewportAspect;
|
|
|
|
|
2013-07-22 20:12:09 -06:00
|
|
|
float height = (viewPortHeight / 2.0f) / Mathf.Sin((camera.fieldOfView / 2) * Mathf.Deg2Rad);
|
2013-07-20 22:58:46 -06:00
|
|
|
transform.localPosition = new Vector3(0, height, -verticalShift);
|
|
|
|
|
|
|
|
camera.nearClipPlane = height - 1.0001f;
|
|
|
|
camera.farClipPlane = height + viewDistance;
|
|
|
|
RenderSettings.fogStartDistance = camera.nearClipPlane;
|
|
|
|
RenderSettings.fogEndDistance = camera.farClipPlane;
|
|
|
|
if (fraction > 1.0f) //If the screen is wider than the DF Viewport
|
|
|
|
{
|
|
|
|
camera.rect = new Rect(0.5f - ((1.0f / fraction) / 2.0f), 0.0f, 1.0f / fraction, 1.0f);
|
|
|
|
}
|
|
|
|
else //If the DF Viewport is wider.
|
|
|
|
{
|
|
|
|
camera.rect = new Rect(0.0f, 0.5f - (fraction / 2.0f), 1.0f, fraction);
|
|
|
|
}
|
|
|
|
//make a custom camera matrix, rather than use the inbuilt one.
|
|
|
|
n = camera.nearClipPlane;
|
|
|
|
f = camera.farClipPlane;
|
|
|
|
r = viewPortWidth / 2.0f;
|
|
|
|
l = -viewPortWidth / 2.0f;
|
|
|
|
t = verticalShift + (viewPortHeight / 2.0f);
|
|
|
|
b = verticalShift - (viewPortHeight / 2.0f);
|
|
|
|
|
|
|
|
|
|
|
|
mat[0, 0] = 2 * n / (r - l); mat[1, 0] = 0; mat[2, 0] = 0; mat[3, 0] = 0;
|
|
|
|
mat[0, 1] = 0; mat[1, 1] = 2 * n / (t - b); mat[2, 1] = 0; mat[3, 1] = 0;
|
|
|
|
mat[0, 2] = (r + l) / (r - l); mat[1, 2] = (t + b) / (t - b); mat[2, 2] = -(f + n) / (f - n); mat[3, 2] = -1;
|
|
|
|
mat[0, 3] = 0; mat[1, 3] = 0; mat[2, 3] = -2 * f * n / (f - n); ; mat[3, 3] = 0;
|
|
|
|
|
|
|
|
camera.projectionMatrix = mat;
|
|
|
|
}
|
|
|
|
}
|