256 lines
8.9 KiB
C#
256 lines
8.9 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
public class EOTD_CastleFloor_LockedDoor : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private string LancerSpokenPlayerPref = "EOTD_HasMetLancer";
|
|
|
|
[SerializeField]
|
|
private INT_Chat DoorChat;
|
|
|
|
[SerializeField]
|
|
private CHATBOXTEXT Door_PreventLeave;
|
|
|
|
[SerializeField]
|
|
private CHATBOXTEXT Door_AllowChoice;
|
|
|
|
[SerializeField]
|
|
private CHATBOXTEXT DoorCutscene_RalseiBegin;
|
|
|
|
[SerializeField]
|
|
private CHATBOXTEXT DoorCutscene_RalseiFinale;
|
|
|
|
[Header("Cutscene")]
|
|
[SerializeField]
|
|
private int CutsceneIndex;
|
|
|
|
[SerializeField]
|
|
private Susie_Follower Susie;
|
|
|
|
[SerializeField]
|
|
private Susie_Follower Ralsei;
|
|
|
|
[SerializeField]
|
|
private CameraManager Camera;
|
|
|
|
[SerializeField]
|
|
private Vector3 KrisTargetPos;
|
|
|
|
[SerializeField]
|
|
private Vector3 SusieTargetPos;
|
|
|
|
[SerializeField]
|
|
private Vector3 RalseiTargetPos;
|
|
|
|
[SerializeField]
|
|
private SpriteRenderer backgroundRenderer;
|
|
|
|
[SerializeField]
|
|
private Sprite backgroundDoorOpenSprite;
|
|
|
|
[SerializeField]
|
|
private GameObject backgroundDoorGlow;
|
|
|
|
[SerializeField]
|
|
private AudioSource CutsceneSource;
|
|
|
|
[SerializeField]
|
|
private AudioClip DoorOpenSound;
|
|
|
|
[SerializeField]
|
|
private TRIG_LEVELTRANSITION LevelTransition;
|
|
|
|
private void Start()
|
|
{
|
|
if (PlayerPrefs.GetInt(LancerSpokenPlayerPref, 0) == 0)
|
|
{
|
|
DoorChat.Text = Door_PreventLeave;
|
|
}
|
|
else
|
|
{
|
|
DoorChat.Text = Door_AllowChoice;
|
|
}
|
|
Susie = PartyMemberSystem.Instance.HasMemberInParty(PartyMemberSystem.Instance.Default_SusieDarkworld).PartyMemberFollowSettings;
|
|
Ralsei = PartyMemberSystem.Instance.HasMemberInParty(PartyMemberSystem.Instance.Default_Ralsei).PartyMemberFollowSettings;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (CutsceneIndex != 0)
|
|
{
|
|
CutsceneUpdate();
|
|
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Cutscene;
|
|
PlayerManager.Instance._PMove.RotatePlayerAnim(Vector2.up);
|
|
DarkworldMenu.Instance.CanOpenMenu = false;
|
|
Camera.FollowPlayerX = false;
|
|
Camera.FollowPlayerY = false;
|
|
}
|
|
}
|
|
|
|
public void BeginEndCutscene()
|
|
{
|
|
CutsceneIndex = 1;
|
|
MusicManager.StopSong(Fade: true, 1f);
|
|
Ralsei.FollowingEnabled = false;
|
|
Ralsei.RotateSusieToDirection(Vector2.down);
|
|
Susie.FollowingEnabled = false;
|
|
Susie.RotateSusieToDirection(Vector2.up);
|
|
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Cutscene;
|
|
DarkworldMenu.Instance.CanOpenMenu = false;
|
|
PlayerManager.Instance._PMove.RotatePlayerAnim(Vector2.up);
|
|
ChatboxManager.Instance.EndText();
|
|
}
|
|
|
|
private IEnumerator DelayUntilRalseiTalk()
|
|
{
|
|
yield return new WaitForSeconds(1.5f);
|
|
CutsceneIndex = 3;
|
|
RunFreshChat(DoorCutscene_RalseiBegin, 0, ForcePosition: false, OnBottom: false);
|
|
}
|
|
|
|
private IEnumerator RalseiDoorOpen()
|
|
{
|
|
yield return new WaitForSeconds(0.5f);
|
|
RalseiAnim_Idle_Left();
|
|
yield return new WaitForSeconds(0.5f);
|
|
RalseiAnim_Idle_Up();
|
|
yield return new WaitForSeconds(2f);
|
|
backgroundRenderer.sprite = backgroundDoorOpenSprite;
|
|
backgroundDoorGlow.SetActive(value: false);
|
|
CutsceneSource.PlayOneShot(DoorOpenSound);
|
|
CutsceneUtils.ShakeTransform(Camera.transform);
|
|
yield return new WaitForSeconds(1.5f);
|
|
RalseiAnim_Idle_Down();
|
|
RunFreshChat(DoorCutscene_RalseiFinale, 0, ForcePosition: false, OnBottom: false);
|
|
}
|
|
|
|
private void RunFreshChat(CHATBOXTEXT text, int index, bool ForcePosition, bool OnBottom)
|
|
{
|
|
DoorChat.FirstTextPlayed = false;
|
|
DoorChat.CurrentIndex = index;
|
|
DoorChat.FinishedText = false;
|
|
DoorChat.Text = text;
|
|
if (ForcePosition)
|
|
{
|
|
DoorChat.ManualTextboxPosition = true;
|
|
DoorChat.OnBottom = OnBottom;
|
|
}
|
|
DoorChat.RUN();
|
|
}
|
|
|
|
private void CutsceneUpdate()
|
|
{
|
|
switch (CutsceneIndex)
|
|
{
|
|
case 1:
|
|
if (PlayerManager.Instance.transform.position != KrisTargetPos)
|
|
{
|
|
PlayerManager.Instance.transform.position = Vector2.MoveTowards(PlayerManager.Instance.transform.position, KrisTargetPos, 3f * Time.deltaTime);
|
|
}
|
|
if (Susie.transform.position != SusieTargetPos)
|
|
{
|
|
Susie.transform.position = Vector2.MoveTowards(Susie.transform.position, SusieTargetPos, 3f * Time.deltaTime);
|
|
}
|
|
if (Ralsei.transform.position != RalseiTargetPos)
|
|
{
|
|
Ralsei.transform.position = Vector2.MoveTowards(Ralsei.transform.position, RalseiTargetPos, 6f * Time.deltaTime);
|
|
}
|
|
if (Camera.transform.position.x != RalseiTargetPos.x)
|
|
{
|
|
Camera.transform.position = Vector3.MoveTowards(Camera.transform.position, new Vector3(RalseiTargetPos.x, Camera.transform.position.y, Camera.transform.position.z), 1.5f * Time.deltaTime);
|
|
}
|
|
if (Camera.transform.position.x == RalseiTargetPos.x && PlayerManager.Instance.transform.position == KrisTargetPos && Susie.transform.position == SusieTargetPos && Ralsei.transform.position == RalseiTargetPos)
|
|
{
|
|
CutsceneIndex = 2;
|
|
StartCoroutine(DelayUntilRalseiTalk());
|
|
}
|
|
break;
|
|
case 4:
|
|
StartCoroutine(RalseiDoorOpen());
|
|
IncrementCutsceneIndex();
|
|
break;
|
|
case 6:
|
|
LevelTransition.BeginTransition(0.25f);
|
|
RalseiAnim_Idle_Left();
|
|
IncrementCutsceneIndex();
|
|
break;
|
|
case 7:
|
|
if ((Vector2)PlayerManager.Instance.transform.position != (Vector2)KrisTargetPos + Vector2.up * 3f)
|
|
{
|
|
PlayerManager.Instance._PMove._anim.SetBool("MOVING", value: true);
|
|
PlayerManager.Instance.transform.position = Vector2.MoveTowards(PlayerManager.Instance.transform.position, (Vector2)KrisTargetPos + Vector2.up * 3f, 0.75f * Time.deltaTime);
|
|
}
|
|
if ((Vector2)Susie.transform.position != (Vector2)SusieTargetPos + Vector2.up * 3f)
|
|
{
|
|
Susie.SusieAnimator.SetBool("InCutscene", value: true);
|
|
Susie.SusieAnimator.Play("Walk");
|
|
Susie.transform.position = Vector2.MoveTowards(Susie.transform.position, (Vector2)SusieTargetPos + Vector2.up * 3f, 0.75f * Time.deltaTime);
|
|
}
|
|
if ((Vector2)Ralsei.transform.position != (Vector2)RalseiTargetPos + Vector2.right * 3f)
|
|
{
|
|
Ralsei.SusieAnimator.SetBool("InCutscene", value: true);
|
|
Ralsei.SusieAnimator.Play("Walk");
|
|
Ralsei.transform.position = Vector2.MoveTowards(Ralsei.transform.position, (Vector2)RalseiTargetPos + Vector2.right * 3f, 1f * Time.deltaTime);
|
|
}
|
|
break;
|
|
case 2:
|
|
case 3:
|
|
case 5:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void IncrementCutsceneIndex()
|
|
{
|
|
CutsceneIndex++;
|
|
}
|
|
|
|
public void RalseiAnim_Idle_Down()
|
|
{
|
|
Ralsei.SusieAnimator.Play("Idle");
|
|
Ralsei.SusieAnimator.SetFloat("VelocityX", 0f);
|
|
Ralsei.SusieAnimator.SetFloat("VelocityY", -1f);
|
|
Ralsei.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
|
|
}
|
|
|
|
public void RalseiAnim_Idle_Left()
|
|
{
|
|
Ralsei.SusieAnimator.Play("Idle");
|
|
Ralsei.SusieAnimator.SetFloat("VelocityX", -1f);
|
|
Ralsei.SusieAnimator.SetFloat("VelocityY", 0f);
|
|
Ralsei.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
|
|
}
|
|
|
|
public void RalseiAnim_Idle_Up()
|
|
{
|
|
Ralsei.SusieAnimator.Play("Idle");
|
|
Ralsei.SusieAnimator.SetFloat("VelocityX", 0f);
|
|
Ralsei.SusieAnimator.SetFloat("VelocityY", 1f);
|
|
Ralsei.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
|
|
}
|
|
|
|
public void RalseiAnim_Blush_Down()
|
|
{
|
|
Ralsei.SusieAnimator.Play("Ralsei_Blush_Down");
|
|
}
|
|
|
|
public void RalseiAnim_Laugh()
|
|
{
|
|
Ralsei.SusieAnimator.Play("Ralsei_Laugh");
|
|
}
|
|
|
|
public void SusieAnim_Scratch()
|
|
{
|
|
Susie.SusieAnimator.Play("SusieDarkworld_Scratch");
|
|
}
|
|
|
|
public void SusieAnim_Idle_Up()
|
|
{
|
|
Susie.SusieAnimator.Play("Idle");
|
|
Susie.SusieAnimator.SetFloat("VelocityX", 0f);
|
|
Susie.SusieAnimator.SetFloat("VelocityY", 1f);
|
|
Susie.SusieAnimator.SetFloat("VelocityMagnitude", 0f);
|
|
}
|
|
}
|