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

559 lines
22 KiB
C#

using System.Collections;
using UnityEngine;
public class PapyrusRoom_TutorialCutscene : MonoBehaviour
{
[SerializeField]
private int CutsceneIndex;
[Header("-- References --")]
[SerializeField]
private Transform PapyrusTransform;
[SerializeField]
private Animator PapyrusAnimator;
[SerializeField]
private Animator PapyrusAngryEyebrows;
[SerializeField]
private INT_TalkingAnimation PapyrusTalkController;
[SerializeField]
private Animator PapyrusArmorAnimator;
[SerializeField]
private Animator SansArmorAnimator;
[SerializeField]
private Susie_Follower Susie;
[SerializeField]
private PlayerManager Kris;
[SerializeField]
private Transform Berdly;
[SerializeField]
private Animator BerdlyAnimator;
[SerializeField]
private Transform Sans;
[SerializeField]
private Animator SansAnimator;
[SerializeField]
private GameObject OAOShadow;
[SerializeField]
private Transform OAOTable;
[SerializeField]
private CameraManager PlayerCamera;
[SerializeField]
private AudioReverbPreset DungeonReverbPreset;
[SerializeField]
private PapyrusRoom_OverworldsAndOgres OAOCutscene;
[Header("-- Walking Stuff --")]
[SerializeField]
private Vector2[] SansWalkPositions;
[SerializeField]
private Vector2[] SansWalkDirections;
[SerializeField]
private Vector2[] BerdlyWalkPositions;
[SerializeField]
private Vector2[] BerdlyWalkDirections;
[Header("-- Cutscene Chats --")]
[SerializeField]
private INT_Chat CutsceneChatter;
[SerializeField]
private CHATBOXTEXT[] CutsceneChats;
[Header("-- Cutscene Sounds --")]
[SerializeField]
private AudioSource CutsceneSource;
[SerializeField]
private AudioClip[] CutsceneSounds;
[SerializeField]
private AudioClip Music_TGAOATLEWMB;
[SerializeField]
private AudioClip Music_NoSound;
[SerializeField]
private AudioClip Music_TGAOATLEOTT;
[SerializeField]
private AudioClip Music_AdventureStart;
private void Start()
{
Music_AdventureStart.LoadAudioData();
StartCoroutine(setupSusie());
}
private void Update()
{
if (CutsceneIndex > 0)
{
Kris._PlayerState = PlayerManager.PlayerState.Cutscene;
LightworldMenu.Instance.CanOpenMenu = false;
Susie.FollowingEnabled = false;
Susie.AnimationOverriden = false;
}
}
public void StartCutscene()
{
PapyrusTalkController.TargetChat = CutsceneChatter;
StartCoroutine(Cutscene());
}
public void IncrementCutsceneIndex()
{
CutsceneIndex++;
}
private IEnumerator setupSusie()
{
yield return new WaitForSeconds(0.2f);
ActivePartyMember activePartyMember = PartyMemberSystem.Instance.HasMemberInParty(PartyMemberSystem.Instance.Default_Susie);
if (activePartyMember != null)
{
if (activePartyMember != null)
{
MonoBehaviour.print(activePartyMember.PartyMemberDescription);
}
Susie = activePartyMember.PartyMemberFollowSettings;
}
else
{
Debug.LogError("Susie is not in the party?????");
}
}
private void RunFreshChat(CHATBOXTEXT text, int index, bool ForcePosition, bool OnBottom)
{
CutsceneChatter.FirstTextPlayed = false;
CutsceneChatter.CurrentIndex = index;
CutsceneChatter.FinishedText = false;
CutsceneChatter.Text = text;
if (ForcePosition)
{
CutsceneChatter.ManualTextboxPosition = true;
CutsceneChatter.OnBottom = OnBottom;
}
CutsceneChatter.RUN();
}
private IEnumerator Cutscene()
{
Kris = PlayerManager.Instance;
PlayerCamera = CameraManager.instance;
yield return new WaitForSeconds(0.2f);
Kris._PAnimation.FootstepsEnabled = false;
Kris._PMove.GetComponent<Collider2D>().enabled = false;
while (PlayerCamera.transform.position.x != OAOTable.position.x || PlayerCamera.transform.position.y != OAOTable.position.y)
{
yield return null;
Vector3 target = new Vector3(OAOTable.position.x, OAOTable.position.y, PlayerCamera.transform.position.z);
PlayerCamera.transform.position = Vector3.MoveTowards(PlayerCamera.transform.position, target, 3f * Time.deltaTime);
}
yield return new WaitForSeconds(0.1f);
RunFreshChat(CutsceneChats[0], 0, ForcePosition: true, OnBottom: true);
MusicManager.PlaySong(Music_AdventureStart, FadePreviousSong: false, 0f);
while (CutsceneIndex != 1)
{
yield return null;
}
yield return new WaitForSeconds(1.25f);
RunFreshChat(CutsceneChats[0], 1, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 2)
{
yield return null;
}
yield return new WaitForSeconds(1f);
OAOShadow.SetActive(value: true);
MusicManager.PlaySong(Music_NoSound, FadePreviousSong: false, 0f);
CutsceneSource.PlayOneShot(CutsceneSounds[0]);
PlayerCamera.ReverbFilter.reverbPreset = AudioReverbPreset.Off;
yield return new WaitForSeconds(1f);
RunFreshChat(CutsceneChats[0], 2, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 3)
{
yield return null;
}
yield return new WaitForSeconds(1f);
OAOShadow.SetActive(value: false);
MusicManager.PlaySong(Music_NoSound, FadePreviousSong: false, 0f);
CutsceneSource.PlayOneShot(CutsceneSounds[0]);
PlayerCamera.ReverbFilter.reverbPreset = AudioReverbPreset.Off;
yield return new WaitForSeconds(1f);
RunFreshChat(CutsceneChats[0], 3, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 4)
{
yield return null;
}
yield return new WaitForSeconds(0.1f);
CutsceneSource.PlayOneShot(CutsceneSounds[1]);
yield return new WaitForSeconds(1.35f);
RunFreshChat(CutsceneChats[0], 4, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 5)
{
yield return null;
}
PapyrusAnimator.Play("IdleFace");
PapyrusArmorAnimator.Play("PapyrusArmor");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(PapyrusArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(PapyrusAngryEyebrows, "MOVEMENTX", "MOVEMENTY", Vector2.down);
int sansWalkIndex = 0;
while ((Vector2)Sans.transform.position != SansWalkPositions[5])
{
yield return null;
if (sansWalkIndex < 6)
{
if ((Vector2)Sans.transform.position != SansWalkPositions[sansWalkIndex])
{
SansAnimator.Play("Walk");
SansArmorAnimator.Play("SansArmor_Walk");
SansAnimator.SetBool("MOVING", value: true);
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", SansWalkDirections[sansWalkIndex]);
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", SansWalkDirections[sansWalkIndex]);
Sans.transform.position = Vector2.MoveTowards(Sans.transform.position, SansWalkPositions[sansWalkIndex], 3f * Time.deltaTime);
Kris._PMove.RotatePlayerAnimTowardsPosition(SansAnimator.transform.position);
Susie.RotateSusieTowardsPosition(SansAnimator.transform.position);
}
else
{
sansWalkIndex++;
}
}
else
{
SansAnimator.SetBool("MOVING", value: false);
SansArmorAnimator.Play("SansArmor");
}
}
SansAnimator.GetComponent<SpriteRenderer>().enabled = false;
SansArmorAnimator.GetComponent<SpriteRenderer>().enabled = false;
CutsceneSource.PlayOneShot(CutsceneSounds[2]);
yield return new WaitForSeconds(1.75f);
Kris._PMove.RotatePlayerAnim(Vector2.up);
Susie.RotateSusieToDirection(Vector2.up);
RunFreshChat(CutsceneChats[0], 5, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 6)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
while (PlayerCamera.transform.position.x != 0f || PlayerCamera.transform.position.y != -0.45f)
{
yield return null;
Vector3 target2 = new Vector3(0f, -0.45f, PlayerCamera.transform.position.z);
PlayerCamera.transform.position = Vector3.MoveTowards(PlayerCamera.transform.position, target2, 5f * Time.deltaTime);
}
SansAnimator.GetComponent<SpriteRenderer>().enabled = true;
SansArmorAnimator.GetComponent<SpriteRenderer>().enabled = true;
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.up);
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.up);
CutsceneSource.PlayOneShot(CutsceneSounds[2]);
PapyrusAnimator.Play("IdleFace");
PapyrusArmorAnimator.Play("PapyrusArmor");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(PapyrusArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(PapyrusAngryEyebrows, "MOVEMENTX", "MOVEMENTY", Vector2.down);
sansWalkIndex = 5;
while ((Vector2)Sans.transform.position != SansWalkPositions[6])
{
yield return null;
if (sansWalkIndex < 7)
{
if ((Vector2)Sans.transform.position != SansWalkPositions[sansWalkIndex])
{
SansAnimator.Play("Walk");
SansArmorAnimator.Play("SansArmor_Walk");
SansAnimator.SetBool("MOVING", value: true);
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", SansWalkDirections[sansWalkIndex]);
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", SansWalkDirections[sansWalkIndex]);
Sans.transform.position = Vector2.MoveTowards(Sans.transform.position, SansWalkPositions[sansWalkIndex], 3f * Time.deltaTime);
Kris._PMove.RotatePlayerAnimTowardsPosition(SansAnimator.transform.position);
Susie.RotateSusieTowardsPosition(SansAnimator.transform.position);
}
else
{
sansWalkIndex++;
}
}
else
{
SansAnimator.SetBool("MOVING", value: false);
SansArmorAnimator.Play("SansArmor");
}
}
SansAnimator.Play("Idle");
SansAnimator.SetBool("MOVING", value: false);
SansArmorAnimator.Play("SansArmor");
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
yield return new WaitForSeconds(0.5f);
PapyrusAnimator.Play("IdleFace");
PapyrusArmorAnimator.Play("PapyrusArmor");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.right);
CutsceneUtils.RotateCharacterToDirection(PapyrusArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.right);
Berdly.gameObject.SetActive(value: true);
BerdlyAnimator.GetComponent<SpriteRenderer>().enabled = true;
int berdlyWalkIndex = 0;
while ((Vector2)Berdly.transform.position != BerdlyWalkPositions[0])
{
yield return null;
if (berdlyWalkIndex < 1)
{
if ((Vector2)Berdly.transform.position != BerdlyWalkPositions[berdlyWalkIndex])
{
BerdlyAnimator.Play("Walk");
CutsceneUtils.RotateCharacterToDirection(BerdlyAnimator, "MOVEMENTX", "MOVEMENTY", BerdlyWalkDirections[berdlyWalkIndex]);
Berdly.transform.position = Vector2.MoveTowards(Berdly.transform.position, BerdlyWalkPositions[berdlyWalkIndex], 3f * Time.deltaTime);
Kris._PMove.RotatePlayerAnimTowardsPosition(SansAnimator.transform.position);
Susie.RotateSusieTowardsPosition(SansAnimator.transform.position);
}
else
{
berdlyWalkIndex++;
}
}
else
{
BerdlyAnimator.Play("Idle");
}
}
BerdlyAnimator.Play("Idle");
yield return new WaitForSeconds(0.25f);
BerdlyAnimator.Play("berdly_praise");
yield return new WaitForSeconds(0.1f);
RunFreshChat(CutsceneChats[1], 0, ForcePosition: true, OnBottom: false);
while (CutsceneIndex != 7)
{
yield return null;
}
yield return new WaitForSeconds(1.5f);
RunFreshChat(CutsceneChats[1], 1, ForcePosition: true, OnBottom: false);
while (CutsceneIndex != 8)
{
yield return null;
}
PapyrusAnimator.Play("IdleFace");
PapyrusArmorAnimator.Play("PapyrusArmor");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(PapyrusArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(PapyrusAngryEyebrows, "MOVEMENTX", "MOVEMENTY", Vector2.down);
Kris_IdleUp();
SusieAnim_IdleUp();
sansWalkIndex = 6;
berdlyWalkIndex = 1;
while ((Vector2)Sans.transform.position != SansWalkPositions[9] || (Vector2)Berdly.transform.position != BerdlyWalkPositions[2])
{
yield return null;
if (sansWalkIndex < 10)
{
if ((Vector2)Sans.transform.position != SansWalkPositions[sansWalkIndex])
{
SansAnimator.Play("Walk");
SansArmorAnimator.Play("SansArmor_Walk");
SansAnimator.SetBool("MOVING", value: true);
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", SansWalkDirections[sansWalkIndex]);
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", SansWalkDirections[sansWalkIndex]);
Sans.transform.position = Vector2.MoveTowards(Sans.transform.position, SansWalkPositions[sansWalkIndex], 3f * Time.deltaTime);
}
else
{
sansWalkIndex++;
}
}
else
{
SansAnimator.SetBool("MOVING", value: false);
SansArmorAnimator.Play("SansArmor");
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
}
if (sansWalkIndex >= 7)
{
PapyrusTransform.position = Vector3.MoveTowards(PapyrusTransform.position, new Vector2(-2.015f, PapyrusTransform.position.y), 3f * Time.deltaTime);
}
if (berdlyWalkIndex >= 2)
{
Kris.transform.position = Vector3.MoveTowards(Kris.transform.position, new Vector2(-2.565f, Kris.transform.position.y), 3f * Time.deltaTime);
Susie.transform.position = Vector3.MoveTowards(Susie.transform.position, new Vector2(0f, Susie.transform.position.y), 3f * Time.deltaTime);
}
if (berdlyWalkIndex < 3)
{
if ((Vector2)Berdly.transform.position != BerdlyWalkPositions[berdlyWalkIndex])
{
BerdlyAnimator.Play("Walk");
CutsceneUtils.RotateCharacterToDirection(BerdlyAnimator, "MOVEMENTX", "MOVEMENTY", BerdlyWalkDirections[berdlyWalkIndex]);
Berdly.transform.position = Vector2.MoveTowards(Berdly.transform.position, BerdlyWalkPositions[berdlyWalkIndex], 3f * Time.deltaTime);
}
else
{
berdlyWalkIndex++;
}
}
else
{
BerdlyAnimator.Play("Idle");
CutsceneUtils.RotateCharacterToDirection(BerdlyAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.up);
}
}
BerdlyAnimator.Play("Idle");
CutsceneUtils.RotateCharacterToDirection(BerdlyAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.up);
SansAnimator.SetBool("MOVING", value: false);
SansArmorAnimator.Play("SansArmor");
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
while (PapyrusTransform.position.x != -2.015f)
{
yield return null;
PapyrusTransform.position = Vector3.MoveTowards(PapyrusTransform.position, new Vector2(-2.015f, PapyrusTransform.position.y), 3f * Time.deltaTime);
}
while (Kris.transform.position.x != -2.565f || Susie.transform.position.x != 0f)
{
yield return null;
Kris.transform.position = Vector3.MoveTowards(Kris.transform.position, new Vector2(-2.565f, Kris.transform.position.y), 3f * Time.deltaTime);
Susie.transform.position = Vector3.MoveTowards(Susie.transform.position, new Vector2(0f, Susie.transform.position.y), 3f * Time.deltaTime);
}
EndCutscene();
}
public void EndCutscene()
{
CutsceneIndex = 0;
OAOCutscene.StartCutscene();
}
public void Sans_Idle_Down()
{
SansAnimator.Play("Idle");
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
SansArmorAnimator.Play("SansArmor");
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
}
public void Sans_Idle_Right()
{
SansAnimator.Play("Idle");
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.right);
SansArmorAnimator.Play("SansArmor");
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.right);
}
public void Sans_Idle_Left()
{
SansAnimator.Play("Idle");
CutsceneUtils.RotateCharacterToDirection(SansAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.left);
SansArmorAnimator.Play("SansArmor");
CutsceneUtils.RotateCharacterToDirection(SansArmorAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.left);
}
public void Susie_HeadScratch()
{
Susie.SusieAnimator.Play("Susie_Awkward");
}
public void SusieAnim_IdleRight()
{
Susie.SusieAnimator.Play("Idle");
Susie.RotateSusieToDirection(Vector2.right);
}
public void SusieAnim_IdleLeft()
{
Susie.SusieAnimator.Play("Idle");
Susie.RotateSusieToDirection(Vector2.left);
}
public void SusieAnim_IdleUp()
{
Susie.SusieAnimator.Play("Idle");
Susie.RotateSusieToDirection(Vector2.up);
}
public void Kris_IdleDown()
{
Kris._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
Kris._PMove.RotatePlayerAnim(Vector2.down);
}
public void Kris_IdleRight()
{
Kris._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
Kris._PMove.RotatePlayerAnim(Vector2.right);
}
public void Kris_IdleLeft()
{
Kris._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
Kris._PMove.RotatePlayerAnim(Vector2.left);
}
public void Kris_IdleUp()
{
Kris._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
Kris._PMove.RotatePlayerAnim(Vector2.up);
}
public void Papyrus_Shock()
{
PapyrusAnimator.Play("Papyrus_Shock");
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Shock");
}
public void SusieKris_FacePapyus()
{
Kris._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
Kris._PMove.RotatePlayerAnim(Vector2.up);
Susie.SusieAnimator.Play("Idle");
Susie.RotateSusieToDirection(Vector2.up);
}
public void SusieKris_FaceBerdly()
{
Kris._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
Kris._PMove.RotatePlayerAnim(Vector2.right);
Susie.SusieAnimator.Play("Idle");
Susie.RotateSusieToDirection(Vector2.right);
}
private void OnDrawGizmos()
{
if (SansWalkPositions != null && SansWalkPositions.Length >= 2 && BerdlyWalkPositions != null && BerdlyWalkPositions.Length >= 2)
{
for (int i = 0; i < SansWalkPositions.Length - 1; i++)
{
Vector2 vector = SansWalkPositions[i];
Vector2 vector2 = SansWalkPositions[i + 1];
Gizmos.color = Color.blue;
Gizmos.DrawLine(vector, vector2);
}
for (int j = 0; j < BerdlyWalkPositions.Length - 1; j++)
{
Vector2 vector3 = BerdlyWalkPositions[j];
Vector2 vector4 = BerdlyWalkPositions[j + 1];
Gizmos.color = Color.cyan;
Gizmos.DrawLine(vector3, vector4);
}
}
}
}