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

332 lines
12 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EOTD_SupplyCloset_SoulCutscene : MonoBehaviour
{
[SerializeField]
private int CutsceneIndex = 1;
[SerializeField]
private AudioSource CutsceneSource;
[SerializeField]
private INT_Chat CutsceneChatter;
[SerializeField]
private AudioClip[] CutsceneSounds;
[SerializeField]
private CHATBOXTEXT[] CutsceneChats;
private Transform Kris;
[SerializeField]
private RuntimeAnimatorController NormalKrisAnimations;
[SerializeField]
private RuntimeAnimatorController KrisHornsAnimation;
[SerializeField]
private Vector3[] KrisWalkPositions;
[SerializeField]
private List<Vector3> KrisQueuedPositions = new List<Vector3>();
[SerializeField]
private AudioClip[] KrisFootstepSounds;
[SerializeField]
private string KrisCurrentZombieWalkAnimation = "Kris_Soulless_Walk";
[SerializeField]
private Animator SoulRipOutParticle;
[SerializeField]
private SpriteRenderer[] ObjectsAffectedByLights;
[SerializeField]
private SpriteRenderer Horns;
[SerializeField]
private SpriteRenderer backgroundSprite;
[SerializeField]
private Sprite background_lightOn;
[SerializeField]
private Sprite background_lightOff;
[SerializeField]
private SpriteRenderer backgroundBoxes;
[SerializeField]
private Sprite backgroundBoxes_Open;
[SerializeField]
private Sprite backgroundBoxes_Close;
[SerializeField]
private Transform ExclamationMarkBubble;
[SerializeField]
private Color LightOffColor;
private bool KrisFinishedWalking;
[SerializeField]
private GameObject[] FountainTargetParticles;
[SerializeField]
private GameObject BeforeSoulChats;
[SerializeField]
private GameObject AfterSoulChats;
private void Start()
{
Kris = PlayerManager.Instance.transform;
StartCoroutine(KrisWalkLoop());
}
private void Update()
{
if (CutsceneIndex != 0)
{
CutsceneUpdate();
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Cutscene;
LightworldMenu.Instance.CanOpenMenu = false;
PlayerManager.Instance._PMove._anim.transform.localPosition = new Vector2(0f, -0.9f);
}
}
private void CutsceneUpdate()
{
if (CutsceneIndex == 1)
{
StartCoroutine(DelayUntilKrisBeginsWalk());
IncrementCutsceneIndex();
}
}
public void IncrementCutsceneIndex()
{
CutsceneIndex++;
}
public void IncrementCutsceneIndex_EndChat()
{
CutsceneIndex++;
ChatboxManager.Instance.EndText();
}
private void RunFreshChat(CHATBOXTEXT text, int index = 0, bool ForcePosition = false, bool OnBottom = false)
{
CutsceneChatter.FirstTextPlayed = false;
CutsceneChatter.CurrentIndex = index;
CutsceneChatter.FinishedText = false;
CutsceneChatter.Text = text;
if (ForcePosition)
{
CutsceneChatter.ManualTextboxPosition = true;
CutsceneChatter.OnBottom = OnBottom;
}
CutsceneChatter.RUN();
}
private IEnumerator DelayUntilKrisBeginsWalk()
{
PlayerManager.Instance._PMove._anim.runtimeAnimatorController = NormalKrisAnimations;
PlayerManager.Instance._PMove._anim.Play("Kris_EOTD_RipOutSoul");
yield return new WaitForSeconds(6f);
SoulRipOutParticle.transform.position = Kris.transform.position;
SoulRipOutParticle.Play("particle_soulripout", -1, 0f);
yield return new WaitForSeconds(2.183f);
Kris.GetComponent<Collider2D>().enabled = false;
KrisQueuedPositions.Add(KrisWalkPositions[0]);
KrisQueuedPositions.Add(KrisWalkPositions[1]);
KrisQueuedPositions.Add(KrisWalkPositions[2]);
KrisQueuedPositions.Add(KrisWalkPositions[3]);
while (!KrisFinishedWalking)
{
yield return new WaitForSeconds(0.1f);
}
KrisFinishedWalking = false;
yield return new WaitForSeconds(0.5f);
PlayerManager.Instance._PMove._anim.Play("Kris_Soulless_turnOffLight");
yield return new WaitForSeconds(1f);
CutsceneSource.PlayOneShot(CutsceneSounds[0]);
PlayerManager.Instance._PMove._anim.GetComponent<SpriteRenderer>().color = LightOffColor;
backgroundSprite.sprite = background_lightOff;
SpriteRenderer[] objectsAffectedByLights = ObjectsAffectedByLights;
for (int i = 0; i < objectsAffectedByLights.Length; i++)
{
objectsAffectedByLights[i].color = LightOffColor;
}
KrisFinishedWalking = false;
yield return new WaitForSeconds(1.5f);
KrisQueuedPositions.Add(KrisWalkPositions[4]);
KrisQueuedPositions.Add(KrisWalkPositions[5]);
KrisQueuedPositions.Add(KrisWalkPositions[6]);
KrisQueuedPositions.Add(KrisWalkPositions[7]);
KrisQueuedPositions.Add(KrisWalkPositions[8]);
while (!KrisFinishedWalking)
{
yield return new WaitForSeconds(0.1f);
}
KrisFinishedWalking = false;
Horns.sortingLayerName = "AbovePlayer";
yield return new WaitForSeconds(1f);
backgroundBoxes.sprite = backgroundBoxes_Close;
PlayerManager.Instance._PMove._anim.Play("Kris_EOTD_SoulInBox");
yield return new WaitForSeconds(3f);
KrisCurrentZombieWalkAnimation = "Kris_Soulless_WalkLeftDown";
KrisQueuedPositions.Add(KrisWalkPositions[9]);
KrisQueuedPositions.Add(KrisWalkPositions[10]);
KrisQueuedPositions.Add(KrisWalkPositions[11]);
yield return new WaitForSeconds(3f);
Horns.sortingLayerName = "Background";
while (!KrisFinishedWalking)
{
yield return new WaitForSeconds(0.1f);
}
yield return new WaitForSeconds(1f);
KrisFinishedWalking = false;
PlayerManager.Instance._PMove._anim.Play("Kris_Soulless_CreateFountain");
yield return new WaitForSeconds(3.35f);
GameObject[] fountainTargetParticles = FountainTargetParticles;
foreach (GameObject obj in fountainTargetParticles)
{
yield return new WaitForSeconds(0.0053333333f);
CutsceneSource.PlayOneShot(CutsceneSounds[1]);
obj.SetActive(value: true);
}
yield return new WaitForSeconds(4.85f);
PlayerManager.Instance._PMove._anim.Play("Kris_Soulless_GetUpFromFountain");
yield return new WaitForSeconds(1.75f);
PlayerManager.Instance._PMove._anim.Play("Kris_Soulless_GroundCreateFountain");
yield return new WaitForSeconds(3f);
PlayerManager.Instance._PMove._anim.Play("Kris_Soulless_HitGroundAnger");
yield return new WaitForSeconds(5f);
PlayerManager.Instance._PMove._anim.Play("Kris_Soulless_GetUpAngry");
KrisCurrentZombieWalkAnimation = "Kris_Soulless_WalkRightDown";
yield return new WaitForSeconds(1.45f);
KrisQueuedPositions.Add(KrisWalkPositions[12]);
KrisQueuedPositions.Add(KrisWalkPositions[13]);
KrisQueuedPositions.Add(KrisWalkPositions[14]);
while (!KrisFinishedWalking)
{
yield return new WaitForSeconds(0.1f);
}
KrisFinishedWalking = false;
yield return new WaitForSeconds(0.25f);
ExclamationMarkBubble.gameObject.SetActive(value: true);
ExclamationMarkBubble.transform.position = Kris.transform.position + new Vector3(0f, 1.2f);
CutsceneSource.PlayOneShot(CutsceneSounds[2]);
yield return new WaitForSeconds(0.65f);
ExclamationMarkBubble.gameObject.SetActive(value: false);
KrisQueuedPositions.Add(KrisWalkPositions[15]);
KrisQueuedPositions.Add(KrisWalkPositions[16]);
while (!KrisFinishedWalking)
{
yield return new WaitForSeconds(0.1f);
}
KrisFinishedWalking = false;
yield return new WaitForSeconds(1f);
Horns.enabled = false;
PlayerManager.Instance._PMove._anim.Play("Kris_EOTD_PutHornsOn");
KrisCurrentZombieWalkAnimation = "Kris_Soulless_Horns_WalkRightUp";
yield return new WaitForSeconds(10.85f);
KrisQueuedPositions.Add(KrisWalkPositions[8]);
while (!KrisFinishedWalking)
{
yield return new WaitForSeconds(0.1f);
}
KrisFinishedWalking = false;
yield return new WaitForSeconds(1f);
backgroundBoxes.sprite = backgroundBoxes_Open;
PlayerManager.Instance._PMove._anim.Play("Kris_EOTD_RetrieveSoul");
yield return new WaitForSeconds(1.2f);
PlayerManager.Instance._PMove._anim.Play("Kris_EOTD_Horns_SwapSoulHand");
KrisCurrentZombieWalkAnimation = "Kris_Soulless_Horns_WalkSoul";
yield return new WaitForSeconds(1f);
KrisQueuedPositions.Add(KrisWalkPositions[7]);
KrisQueuedPositions.Add(KrisWalkPositions[6]);
KrisQueuedPositions.Add(KrisWalkPositions[5]);
KrisQueuedPositions.Add(KrisWalkPositions[4]);
KrisQueuedPositions.Add(KrisWalkPositions[3]);
while (!KrisFinishedWalking)
{
yield return new WaitForSeconds(0.1f);
}
KrisFinishedWalking = false;
yield return new WaitForSeconds(0.5f);
PlayerManager.Instance._PMove._anim.Play("Kris_Soulless_Horns_turnOnLight");
yield return new WaitForSeconds(1f);
CutsceneSource.PlayOneShot(CutsceneSounds[0]);
PlayerManager.Instance._PMove._anim.GetComponent<SpriteRenderer>().color = Color.white;
backgroundSprite.sprite = background_lightOn;
objectsAffectedByLights = ObjectsAffectedByLights;
for (int i = 0; i < objectsAffectedByLights.Length; i++)
{
objectsAffectedByLights[i].color = Color.white;
}
KrisFinishedWalking = false;
yield return new WaitForSeconds(1.5f);
PlayerManager.Instance._PMove._anim.Play("Kris_EOTD_Horns_GainSoul");
yield return new WaitForSeconds(1.75f);
SoulRipOutParticle.transform.position = Kris.transform.position;
SoulRipOutParticle.Play("particle_soulripout", -1, 0f);
yield return new WaitForSeconds(2.15f);
CutsceneSource.PlayOneShot(CutsceneSounds[5]);
PlayerManager.Instance._PMove._anim.runtimeAnimatorController = KrisHornsAnimation;
CutsceneIndex = 0;
PlayerManager.Instance._PMove._anim.Play("HORNS_KRIS_IDLE");
Kris.GetComponent<Collider2D>().enabled = true;
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Game;
PlayerManager.Instance._PMove.RotatePlayerAnim(Vector2.left);
LightworldMenu.Instance.CanOpenMenu = true;
BeforeSoulChats.SetActive(value: false);
AfterSoulChats.SetActive(value: true);
base.enabled = false;
}
private void Kris_WalkToPosition(Vector3 Position, bool WalkLeft)
{
Kris.transform.position = Position;
PlayerManager.Instance._PMove._anim.Play(KrisCurrentZombieWalkAnimation, -1, 0f);
CutsceneSource.PlayOneShot(KrisFootstepSounds[Random.Range(0, KrisFootstepSounds.Length)]);
}
private IEnumerator KrisWalkLoop()
{
while (true)
{
yield return new WaitForSeconds(Random.Range(1.5f, 2f));
if (KrisQueuedPositions.Count > 0)
{
Kris_WalkToPosition(KrisQueuedPositions[0], WalkLeft: false);
KrisQueuedPositions.RemoveAt(0);
if (KrisQueuedPositions.Count == 0)
{
KrisFinishedWalking = true;
}
else
{
KrisFinishedWalking = false;
}
}
}
}
private void OnDrawGizmos()
{
Vector3[] krisWalkPositions = KrisWalkPositions;
foreach (Vector3 center in krisWalkPositions)
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(center, 0.25f);
}
}
}