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

262 lines
9.9 KiB
C#

using System.Collections;
using UnityEngine;
public class TRB_Projects_NoelleBerdly : MonoBehaviour
{
[Header("-= Cutscene Chats =-")]
[SerializeField]
private CHATBOXTEXT[] CutsceneChats;
[SerializeField]
private AudioClip[] CutsceneClips;
private Animator Noelle;
private Animator Berdly;
private bool LightFollowDucttape;
[SerializeField]
private SpriteRenderer DuctTape;
[SerializeField]
private Sprite DuctTape_Hit;
[SerializeField]
private Vector2[] NoelleLeaveWalkPositions;
[SerializeField]
private Vector2[] NoelleLeaveWalkDirections;
private int NoelleLeaveWalkIndex;
private void Start()
{
StartCoroutine(ProjectCutscene());
Noelle = TRB_Projects_Shared.instance.Noelle;
Berdly = TRB_Projects_Shared.instance.Berdly;
Noelle.Play("Idle");
Berdly.Play("Idle");
RotateNoelleToDirection(Vector2.down);
RotateBerdlyToDirection(Vector2.down);
TRB_Projects_Shared.instance.RotateTorielToDirection(Vector2.down);
Noelle.transform.position = new Vector2(-0.45f, 0.7f);
Berdly.transform.position = new Vector2(2.75f, 0.7f);
CutsceneUtils.RotateCharacterToDirection(TRB_Projects_Shared.instance.Alphys, "VelocityX", "VelocityY", Vector2.left);
TRB_Projects_Shared.instance.CreateNewLightShadow(new Vector2(1.1f, 1.875f), new Vector2(1.5f, 0.8f));
}
private void Update()
{
if (LightFollowDucttape)
{
TRB_Projects_Shared.instance.CreateNewLightShadow_NoSound(DuctTape.transform.position, new Vector2(0.8f, 0.8f));
}
}
public IEnumerator ProjectCutscene()
{
yield return new WaitForSeconds(0.5f);
CutsceneUtils.RunFreshChat(CutsceneChats[0], 0, ForcePosition: true, OnBottom: true);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
CutsceneUtils.RunFreshChat(CutsceneChats[0], 1, ForcePosition: true, OnBottom: true);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
TRB_Projects_Shared.instance.CreateNewLightShadow_NoSound(new Vector2(-0.15f, -1.95f), new Vector2(0.8f, 0.8f));
TRB_Projects_Shared.instance.Susie.Play("Susie_TRB_ThrowDucttape", -1, 0f);
CutsceneUtils.PlaySound(CutsceneClips[1]);
yield return new WaitForSeconds(1.183f);
CutsceneUtils.PlaySound(CutsceneClips[2]);
DuctTape.gameObject.SetActive(value: true);
LightFollowDucttape = true;
CutsceneUtils.MoveTransformOnArc(DuctTape.transform, Berdly.transform.position + Vector3.up, 2f, 1f);
yield return new WaitForSeconds(1f);
CutsceneUtils.ShakeTransform(Berdly.transform);
CutsceneUtils.PlaySound(CutsceneClips[3]);
CutsceneUtils.PlaySound(CutsceneClips[4]);
Berdly.Play("Shock");
yield return new WaitForSeconds(0.5f);
CutsceneUtils.MoveTransformLinear(DuctTape.transform, Berdly.transform.position, 0.25f);
yield return new WaitForSeconds(0.25f);
DuctTape.sprite = DuctTape_Hit;
yield return new WaitForSeconds(0.75f);
LightFollowDucttape = false;
TRB_Projects_Shared.instance.CreateNewLightShadow_NoSound(new Vector2(1.1f, 1.875f), new Vector2(1.5f, 0.8f));
CutsceneUtils.RunFreshChat(CutsceneChats[0], 2, ForcePosition: true, OnBottom: true);
DuctTape.sortingLayerID = SortingLayer.NameToID("BelowPlayer");
TRB_Projects_Shared.instance.Susie.Play("Idle", -1, 0f);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
CutsceneUtils.RunFreshChat(CutsceneChats[0], 3, ForcePosition: true, OnBottom: true);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
CutsceneUtils.RunFreshChat(CutsceneChats[0], 4, ForcePosition: true, OnBottom: true);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
TRB_Projects_Shared.instance.DoorRenderer.sprite = TRB_Projects_Shared.instance.Sprite_DoorOpen;
CutsceneUtils.PlaySound(CutsceneClips[0]);
MusicManager.StopSong(Fade: false, 0f);
TRB_Projects_Shared.instance.RemoveLightShadow();
TRB_Projects_Shared.instance.RotateAlphysToDirection(Vector2.up);
RotateBerdlyToDirection(Vector2.right);
RotateNoelleToDirection(Vector2.right);
yield return new WaitForSeconds(1f);
CutsceneUtils.MoveTransformLinear(TRB_Projects_Shared.instance.Toriel.transform, new Vector2(4.6f, 1.35f), 1f);
TRB_Projects_Shared.instance.Toriel.Play("WalkN");
yield return new WaitForSeconds(1f);
TRB_Projects_Shared.instance.Toriel.Play("IdleN");
yield return new WaitForSeconds(0.25f);
CutsceneUtils.RunFreshChat(CutsceneChats[1], 0, ForcePosition: true, OnBottom: true);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
TRB_Projects_Shared.instance.RotateTorielToDirection(Vector2.up);
CutsceneUtils.MoveTransformLinear(TRB_Projects_Shared.instance.Toriel.transform, new Vector2(4.6f, 2.35f), 0.5f);
TRB_Projects_Shared.instance.Toriel.Play("WalkN");
yield return new WaitForSeconds(0.5f);
TRB_Projects_Shared.instance.Toriel.Play("IdleN");
CutsceneUtils.FadeOutSprite(TRB_Projects_Shared.instance.Toriel.GetComponent<SpriteRenderer>(), 3f);
yield return new WaitForSeconds(0.333f);
CutsceneUtils.RunFreshChat(CutsceneChats[1], 1, ForcePosition: true, OnBottom: true);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
Noelle.Play("WalkN");
Noelle.speed = 1.85f;
while ((Vector2)Noelle.transform.position != NoelleLeaveWalkPositions[4])
{
yield return null;
if ((Vector2)Noelle.transform.position != NoelleLeaveWalkPositions[NoelleLeaveWalkIndex])
{
Noelle.transform.position = Vector2.MoveTowards(Noelle.transform.position, NoelleLeaveWalkPositions[NoelleLeaveWalkIndex], 5f * Time.deltaTime);
RotateNoelleToDirection(NoelleLeaveWalkDirections[NoelleLeaveWalkIndex]);
RotateBerdlyToPosition(Noelle.transform.position);
TRB_Projects_Shared.instance.RotateAlphysToPosition(Noelle.transform.position);
}
else if (NoelleLeaveWalkIndex < NoelleLeaveWalkPositions.Length)
{
NoelleLeaveWalkIndex++;
}
}
TRB_Projects_Shared.instance.DoorRenderer.sprite = TRB_Projects_Shared.instance.Sprite_DoorClosed;
Noelle.GetComponent<SpriteRenderer>().enabled = false;
Noelle.enabled = false;
CutsceneUtils.PlaySound(CutsceneClips[5]);
yield return new WaitForSeconds(2f);
MusicManager.Instance.source.pitch = 0.9f;
MusicManager.PlaySong(CutsceneClips[6], FadePreviousSong: false, 0f);
CutsceneUtils.RunFreshChat(CutsceneChats[1], 2, ForcePosition: true, OnBottom: true);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
MusicManager.StopSong(Fade: false, 0f);
MusicManager.Instance.source.pitch = 1f;
CutsceneUtils.RunFreshChat(CutsceneChats[1], 3, ForcePosition: true, OnBottom: true);
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
TRB_Projects_Shared.instance.NextProject();
}
public void RotateBerdlyToDirection(Vector2 Direction)
{
CutsceneUtils.RotateCharacterToDirection(TRB_Projects_Shared.instance.Berdly, "VelocityX", "VelocityY", Direction);
}
public void RotateBerdlyToPosition(Vector2 Position)
{
CutsceneUtils.RotateCharacterTowardsPosition(TRB_Projects_Shared.instance.Berdly, "VelocityX", "VelocityY", Position);
}
public void RotateNoelleToDirection(Vector2 Direction)
{
CutsceneUtils.RotateCharacterToDirection(TRB_Projects_Shared.instance.Noelle, "VelocityX", "VelocityY", Direction);
}
public void Berdly_Exclaim()
{
Berdly.Play("Exclaim");
}
public void Berdly_Praise()
{
Berdly.Play("Praise");
}
public void Berdly_ShockRight()
{
Berdly.Play("ShockRight");
}
public void Berdly_IdleDown()
{
Berdly.Play("Idle");
RotateBerdlyToDirection(Vector2.down);
}
public void Berdly_IdleUp()
{
Berdly.Play("Idle");
RotateBerdlyToDirection(Vector2.up);
}
public void Berdly_IdleLeft()
{
Berdly.Play("Idle");
RotateBerdlyToDirection(Vector2.left);
}
public void Berdly_IdleRight()
{
Berdly.Play("Idle");
RotateBerdlyToDirection(Vector2.right);
}
public void Noelle_SwitchToNeutralAnimationSet()
{
Noelle.Play("IdleN");
}
public void Noelle_IdleDown()
{
RotateNoelleToDirection(Vector2.down);
}
public void Noelle_IdleUp()
{
RotateNoelleToDirection(Vector2.up);
}
public void Noelle_IdleLeft()
{
RotateNoelleToDirection(Vector2.left);
}
public void Noelle_IdleRight()
{
RotateNoelleToDirection(Vector2.right);
}
}