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

412 lines
16 KiB
C#

using System.Collections;
using UnityEngine;
public class PapyrusRoom_AfterAdventureCutscene : MonoBehaviour
{
[Header("References")]
[SerializeField]
private int cutsceneIndex;
[SerializeField]
private Vector3[] KrisCutscenePositions;
[SerializeField]
private Vector3[] SusieCutscenePositions;
[SerializeField]
private Vector3[] PapyrusCutscenePositions;
[SerializeField]
private Vector3[] BerdlyCutscenePositions;
[SerializeField]
private float[] PapyrusWalkspeeds;
[Space(5f)]
[SerializeField]
private Susie_Follower Susie;
[SerializeField]
private GameObject Papyrus;
[SerializeField]
private Animator PapyrusAnimator;
[SerializeField]
private GameObject Berdly;
[SerializeField]
private GameObject BerdlySweatOverlay;
[SerializeField]
private Animator BerdlyAnimator;
[Space(5f)]
[SerializeField]
private INT_Chat CutsceneChatter;
[SerializeField]
private CHATBOXTEXT[] CutsceneChats;
[SerializeField]
private INT_Chat[] ChatsToDisable;
[SerializeField]
private CHATBOXTEXT NewTorielCall;
[SerializeField]
private CHATBOXTEXT NewBerdlyCall;
[Space(5f)]
[SerializeField]
private GameObject PapyrusChairObject;
[Space(5f)]
[SerializeField]
private TRIG_LEVELTRANSITION LevelTransition;
[Space(15f)]
[Header("Sounds")]
[SerializeField]
private AudioSource CutsceneSource;
[SerializeField]
private AudioClip[] CutsceneAudioClips;
private bool HasFinishedWalking;
private bool Susie_FinishedWalkAnim;
private int berdlywalkindex;
public void StopMusic()
{
MusicManager.StopSong(Fade: true, 1f);
}
private void Update()
{
if (cutsceneIndex != 0)
{
if (cutsceneIndex != 3)
{
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Cutscene;
LightworldMenu.Instance.CanOpenMenu = false;
}
else
{
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.NoPlayerMovement;
LightworldMenu.Instance.CanOpenMenu = true;
}
CutsceneUpdate();
}
}
private void CutsceneUpdate()
{
switch (cutsceneIndex)
{
case 2:
Susie.FollowingEnabled = false;
Susie.AnimationOverriden = true;
if (PlayerManager.Instance.transform.position != KrisCutscenePositions[0])
{
PlayerManager.Instance.transform.position = Vector3.MoveTowards(PlayerManager.Instance.transform.position, KrisCutscenePositions[0], 3f * Time.deltaTime);
PlayerManager.Instance._PMove.AnimationOverriden = true;
PlayerManager.Instance._PMove._anim.SetBool("MOVING", value: true);
PlayerManager.Instance._PMove._anim.SetFloat("MOVEMENTX", 1f);
PlayerManager.Instance._PMove._anim.SetFloat("MOVEMENTY", 0f);
PlayerManager.Instance._PMove.RotatePlayerAnim(new Vector2(1f, 0f));
}
if (Susie.transform.position != SusieCutscenePositions[0])
{
Susie.transform.position = Vector3.MoveTowards(Susie.transform.position, SusieCutscenePositions[0], 4f * Time.deltaTime);
Susie.AnimationOverriden = true;
Susie.SusieAnimator.SetFloat("VelocityX", 1f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 100f);
}
if (Susie.transform.position == SusieCutscenePositions[0] && !Susie_FinishedWalkAnim)
{
Susie_FinishedWalkAnim = true;
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
Susie.RotateSusieToDirection(new Vector2(0f, -1f));
}
if (PlayerManager.Instance.transform.position == KrisCutscenePositions[0])
{
PlayerManager.Instance._PMove._anim.SetBool("MOVING", value: false);
PlayerManager.Instance._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
PlayerManager.Instance._PMove.RotatePlayerAnim(new Vector2(-1f, 0f));
}
if (Susie.transform.position == SusieCutscenePositions[0] && PlayerManager.Instance.transform.position == KrisCutscenePositions[0] && !HasFinishedWalking)
{
HasFinishedWalking = true;
CutsceneChatter.Text = CutsceneChats[0];
CutsceneChatter.CurrentIndex = 0;
CutsceneChatter.CanUse = true;
CutsceneChatter.FirstTextPlayed = false;
CutsceneChatter.FinishedText = false;
CutsceneChatter.RUN();
}
break;
case 7:
PapyrusAnimator.Play("Papyrus_ComputerRight");
if (PlayerManager.Instance.transform.position != KrisCutscenePositions[1])
{
PlayerManager.Instance.transform.position = Vector3.MoveTowards(PlayerManager.Instance.transform.position, KrisCutscenePositions[1], 3f * Time.deltaTime);
PlayerManager.Instance._PMove.AnimationOverriden = true;
PlayerManager.Instance._PMove._anim.SetBool("MOVING", value: true);
PlayerManager.Instance._PMove._anim.SetFloat("MOVEMENTX", 0f);
PlayerManager.Instance._PMove._anim.SetFloat("MOVEMENTY", -1f);
PlayerManager.Instance._PMove.RotatePlayerAnim(new Vector2(0f, -1f));
}
if (PlayerManager.Instance.transform.position == KrisCutscenePositions[1])
{
PlayerManager.Instance._PMove._anim.SetBool("MOVING", value: false);
PlayerManager.Instance._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
PlayerManager.Instance._PMove.RotatePlayerAnim(new Vector2(0f, -1f));
}
if (Susie.transform.position != SusieCutscenePositions[1])
{
Susie.transform.position = Vector3.MoveTowards(Susie.transform.position, SusieCutscenePositions[1], 3f * Time.deltaTime);
Susie.AnimationOverriden = true;
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", -1f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 100f);
}
if (Susie.transform.position == SusieCutscenePositions[1])
{
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
Susie.SusieAnimator.Play("Idle");
Susie.RotateSusieToDirection(new Vector2(0f, -1f));
}
if (Berdly.transform.position != BerdlyCutscenePositions[0] && berdlywalkindex == 0)
{
Berdly.transform.position = Vector3.MoveTowards(Berdly.transform.position, BerdlyCutscenePositions[0], 8f * Time.deltaTime);
BerdlyAnimator.speed = 5f;
BerdlyAnimator.Play("berdly_walk_up");
}
else if (berdlywalkindex != 1)
{
berdlywalkindex = 1;
}
if (Berdly.transform.position != BerdlyCutscenePositions[1] && berdlywalkindex == 1)
{
Berdly.transform.position = Vector3.MoveTowards(Berdly.transform.position, BerdlyCutscenePositions[1], 8f * Time.deltaTime);
BerdlyAnimator.speed = 5f;
BerdlyAnimator.Play("berdly_walk_left");
}
if (Berdly.transform.position == BerdlyCutscenePositions[1] && berdlywalkindex == 1)
{
BerdlyAnimator.Play("berdly_idle_up");
BerdlyAnimator.speed = 1f;
CutsceneChatter.Text = CutsceneChats[2];
CutsceneChatter.CurrentIndex = 0;
CutsceneChatter.CanUse = true;
CutsceneChatter.FirstTextPlayed = false;
CutsceneChatter.FinishedText = false;
CutsceneChatter.RUN();
}
if (Susie.transform.position == SusieCutscenePositions[1] && PlayerManager.Instance.transform.position == KrisCutscenePositions[1] && Berdly.transform.position == BerdlyCutscenePositions[1])
{
cutsceneIndex = 8;
}
break;
case 9:
if (PlayerManager.Instance.transform.position != KrisCutscenePositions[2])
{
PlayerManager.Instance.transform.position = Vector3.MoveTowards(PlayerManager.Instance.transform.position, KrisCutscenePositions[2], 1f * Time.deltaTime);
PlayerManager.Instance._PMove.AnimationOverriden = true;
PlayerManager.Instance._PMove._anim.SetBool("MOVING", value: true);
PlayerManager.Instance._PMove._anim.SetFloat("MOVEMENTX", 1f);
PlayerManager.Instance._PMove._anim.SetFloat("MOVEMENTY", 0f);
PlayerManager.Instance._PMove.RotatePlayerAnim(new Vector2(0f, -1f));
}
if (Susie.transform.position != SusieCutscenePositions[2])
{
Susie.transform.position = Vector3.MoveTowards(Susie.transform.position, SusieCutscenePositions[2], 1f * Time.deltaTime);
Susie.AnimationOverriden = true;
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", -1f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 100f);
}
break;
}
}
public void BeginCutscene()
{
cutsceneIndex = 1;
Papyrus.GetComponent<SPR_FaceTarget>().Active = false;
PapyrusAnimator.Play("Papyrus_Idle_Right");
StartCoroutine(DelayUntilWalkAway());
}
public void AfterBerdlyCall()
{
cutsceneIndex = 4;
PlaySusieAnim_IdleDown();
StartCoroutine(BerdlyDelay());
}
private IEnumerator BerdlyDelay()
{
yield return new WaitForSeconds(2f);
cutsceneIndex = 5;
CutsceneChatter.Text = CutsceneChats[1];
CutsceneChatter.CurrentIndex = 0;
CutsceneChatter.CanUse = true;
CutsceneChatter.FirstTextPlayed = false;
CutsceneChatter.FinishedText = false;
CutsceneChatter.RUN();
}
public void AfterSusieDotDotDot()
{
if (cutsceneIndex != 6)
{
cutsceneIndex = 6;
StartCoroutine(DelayUntilBerdlyArrive());
}
}
private IEnumerator DelayUntilBerdlyArrive()
{
yield return new WaitForSeconds(2f);
Berdly.SetActive(value: true);
BerdlySweatOverlay.SetActive(value: true);
BerdlyAnimator.Play("berdly_walk_up");
cutsceneIndex = 7;
CutsceneSource.PlayOneShot(CutsceneAudioClips[0]);
}
private void PapyrusSitDown()
{
PapyrusAnimator.Play("Papyrus_ComputerIdle_Sad");
PapyrusChairObject.SetActive(value: false);
Papyrus.transform.position = PapyrusCutscenePositions[0];
}
public void PlaySusieAnim_IdleRight()
{
Susie.AnimationOverriden = true;
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
Susie.RotateSusieToDirection(new Vector2(1f, 0f));
Susie.SusieAnimator.Play("Idle");
}
public void PlaySusieAnim_IdleLeft()
{
Susie.AnimationOverriden = true;
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
Susie.RotateSusieToDirection(new Vector2(-1f, 0f));
Susie.SusieAnimator.Play("Idle");
}
public void PlaySusieAnim_IdleDown()
{
Susie.AnimationOverriden = true;
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
Susie.RotateSusieToDirection(new Vector2(0f, -1f));
Susie.SusieAnimator.Play("Idle");
}
public void PlaySusieAnim_Angry()
{
Susie.AnimationOverriden = true;
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
Susie.SusieAnimator.Play("Susie_Angry_Right");
}
public void BeginCallSequence()
{
cutsceneIndex = 3;
LightworldMenu.Instance.QueuedCharacterCalls[0] = NewTorielCall;
LightworldMenu.Instance.QueuedCharacterCalls[1] = NewBerdlyCall;
LightworldMenu.Instance.CallChatIndexes[0] = 0;
LightworldMenu.Instance.CallChatIndexes[1] = 0;
}
public void RevertKrisControl()
{
cutsceneIndex = 5;
}
private IEnumerator DelayUntilWalkAway()
{
yield return new WaitForSeconds(0.5f);
cutsceneIndex = 2;
INT_Chat[] chatsToDisable = ChatsToDisable;
for (int i = 0; i < chatsToDisable.Length; i++)
{
chatsToDisable[i].enabled = false;
}
PapyrusSitDown();
}
public void BerdlyKrisSusie_Left()
{
BerdlyAnim_Left();
PlaySusieAnim_IdleLeft();
PlayerManager.Instance._PMove._anim.SetBool("MOVING", value: false);
PlayerManager.Instance._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
PlayerManager.Instance._PMove.RotatePlayerAnim(new Vector2(-1f, 0f));
}
public void PapyrusAnim_IdleUp()
{
PapyrusAnimator.Play("Papyrus_Idle_Up");
}
public void EndCutscene()
{
cutsceneIndex = 9;
LevelTransition.BeginTransition();
Susie.FollowingEnabled = true;
Susie.AnimationOverriden = false;
Susie.SusieAnimator.Play("Idle");
}
public void BerdlyAnim_Praise()
{
BerdlyAnimator.Play("berdly_praise");
PlaySusieAnim_IdleDown();
PlayerManager.Instance._PMove._anim.SetBool("MOVING", value: false);
PlayerManager.Instance._PMove._anim.Play("OVERWORLD_NOELLE_IDLE");
PlayerManager.Instance._PMove.RotatePlayerAnim(new Vector2(0f, -1f));
}
public void BerdlyAnim_Shock()
{
BerdlyAnimator.Play("berdly_shock");
}
public void BerdlyAnim_Left()
{
BerdlyAnimator.Play("berdly_idle_left");
}
public void BerdlyAnim_Up()
{
BerdlyAnimator.Play("berdly_idle_up");
BerdlySweatOverlay.SetActive(value: false);
}
public void BerdlyAnim_Down()
{
BerdlyAnimator.Play("berdly_idle_down");
}
}