Files
Inter-Face-Off/Assets/Mirza Beig/Cinematic Explosions FREE/Scripts/DemoController.cs
2026-01-23 00:24:44 +00:00

194 lines
5.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Rendering;
using TMPro;
namespace MirzaBeig.CinematicExplosionsFree
{
public class DemoController : MonoBehaviour
{
public enum Scene
{
Day,
Night,
}
Camera camera;
List<ParticleSystem> particleSystems;
public Transform particleSystemsContainer;
[Space]
public Button buttonPrefab;
public VerticalLayoutGroup buttonContainer;
[Space]
public Scene currentScene = Scene.Day;
ReflectionProbe[] reflectionProbes;
[Space]
public GameObject environment;
[Space]
public int targetFrameRate = 60;
void Start()
{
// Set scene.
camera = Camera.main;
Application.targetFrameRate = targetFrameRate;
// Find all reflection probes.
reflectionProbes = FindObjectsByType<ReflectionProbe>(
FindObjectsInactive.Exclude, FindObjectsSortMode.None);
switch (currentScene)
{
case Scene.Day:
{
SetDay();
break;
}
case Scene.Night:
{
SetNight();
break;
}
default:
{
throw new System.Exception("Unknown case.");
}
}
// Assume all top-level children of container are particle systems.
// Instantiate as many buttons as prefabs and link them.
//particleSystems = new List<ParticleSystem> ();
for (int i = 0; i < particleSystemsContainer.childCount; i++)
{
Transform childTransform = particleSystemsContainer.GetChild(i);
// Exclude inactive.
if (!childTransform.gameObject.activeSelf)
{
continue;
}
ParticleSystem particleSystem = childTransform.GetComponent<ParticleSystem>();
Button button = Instantiate(buttonPrefab, buttonContainer.transform);
button.GetComponentInChildren<TextMeshProUGUI>().text = particleSystem.name;
button.onClick.AddListener(() => childTransform.gameObject.SetActive(false));
button.onClick.AddListener(() => childTransform.gameObject.SetActive(true));
//particleSystems.Add(particleSystem);
childTransform.gameObject.SetActive(false);
}
}
void UpdateReflections()
{
for (int i = 0; i < reflectionProbes.Length; i++)
{
reflectionProbes[i].RenderProbe();
}
}
void SetReflectionClearFlags(ReflectionProbeClearFlags clearFlags)
{
for (int i = 0; i < reflectionProbes.Length; i++)
{
reflectionProbes[i].clearFlags = clearFlags;
}
}
// Set scene.
public void SetNight()
{
currentScene = Scene.Night;
camera.clearFlags = CameraClearFlags.SolidColor;
RenderSettings.ambientIntensity = 0.8f;
RenderSettings.reflectionIntensity = 0.5f;
RenderSettings.sun.intensity = 0.0f;
SetReflectionClearFlags(ReflectionProbeClearFlags.SolidColor);
UpdateReflections();
}
public void SetDay()
{
currentScene = Scene.Day;
camera.clearFlags = CameraClearFlags.Skybox;
RenderSettings.ambientIntensity = 1.0f;
RenderSettings.reflectionIntensity = 1.0f;
RenderSettings.sun.intensity = 1.0f;
SetReflectionClearFlags(ReflectionProbeClearFlags.Skybox);
UpdateReflections();
}
public void SetEnvironmentActive(bool active)
{
environment.SetActive(active);
UpdateReflections();
}
void Update()
{
// Toggle scenes.
if (Input.GetKeyDown(KeyCode.F))
{
switch (currentScene)
{
case Scene.Day:
{
SetNight();
break;
}
case Scene.Night:
{
SetDay();
break;
}
default:
{
throw new System.Exception("Unknown case.");
}
}
}
// Toggle environment.
if (Input.GetKeyDown(KeyCode.G))
{
SetEnvironmentActive(!environment.activeSelf);
}
}
}
}