DRHPS/code-csharp/en_US/EOTDCutscene_EndingStory.cs
2025-04-08 11:31:35 +08:00

86 lines
2.7 KiB
C#

using System.Collections;
using UnityEngine;
public class EOTDCutscene_EndingStory : MonoBehaviour
{
public EOTDCutscene_EndingStory_Panel[] StoryPanels;
[Header("References")]
[SerializeField]
private SpriteRenderer PanelRenderer;
[SerializeField]
private AudioSource Song;
[SerializeField]
private Animator ThreeCharacterPanel;
[SerializeField]
private Animator FadeAnimator;
[SerializeField]
private TRIG_LEVELTRANSITION levelTransition;
private void Start()
{
StartCoroutine(StoryPlay());
StartCoroutine(SongLength());
}
private void Update()
{
DarkworldMenu.Instance.CanOpenMenu = false;
LightworldMenu.Instance.CanOpenMenu = false;
}
private IEnumerator SongLength()
{
yield return new WaitForSeconds(Song.clip.length + 1f);
levelTransition.BeginTransition();
}
private IEnumerator StoryPlay()
{
yield return new WaitForSeconds(2f);
MusicManager.StopSong(Fade: false, 0f);
Song.Play();
EOTDCutscene_EndingStory_Panel[] storyPanels = StoryPanels;
foreach (EOTDCutscene_EndingStory_Panel panel in storyPanels)
{
FadeAnimator.GetComponent<SpriteRenderer>().color = new Color(panel.FadeColor.r, panel.FadeColor.g, panel.FadeColor.b, FadeAnimator.GetComponent<SpriteRenderer>().color.a);
if (panel.FadeIn)
{
FadeAnimator.Play("EOTD_EndingStory_FadeIn", -1, 0f);
FadeAnimator.speed = panel.FadeSpeedMultiplier;
}
else
{
FadeAnimator.Play("EOTD_EndingStory_Hidden", -1, 0f);
}
if (panel.IsThreeCharacterPanel)
{
ThreeCharacterPanel.Play("EOTD_EndingStory_Section2");
}
PanelRenderer.sprite = panel.PanelSprite;
if (panel.FadeOut)
{
yield return new WaitForSeconds(ConvertCapCutTimeToUnityTime(panel.PanelLength) - 0.2f / panel.FadeSpeedMultiplier);
FadeAnimator.Play("EOTD_EndingStory_FadeOut", -1, 0f);
FadeAnimator.speed = panel.FadeSpeedMultiplier;
yield return new WaitForSeconds(0.2f / panel.FadeSpeedMultiplier);
}
else
{
yield return new WaitForSeconds(ConvertCapCutTimeToUnityTime(panel.PanelLength));
}
}
}
public float ConvertCapCutTimeToUnityTime(float capCutTime)
{
int num = Mathf.FloorToInt(capCutTime);
float num2 = (capCutTime - (float)num) * 100f;
return ((float)(num * 60) + num2) / 60f;
}
}