r2mods/ilspy_dump/ror2_csproj/EntityStates.Missions.Lunar.../FadeOut.cs

108 lines
2.7 KiB
C#

using RoR2;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Rendering.PostProcessing;
namespace EntityStates.Missions.LunarScavengerEncounter;
public class FadeOut : BaseState
{
public static float delay;
public static float duration;
private Run.TimeStamp startTime;
private Light light;
private float initialIntensity;
private float initialAmbientIntensity;
private Color initialAmbientColor;
private Color initialFogColor;
private PostProcessVolume postProcessVolume;
private bool finished;
public override void OnEnter()
{
base.OnEnter();
if (NetworkServer.active)
{
startTime = Run.TimeStamp.now + delay;
}
light = GetComponent<ChildLocator>().FindChild("PrimaryLight").GetComponent<Light>();
initialIntensity = light.intensity;
initialAmbientIntensity = RenderSettings.ambientIntensity;
initialAmbientColor = RenderSettings.ambientLight;
initialFogColor = RenderSettings.fogColor;
light.GetComponent<FlickerLight>().enabled = false;
postProcessVolume = GetComponent<PostProcessVolume>();
postProcessVolume.enabled = true;
}
public override void OnSerialize(NetworkWriter writer)
{
base.OnSerialize(writer);
writer.Write(startTime);
}
public override void OnDeserialize(NetworkReader reader)
{
base.OnDeserialize(reader);
startTime = reader.ReadTimeStamp();
}
public override void Update()
{
base.Update();
float num = Mathf.Clamp01(startTime.timeSince / duration);
num *= num;
light.intensity = Mathf.Lerp(initialIntensity, 0f, num);
RenderSettings.ambientIntensity = Mathf.Lerp(initialAmbientIntensity, 0f, num);
RenderSettings.ambientLight = Color.Lerp(initialAmbientColor, Color.black, num);
RenderSettings.fogColor = Color.Lerp(initialFogColor, Color.black, num);
if (!Mathf.Approximately(postProcessVolume.weight, num))
{
PostProcessVolume.DispatchVolumeSettingsChangedEvent();
}
postProcessVolume.weight = num;
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (NetworkServer.active)
{
FixedUpdateServer();
}
if (!(startTime.timeSince > duration))
{
return;
}
foreach (CharacterBody readOnlyInstances in CharacterBody.readOnlyInstancesList)
{
if (readOnlyInstances.hasEffectiveAuthority)
{
EntityStateMachine entityStateMachine = EntityStateMachine.FindByCustomName(readOnlyInstances.gameObject, "Body");
if ((bool)entityStateMachine && !(entityStateMachine.state is Idle))
{
entityStateMachine.SetInterruptState(new Idle(), InterruptPriority.Frozen);
}
}
}
}
private void FixedUpdateServer()
{
if ((startTime + duration).hasPassed && !finished)
{
finished = true;
Run.instance.BeginGameOver(RoR2Content.GameEndings.LimboEnding);
}
}
}