using UnityEngine;
|
|
using System.Collections;
|
|
using UnityEngine.UI;
|
|
|
|
public class sceneController : MonoBehaviour {
|
|
|
|
public GameObject player1;
|
|
public GameObject player2;
|
|
public Camera cameraPlayer1;
|
|
public Camera cameraPlayer2;
|
|
public GameObject crossHairPlayer1;
|
|
public GameObject crossHairPlayer2;
|
|
public GameObject playerPointer;
|
|
|
|
public float screenAnimationTime;
|
|
|
|
private thirdPersonController movementP1;
|
|
private thirdPersonController movementP2;
|
|
|
|
private bool activeP1 = true;
|
|
private bool activeP2 = false;
|
|
|
|
private string playerSwapInput = "playerSwap";
|
|
|
|
// Use this for initialization
|
|
void Start () {
|
|
|
|
//Physics.IgnoreCollision(player1.GetComponent<Collider>(), player2.GetComponent<Collider>(),true);
|
|
|
|
|
|
movementP1 = player1.GetComponent<thirdPersonController> ();
|
|
movementP2 = player2.GetComponent<thirdPersonController> ();
|
|
|
|
|
|
movementP2.active = false;
|
|
|
|
crossHairPlayer2.SetActive (false);
|
|
|
|
Component[] p1Colliders = player1.GetComponentsInChildren<Collider> ();
|
|
Component[] p2Colliders = player2.GetComponentsInChildren<Collider> ();
|
|
|
|
foreach (Collider p1Col in p1Colliders){
|
|
foreach (Collider p2Col in p2Colliders){
|
|
Physics.IgnoreCollision(p1Col, p2Col);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update () {
|
|
swapCharacters ();
|
|
pointAtOther ();
|
|
|
|
if (Input.GetKeyDown(KeyCode.R))
|
|
Application.LoadLevel(Application.loadedLevel);
|
|
|
|
}
|
|
|
|
private void swapCharacters(){
|
|
|
|
Camera newCamera;
|
|
Camera oldCamera;
|
|
|
|
if (Input.GetButtonDown(playerSwapInput)) {
|
|
Debug.Log("swappy Swap");
|
|
activeP1 = !activeP1;
|
|
activeP2 = !activeP2;
|
|
|
|
if (activeP1){
|
|
newCamera = cameraPlayer1;
|
|
oldCamera = cameraPlayer2;
|
|
crossHairPlayer1.SetActive(true);
|
|
crossHairPlayer2.SetActive(false);
|
|
|
|
|
|
|
|
}else{
|
|
newCamera = cameraPlayer2;
|
|
oldCamera = cameraPlayer1;
|
|
crossHairPlayer1.SetActive(false);
|
|
crossHairPlayer2.SetActive(true);
|
|
|
|
|
|
}
|
|
|
|
movementP1.active = activeP1;
|
|
movementP2.active = activeP2;
|
|
|
|
newCamera.depth = 0;
|
|
oldCamera.depth = 1;
|
|
|
|
StartCoroutine(swapCameras (newCamera, oldCamera, screenAnimationTime));
|
|
|
|
//newCamera.rect = new Rect (0.0f,0.0f,1.0f,1.0f);
|
|
//oldCamera.rect = new Rect (0.84f, 0.74f, 0.155f, 0.25f);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
private void pointAtOther(){
|
|
|
|
Transform target;
|
|
Camera curCamera;
|
|
|
|
|
|
if (movementP1.enabled) {
|
|
target = player2.transform;
|
|
curCamera = cameraPlayer1;
|
|
} else {
|
|
target = player1.transform;
|
|
curCamera = cameraPlayer2;
|
|
}
|
|
|
|
Vector3 screenPos = curCamera.WorldToViewportPoint(target.position);
|
|
Vector3 guiPos;
|
|
|
|
//Debug.Log (screenPos);
|
|
|
|
if (screenPos.x >= 0.0f && screenPos.x <= 1.0f && screenPos.y >= 0.0f && screenPos.y <= 1.0f) {
|
|
guiPos = new Vector3 (screenPos.x * Screen.width, screenPos.y * Screen.height, 0.0f);
|
|
playerPointer.transform.position = guiPos;
|
|
return; // Object center is visible
|
|
}
|
|
|
|
//Debug.Log (screenPos);
|
|
|
|
|
|
|
|
if (Mathf.Abs(screenPos.x-0.5f) > Mathf.Abs(screenPos.y-0.5f)) {
|
|
screenPos.y = Mathf.Abs((screenPos.y));
|
|
if (screenPos.x > 0.0f)
|
|
screenPos.x = 1.0f;
|
|
else
|
|
screenPos.x = 0.0f;
|
|
} else {
|
|
screenPos.x = Mathf.Abs((screenPos.x));
|
|
if (screenPos.y > 0.0f)
|
|
screenPos.y = 1.0f;
|
|
else
|
|
screenPos.y = 0.0f;
|
|
}
|
|
|
|
guiPos = new Vector3 (screenPos.x * Screen.width, screenPos.y * Screen.height, 0.0f);
|
|
|
|
//guiPos.x = Mathf.Clamp (guiPos.x, 0.0f, Screen.width);
|
|
//guiPos.y = Mathf.Clamp (guiPos.y, 0.0f, Screen.height);
|
|
|
|
playerPointer.transform.position = guiPos;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
IEnumerator swapCameras (Camera newCamera, Camera oldCamera, float inTime){
|
|
|
|
Rect tempNewRect = newCamera.rect;
|
|
Rect tempOldRect = oldCamera.rect;
|
|
|
|
|
|
for (float i = 0; i < 1; i+=Time.deltaTime/inTime) {
|
|
|
|
tempNewRect.x = Mathf.Lerp (0.84f, 0.0f, i);
|
|
tempNewRect.y = Mathf.Lerp (0.74f, 0.0f, i);
|
|
tempNewRect.width = Mathf.Lerp (0.155f, 1.0f, i);
|
|
tempNewRect.height = Mathf.Lerp (0.25f, 1.0f, i);
|
|
|
|
tempOldRect.x = Mathf.Lerp (0.0f, 0.84f, i);
|
|
tempOldRect.y = Mathf.Lerp (0.0f, 0.74f, i);
|
|
tempOldRect.width = Mathf.Lerp (1.0f, 0.155f, i);
|
|
tempOldRect.height = Mathf.Lerp (1.0f, 0.25f, i);
|
|
|
|
newCamera.rect = tempNewRect;
|
|
oldCamera.rect = tempOldRect;
|
|
|
|
yield return null;
|
|
}
|
|
|
|
Debug.Log ("new rect: " + tempNewRect);
|
|
|
|
newCamera.rect = new Rect (0.0f,0.0f,1.0f,1.0f);
|
|
oldCamera.rect = new Rect (0.84f, 0.74f, 0.155f, 0.25f);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|