Files
DougDiggem/Assets/Scripts/StaticCamRoom.cs
T

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.AddToRoomsActive(this);
controller.SetCurrentPosition(camPosition.position, camZoom);
}
}
private void OnTriggerExit(Collider other)
{
CameraController controller = other.gameObject.GetComponent<CameraController>();
if (controller != null)
{
controller.RemoveFromRoomsActive(this);
controller.ReturnCameraToHome();
}
}
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);
}
}