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

405 lines
14 KiB
C#

using System.Collections;
using UnityEngine;
public class EOTD_TrainingArea_LancerByeCutscene : MonoBehaviour
{
public int CutsceneIndex;
[SerializeField]
private Collider2D CutsceneCollider;
[Header("References")]
[SerializeField]
private PlayerManager Kris;
[SerializeField]
private Susie_Follower Susie;
[SerializeField]
private Susie_Follower Ralsei;
[SerializeField]
private CameraManager PlayerCamera;
[SerializeField]
private Animator King;
[SerializeField]
private Animator Queen;
[SerializeField]
private AudioSource CutsceneSource;
[SerializeField]
private AudioClip[] CutsceneSounds;
[SerializeField]
private InventoryItem ItemPostcard;
[Header("Dialogue")]
[SerializeField]
private INT_Chat CutsceneChatter;
[SerializeField]
private CHATBOXTEXT[] CutsceneChats;
[Header("Character Animations")]
[SerializeField]
private Vector2[] SusieWalkPositions;
[SerializeField]
private Vector2[] SusieWalkDirections;
[SerializeField]
private int SusieWalkTarget;
[SerializeField]
private int SusieWalkIndex;
[Space(5f)]
[SerializeField]
private Vector2[] KrisWalkPositions;
[SerializeField]
private Vector2[] KrisWalkDirections;
[SerializeField]
private int KrisWalkTarget;
[SerializeField]
private int KrisWalkIndex;
[Space(5f)]
[SerializeField]
private Vector2[] RalseiWalkPositions;
[SerializeField]
private Vector2[] RalseiWalkDirections;
[SerializeField]
private int RalseiWalkTarget;
[SerializeField]
private int RalseiWalkIndex;
[Space(5f)]
[SerializeField]
private Vector2[] CameraMovePositions;
[SerializeField]
private int CameraMoveTarget;
[SerializeField]
private int CameraMoveIndex;
private void Start()
{
Kris = PlayerManager.Instance;
Susie = PartyMemberSystem.Instance.HasMemberInParty(PartyMemberSystem.Instance.Default_SusieDarkworld).PartyMemberFollowSettings;
Ralsei = PartyMemberSystem.Instance.HasMemberInParty(PartyMemberSystem.Instance.Default_Ralsei).PartyMemberFollowSettings;
}
private void Update()
{
if (CutsceneIndex != 0)
{
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Cutscene;
DarkworldMenu.Instance.CanOpenMenu = false;
Susie.FollowingEnabled = false;
Ralsei.FollowingEnabled = false;
PlayerCamera.FollowPlayerX = false;
CutsceneUpdate();
}
}
private void OnTriggerEnter2D(Collider2D other)
{
int @int = PlayerPrefs.GetInt("EOTD_HasMetLancer", 0);
if (other.tag == "Player")
{
if (@int == 0)
{
CutsceneIndex = 1;
}
CutsceneCollider.enabled = false;
}
}
private void CutsceneUpdate()
{
switch (CutsceneIndex)
{
case 1:
RunFreshChat(CutsceneChats[0], 0, ForcePosition: false, OnBottom: false);
IncrementCutscene();
break;
case 3:
if (KrisWalkIndex < KrisWalkTarget)
{
if ((Vector2)Kris.transform.position != KrisWalkPositions[KrisWalkIndex])
{
Kris.transform.position = Vector2.MoveTowards(Kris.transform.position, KrisWalkPositions[KrisWalkIndex], 6f * Time.deltaTime);
Kris._PMove.AnimationOverriden = true;
Kris._PMove._anim.SetBool("MOVING", value: true);
Kris._PMove._anim.SetFloat("MOVEMENTX", KrisWalkDirections[KrisWalkIndex].x);
Kris._PMove._anim.SetFloat("MOVEMENTY", KrisWalkDirections[KrisWalkIndex].y);
}
else
{
KrisWalkIndex++;
}
}
else
{
Kris._PMove._anim.SetBool("MOVING", value: false);
Kris._PMove._anim.SetFloat("MOVEMENTX", 0f);
Kris._PMove._anim.SetFloat("MOVEMENTY", 1f);
}
if (SusieWalkIndex < SusieWalkTarget)
{
if ((Vector2)Susie.transform.position != SusieWalkPositions[SusieWalkIndex])
{
Susie.transform.position = Vector2.MoveTowards(Susie.transform.position, SusieWalkPositions[SusieWalkIndex], 6f * Time.deltaTime);
Susie.AnimationOverriden = true;
Susie.SusieAnimator.Play("Walk");
Susie.SusieAnimator.SetFloat("VelocityX", SusieWalkDirections[SusieWalkIndex].x);
Susie.SusieAnimator.SetFloat("VelocityY", SusieWalkDirections[SusieWalkIndex].y);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 1f);
}
else
{
SusieWalkIndex++;
}
}
else
{
Susie.SusieAnimator.Play("Idle");
Susie.SusieAnimator.SetFloat("VelocityX", 1f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
}
if (RalseiWalkIndex < RalseiWalkTarget)
{
if ((Vector2)Ralsei.transform.position != RalseiWalkPositions[RalseiWalkIndex])
{
Ralsei.transform.position = Vector2.MoveTowards(Ralsei.transform.position, RalseiWalkPositions[RalseiWalkIndex], 6f * Time.deltaTime);
Ralsei.SusieAnimator.Play("Walk");
Ralsei.AnimationOverriden = true;
Ralsei.SusieAnimator.SetFloat("VelocityX", RalseiWalkDirections[RalseiWalkIndex].x);
Ralsei.SusieAnimator.SetFloat("VelocityY", RalseiWalkDirections[RalseiWalkIndex].y);
Ralsei.SusieAnimator.SetFloat("VelocityMagnitude", 1f);
}
else
{
RalseiWalkIndex++;
}
}
else
{
Ralsei.SusieAnimator.Play("Idle");
Ralsei.SusieAnimator.SetFloat("VelocityX", 0f);
Ralsei.SusieAnimator.SetFloat("VelocityY", 1f);
Ralsei.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
}
if (CameraMoveIndex < CameraMoveTarget)
{
if ((Vector2)PlayerCamera.transform.position != CameraMovePositions[CameraMoveIndex])
{
PlayerCamera.transform.position = Vector3.MoveTowards(PlayerCamera.transform.position, (Vector3)CameraMovePositions[CameraMoveIndex] + new Vector3(0f, 0f, -10f), 6f * Time.deltaTime);
}
else
{
CameraMoveIndex++;
}
}
if ((Vector2)Kris.transform.position == KrisWalkPositions[0] && (Vector2)Susie.transform.position == SusieWalkPositions[0] && (Vector2)Ralsei.transform.position == RalseiWalkPositions[0])
{
Ralsei.SusieAnimator.Play("Idle");
Ralsei.SusieAnimator.SetFloat("VelocityX", 0f);
Ralsei.SusieAnimator.SetFloat("VelocityY", 1f);
Ralsei.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
Susie.SusieAnimator.Play("Idle");
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", 0f);
Kris._PMove._anim.SetFloat("MOVEMENTY", 1f);
IncrementCutscene();
RunFreshChat(CutsceneChats[1], 0, ForcePosition: false, OnBottom: false);
}
break;
case 5:
ChatboxManager.Instance.AllowInput = false;
StartCoroutine(QueenMorseCode());
IncrementCutscene();
break;
case 7:
StartCoroutine(PostcardEnding());
IncrementCutscene();
break;
case 9:
if (PlayerCamera.transform.position.x != Kris.transform.position.x)
{
float x = Kris.transform.position.x;
PlayerCamera.transform.position = Vector3.MoveTowards(PlayerCamera.transform.position, new Vector3(x, 3.5f, -10f), 6f * Time.deltaTime);
}
else
{
IncrementCutscene();
EndCutscene();
}
break;
case 2:
case 4:
case 6:
case 8:
break;
}
}
private void RunFreshChat(CHATBOXTEXT text, int index, bool ForcePosition, bool OnBottom)
{
CutsceneChatter.CanUse = true;
CutsceneChatter.FirstTextPlayed = false;
CutsceneChatter.CurrentIndex = index;
CutsceneChatter.FinishedText = false;
CutsceneChatter.Text = text;
if (ForcePosition)
{
CutsceneChatter.ManualTextboxPosition = true;
CutsceneChatter.OnBottom = OnBottom;
}
CutsceneChatter.RUN();
}
public void IncrementCutscene()
{
CutsceneIndex++;
}
public void EndCutscene()
{
DarkworldInventory.Instance.PlayerKeyItems.Add(ItemPostcard);
CutsceneIndex = 0;
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Game;
DarkworldMenu.Instance.CanOpenMenu = true;
Susie.positions.Clear();
Susie.rotations.Clear();
Ralsei.positions.Clear();
Ralsei.rotations.Clear();
Susie.FollowingEnabled = true;
Ralsei.FollowingEnabled = true;
Susie.AnimationOverriden = false;
Ralsei.AnimationOverriden = false;
Susie.SusieAnimator.Play("Idle");
Ralsei.SusieAnimator.Play("Idle");
PlayerPrefs.SetInt("EOTD_HasMetLancer", 1);
PlayerCamera.FollowPlayerX = true;
Kris._PMove.AnimationOverriden = false;
}
public void KingAnim_CradleIdle()
{
float normalizedTime = King.GetCurrentAnimatorStateInfo(0).normalizedTime;
King.Play("King_HoldLancer_Idle", 0, normalizedTime);
}
public void KingAnim_CradleIdle_Smile()
{
float normalizedTime = King.GetCurrentAnimatorStateInfo(0).normalizedTime;
King.Play("King_HoldLancer_Smile", 0, normalizedTime);
}
public void KingAnim_CradleIdle_Neutral()
{
float normalizedTime = King.GetCurrentAnimatorStateInfo(0).normalizedTime;
King.Play("King_HoldLancer_Neutral", 0, normalizedTime);
}
public void KingAnim_CradleIdle_Shock()
{
float normalizedTime = King.GetCurrentAnimatorStateInfo(0).normalizedTime;
King.Play("King_HoldLancer_Shock", 0, normalizedTime);
}
public void KingAnim_CradleIdle_Embarrased()
{
float normalizedTime = King.GetCurrentAnimatorStateInfo(0).normalizedTime;
King.Play("King_HoldLancer_Embarrased", 0, normalizedTime);
}
public void KingAnim_CradleShush()
{
King.Play("King_HoldLancer_Shush");
}
public void QueenAnim_IdleOutline_Left()
{
Queen.Play("Queen_IdleOutline_Left");
}
public void QueenAnim_IdleOutline_Down()
{
Queen.Play("Queen_IdleOutline_Down");
}
public void QueenAnim_LaughOutline()
{
Queen.Play("Queen_LaughOutline");
}
public void SusieAnim_ProudRight()
{
Susie.AnimationOverriden = true;
Susie.SusieAnimator.Play("SusieDarkworld_Proud_Right");
}
public void SusieAnim_AngryRight()
{
Susie.AnimationOverriden = true;
Susie.SusieAnimator.Play("SusieDarkworld_Angry_Right");
}
public void SusieAnim_Idle_Right()
{
Susie.AnimationOverriden = true;
Susie.SusieAnimator.Play("Idle");
Susie.SusieAnimator.SetFloat("VelocityX", 1f);
Susie.SusieAnimator.SetFloat("VelocityY", 0f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
}
public void SusieAnim_Idle_Down()
{
Susie.AnimationOverriden = true;
Susie.SusieAnimator.Play("Idle");
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
Susie.SusieAnimator.SetFloat("VelocityY", -1f);
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
}
private IEnumerator QueenMorseCode()
{
CutsceneSource.pitch = 3f;
CutsceneSource.PlayOneShot(CutsceneSounds[0]);
yield return new WaitForSeconds(5f);
CutsceneSource.pitch = 1f;
CutsceneSource.enabled = false;
ChatboxManager.Instance.EndText();
ChatboxManager.Instance.AllowInput = true;
yield return new WaitForSeconds(0f);
CutsceneSource.enabled = true;
RunFreshChat(CutsceneChats[2], 0, ForcePosition: false, OnBottom: false);
}
private IEnumerator PostcardEnding()
{
CutsceneSource.pitch = 1f;
CutsceneSource.enabled = true;
CutsceneSource.PlayOneShot(CutsceneSounds[1]);
yield return new WaitForSeconds(2f);
RunFreshChat(CutsceneChats[3], 0, ForcePosition: false, OnBottom: false);
}
}