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

378 lines
14 KiB
C#

using System.Collections;
using UnityEngine;
public class PapyrusRoom_AmbushGreetCutscene : MonoBehaviour
{
[SerializeField]
private int CutsceneIndex;
[Header("-- References --")]
[SerializeField]
private Transform PapyrusTransform;
[SerializeField]
private Animator PapyrusAngryEyebrows;
[SerializeField]
private Animator PapyrusAnimator;
[SerializeField]
private Animator PapyrusArmorAnimator;
[SerializeField]
private Animator SansArmorAnimator;
[SerializeField]
private Susie_Follower Susie;
[SerializeField]
private PlayerManager Kris;
[SerializeField]
private Transform Sans;
[SerializeField]
private Animator SansAnimator;
[SerializeField]
private GameObject Candle;
[SerializeField]
private GameObject TableLighting;
[SerializeField]
private GameObject DarkRoomObjects;
[SerializeField]
private GameObject LightRoomObjects;
[SerializeField]
private PapyrusRoom_RoomTourCutscene RoomTourCutscene;
[Header("-- Settings --")]
[SerializeField]
private Vector2[] KrisWalkPositions;
[SerializeField]
private Vector2[] SusieWalkPositions;
[Space(10f)]
[SerializeField]
private Vector2[] KrisWalkDirections;
[SerializeField]
private Vector2[] SusieWalkDirections;
[Space(10f)]
[SerializeField]
private Vector2[] PapyrusWalkDirections;
[SerializeField]
private Vector2[] PapyrusWalkPositions;
[Header("-- Cutscene Chats --")]
[SerializeField]
private INT_Chat CutsceneChatter;
[SerializeField]
private CHATBOXTEXT[] CutsceneChats;
[Header("-- Cutscene Sounds --")]
[SerializeField]
private AudioSource CutsceneSource;
[SerializeField]
private AudioClip[] CutsceneSounds;
private void Start()
{
DarkRoomObjects.SetActive(value: true);
LightRoomObjects.SetActive(value: false);
StartCutscene();
}
private void Update()
{
if (CutsceneIndex > 0)
{
Kris._PlayerState = PlayerManager.PlayerState.Cutscene;
LightworldMenu.Instance.CanOpenMenu = false;
Susie.FollowingEnabled = false;
Susie.AnimationOverriden = false;
}
}
public void StartCutscene()
{
StartCoroutine(Cutscene());
}
public void IncrementCutsceneIndex()
{
CutsceneIndex++;
}
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()
{
yield return new WaitForSeconds(0.2f);
Kris = PlayerManager.Instance;
ActivePartyMember activePartyMember = PartyMemberSystem.Instance.HasMemberInParty(PartyMemberSystem.Instance.Default_Susie);
if (activePartyMember != null)
{
MonoBehaviour.print(activePartyMember.PartyMemberDescription);
Susie = activePartyMember.PartyMemberFollowSettings;
Susie.transform.position = new Vector2(3.65f, -8.5f);
}
else
{
Debug.LogError("Susie is not in the party?????");
}
PlayerManager.Instance._PAnimation.FootstepsEnabled = true;
IncrementCutsceneIndex();
yield return new WaitForSeconds(0.5f);
while ((Vector2)Kris.transform.position != KrisWalkPositions[0] || (Vector2)Susie.transform.position != SusieWalkPositions[0])
{
yield return null;
if ((Vector2)Kris.transform.position != KrisWalkPositions[0])
{
Kris.transform.position = Vector2.MoveTowards(Kris.transform.position, KrisWalkPositions[0], 3f * Time.deltaTime);
Kris._PMove.AnimationOverriden = true;
Kris._PMove._anim.SetBool("MOVING", value: true);
Kris._PMove._anim.SetFloat("MOVEMENTX", KrisWalkDirections[0].x);
Kris._PMove._anim.SetFloat("MOVEMENTY", KrisWalkDirections[0].y);
}
else
{
Kris._PMove._anim.SetBool("MOVING", value: false);
Kris._PMove._anim.SetFloat("MOVEMENTX", -1f);
Kris._PMove._anim.SetFloat("MOVEMENTY", 0f);
PlayerManager.Instance._PAnimation.FootstepsEnabled = false;
}
if ((Vector2)Susie.transform.position != SusieWalkPositions[0])
{
Susie.transform.position = Vector2.MoveTowards(Susie.transform.position, SusieWalkPositions[0], 3f * Time.deltaTime);
Susie.SusieAnimator.Play("Walk");
Susie.SusieAnimator.SetFloat("VelocityX", SusieWalkDirections[0].x);
Susie.SusieAnimator.SetFloat("VelocityY", SusieWalkDirections[0].y);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 1f);
}
else
{
Susie.SusieAnimator.Play("IdleSad");
Susie.SusieAnimator.SetFloat("VelocityX", -1f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
}
}
Kris._PMove._anim.SetBool("MOVING", value: false);
Kris._PMove._anim.SetFloat("MOVEMENTX", -1f);
Kris._PMove._anim.SetFloat("MOVEMENTY", 0f);
Susie.SusieAnimator.Play("IdleSad");
Susie.SusieAnimator.SetFloat("VelocityX", -1f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
MonoBehaviour.print("done");
yield return new WaitForSeconds(1f);
RunFreshChat(CutsceneChats[0], 0, ForcePosition: true, OnBottom: false);
while (CutsceneIndex != 2)
{
yield return null;
}
yield return new WaitForSeconds(1f);
CutsceneSource.PlayOneShot(CutsceneSounds[0]);
PapyrusAnimator.Play("Papyrus_Knight_FadeIn");
Candle.SetActive(value: true);
TableLighting.SetActive(value: true);
yield return new WaitForSeconds(3f);
RunFreshChat(CutsceneChats[0], 1, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 3)
{
yield return null;
}
yield return new WaitForSeconds(1f);
CutsceneSource.PlayOneShot(CutsceneSounds[1]);
DarkRoomObjects.SetActive(value: false);
PapyrusAnimator.Play("Papyrus_HoldPaper");
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Paper");
LightRoomObjects.SetActive(value: true);
Sans.gameObject.SetActive(value: true);
yield return new WaitForSeconds(2.5f);
RunFreshChat(CutsceneChats[1], 0, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 4)
{
yield return null;
}
PapyrusAnimator.Play("IdleFace");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.right);
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Right");
yield return new WaitForSeconds(1f);
RunFreshChat(CutsceneChats[1], 1, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 5)
{
yield return null;
}
CutsceneSource.PlayOneShot(CutsceneSounds[2]);
PapyrusAnimator.Play("Papyrus_HandsUp_Down");
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Down");
SPR_YSorting component = PapyrusArmorAnimator.GetComponent<SPR_YSorting>();
component.AutomaticRealtimeSorting = false;
component.SPR.sortingOrder = 999;
yield return new WaitForSeconds(1f);
CutsceneSource.PlayOneShot(CutsceneSounds[3]);
while (PapyrusArmorAnimator.transform.position.y < 5f)
{
yield return null;
PapyrusArmorAnimator.transform.position = Vector2.MoveTowards(PapyrusArmorAnimator.transform.position, (Vector2)PapyrusArmorAnimator.transform.position + Vector2.up * 6f, 7.5f * Time.fixedDeltaTime * Time.timeScale);
}
PapyrusArmorAnimator.GetComponent<SpriteRenderer>().enabled = false;
int papyrusWalkIndex = 0;
while ((Vector2)PapyrusTransform.position != PapyrusWalkPositions[1])
{
yield return null;
if ((Vector2)PapyrusTransform.position != PapyrusWalkPositions[papyrusWalkIndex])
{
PapyrusAnimator.Play("Walk");
PapyrusAnimator.SetFloat("MOVEMENTX", PapyrusWalkDirections[papyrusWalkIndex].x);
PapyrusAnimator.SetFloat("MOVEMENTY", PapyrusWalkDirections[papyrusWalkIndex].y);
PapyrusTransform.position = Vector2.MoveTowards(PapyrusTransform.position, PapyrusWalkPositions[papyrusWalkIndex], 4f * Time.deltaTime);
}
else
{
papyrusWalkIndex++;
}
}
Susie.SusieAnimator.GetComponent<SpriteRenderer>().enabled = false;
PapyrusAnimator.Play("Papyrus_Handshake_Susie");
RunFreshChat(CutsceneChats[2], 0, ForcePosition: true, OnBottom: false);
while (CutsceneIndex != 6)
{
yield return null;
}
Susie.SusieAnimator.GetComponent<SpriteRenderer>().enabled = true;
PapyrusAnimator.Play("Walk");
while ((Vector2)PapyrusTransform.position != PapyrusWalkPositions[3])
{
yield return null;
if ((Vector2)PapyrusTransform.position != PapyrusWalkPositions[papyrusWalkIndex])
{
PapyrusAnimator.Play("Walk");
PapyrusAnimator.SetFloat("MOVEMENTX", PapyrusWalkDirections[papyrusWalkIndex].x);
PapyrusAnimator.SetFloat("MOVEMENTY", PapyrusWalkDirections[papyrusWalkIndex].y);
PapyrusTransform.position = Vector2.MoveTowards(PapyrusTransform.position, PapyrusWalkPositions[papyrusWalkIndex], 4f * Time.deltaTime * Time.timeScale);
}
else
{
papyrusWalkIndex++;
}
}
Susie.RotateSusieToDirection(Vector2.down);
Susie.SusieAnimator.Play("Idle");
Kris._PMove._anim.GetComponent<SpriteRenderer>().enabled = false;
PapyrusAnimator.Play("Papyrus_Handshake_Kris");
RunFreshChat(CutsceneChats[2], 1, ForcePosition: true, OnBottom: false);
while (CutsceneIndex != 7)
{
yield return null;
}
yield return new WaitForSeconds(0.5f);
Kris._PMove._anim.GetComponent<SpriteRenderer>().enabled = true;
Papyrus_Idle_Up();
Susie.RotateSusieToDirection(Vector2.up);
Kris._PMove.RotatePlayerAnim(Vector2.up);
RunFreshChat(CutsceneChats[3], 0, ForcePosition: true, OnBottom: true);
while (CutsceneIndex != 8)
{
yield return null;
}
CutsceneIndex = 0;
RoomTourCutscene.StartCutscene();
}
public void PapyrusKnight_Stand()
{
PapyrusAnimator.Play("Papyrus_Knight_Stand");
}
public void PapyrusKnight_Pose()
{
PapyrusAnimator.Play("Papyrus_Knight_Pose");
}
public void PapyrusKnight_Laugh()
{
PapyrusAnimator.Play("Papyrus_Knight_Laugh");
}
public void PapyrusKnight_Paper()
{
PapyrusAnimator.Play("Papyrus_Knight_Paper");
}
public void Papyrus_Idle_Up()
{
PapyrusAnimator.Play("IdleFace");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.up);
CutsceneUtils.RotateCharacterToDirection(PapyrusAngryEyebrows, "MOVEMENTX", "MOVEMENTY", Vector2.up);
float normalizedTime = PapyrusArmorAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime;
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Up", -1, normalizedTime);
}
public void Papyrus_Idle_Right()
{
PapyrusAnimator.Play("IdleFace");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.right);
CutsceneUtils.RotateCharacterToDirection(PapyrusAngryEyebrows, "MOVEMENTX", "MOVEMENTY", Vector2.right);
float normalizedTime = PapyrusArmorAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime;
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Right", -1, normalizedTime);
}
public void Papyrus_Idle_Left()
{
PapyrusAnimator.Play("IdleFace");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.left);
CutsceneUtils.RotateCharacterToDirection(PapyrusAngryEyebrows, "MOVEMENTX", "MOVEMENTY", Vector2.left);
float normalizedTime = PapyrusArmorAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime;
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Left", -1, normalizedTime);
}
public void Papyrus_Idle_Down()
{
PapyrusAnimator.Play("IdleFace");
CutsceneUtils.RotateCharacterToDirection(PapyrusAnimator, "MOVEMENTX", "MOVEMENTY", Vector2.down);
CutsceneUtils.RotateCharacterToDirection(PapyrusAngryEyebrows, "MOVEMENTX", "MOVEMENTY", Vector2.down);
float normalizedTime = PapyrusArmorAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime;
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Down", -1, normalizedTime);
}
public void Papyrus_Proud()
{
PapyrusAnimator.Play("Papyrus_Praise", -1, 0f);
PapyrusArmorAnimator.Play("MP_PapyrusRoom_PapyrusArmor_Praise", -1, 0f);
}
public void Papyrus_EnableAngryEyebrows()
{
PapyrusAngryEyebrows.gameObject.SetActive(value: true);
CutsceneUtils.RotateCharacterToDirection(PapyrusAngryEyebrows, "MOVEMENTX", "MOVEMENTY", new Vector2(PapyrusAnimator.GetFloat("MOVEMENTX"), PapyrusAnimator.GetFloat("MOVEMENTY")));
}
public void Papyrus_DisableAngryEyebrows()
{
PapyrusAngryEyebrows.gameObject.SetActive(value: false);
}
}