84 lines
2.4 KiB
C#
84 lines
2.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
public class StaticCamRoom : MonoBehaviour
|
|
{
|
|
// these will be hidden when room is entered
|
|
public Transform camPosition;
|
|
public Transform[] objectsToHide;
|
|
public float camZoom = 5f;
|
|
|
|
public void RoomEnter()
|
|
{
|
|
StopAllCoroutines();
|
|
foreach (var obj in objectsToHide)
|
|
{
|
|
StartCoroutine(FadeOutMaterial(0.5f, obj.gameObject));
|
|
}
|
|
}
|
|
|
|
public void RoomExit(List<Transform> wallsToKeep)
|
|
{
|
|
StopAllCoroutines();
|
|
foreach (var obj in objectsToHide)
|
|
{
|
|
if (!wallsToKeep.Contains(obj))
|
|
StartCoroutine(FadeInMaterial(0.5f, obj.gameObject));
|
|
}
|
|
}
|
|
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
CameraController controller = other.gameObject.GetComponent<CameraController>();
|
|
|
|
if (controller != null)
|
|
{
|
|
controller.SetCurrentPosition(camPosition.position, camZoom);
|
|
controller.AddToRoomsActive(this);
|
|
}
|
|
}
|
|
|
|
private void OnTriggerExit(Collider other)
|
|
{
|
|
CameraController controller = other.gameObject.GetComponent<CameraController>();
|
|
|
|
if (controller != null)
|
|
{
|
|
controller.ReturnCameraToHome();
|
|
controller.RemoveFromRoomsActive(this);
|
|
}
|
|
}
|
|
|
|
private IEnumerator FadeOutMaterial(float fadeSpeed, GameObject wallObj)
|
|
{
|
|
Renderer rend = wallObj.GetComponent<Renderer>();
|
|
Color matColor = rend.material.color;
|
|
if (matColor.a > 1f)
|
|
matColor = new Color(matColor.r, matColor.g, matColor.b, 1f);
|
|
|
|
while (rend.material.color.a > 0f)
|
|
{
|
|
matColor.a -= Time.deltaTime / fadeSpeed;
|
|
rend.material.color = matColor;
|
|
yield return null;
|
|
}
|
|
rend.material.color = new Color(matColor.r, matColor.g, matColor.b, 0f);
|
|
}
|
|
|
|
private IEnumerator FadeInMaterial(float fadeSpeed, GameObject wallObj)
|
|
{
|
|
Renderer rend = wallObj.GetComponent<Renderer>();
|
|
Color matColor = rend.material.color;
|
|
|
|
while (rend.material.color.a < 1f)
|
|
{
|
|
matColor.a += Time.deltaTime / fadeSpeed;
|
|
rend.material.color = matColor;
|
|
yield return null;
|
|
}
|
|
rend.material.color = new Color(matColor.r, matColor.g, matColor.b, 1f);
|
|
}
|
|
}
|