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