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

148 lines
5.2 KiB
C#

using System.Collections;
using UnityEngine;
public class EOTDRouxlsRoom_Puzzle : MonoBehaviour
{
[SerializeField]
private PushBlock_PreasurePlate[] PreasurePlates;
[SerializeField]
private int AmountRequired = 2;
[SerializeField]
private bool PuzzleComplete;
[SerializeField]
private bool ConfettiDrop;
public bool hasMovedPartyMembers;
[SerializeField]
private bool PlayerInputDisable;
[SerializeField]
private AudioClip CompleteSound;
[SerializeField]
private ParticleSystem ConfettiParticle;
[SerializeField]
private INT_Chat AngryRouxlsChat;
[SerializeField]
private HypothesisGoal RouxlsPuzzleGoal;
[SerializeField]
private Vector2 SusieMovePos;
[SerializeField]
private Vector2 RalseiMovePos;
private void Update()
{
if (!PuzzleComplete)
{
int num = 0;
PushBlock_PreasurePlate[] preasurePlates = PreasurePlates;
for (int i = 0; i < preasurePlates.Length; i++)
{
if (preasurePlates[i].Complete)
{
num++;
}
}
if (num == AmountRequired)
{
CompletePuzzle();
PuzzleComplete = true;
}
}
else if (PlayerInputDisable)
{
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Cutscene;
DarkworldMenu.Instance.CanOpenMenu = false;
}
if (ConfettiDrop)
{
ConfettiParticle.transform.position = ConfettiParticle.transform.position + Vector3.down * 10f * Time.deltaTime;
}
}
private void CompletePuzzle()
{
PlayerManager.Instance.PlayerAudioSource.PlayOneShot(CompleteSound);
ConfettiParticle.Play();
PlayerInputDisable = true;
StartCoroutine(DelayUntilConfettiMove());
HypotheticalGoalManager.Instance.CompleteGoal(RouxlsPuzzleGoal);
}
private IEnumerator DelayUntilConfettiMove()
{
yield return new WaitForSeconds(3f);
AngryRouxlsChat.RUN();
ConfettiDrop = true;
while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
{
yield return null;
}
yield return null;
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Game;
DarkworldMenu.Instance.CanOpenMenu = true;
}
public void FUCKINGMOVE()
{
if (hasMovedPartyMembers)
{
return;
}
hasMovedPartyMembers = true;
foreach (ActivePartyMember activePartyMember in PartyMemberSystem.Instance.ActivePartyMembers)
{
activePartyMember.PartyMemberFollowSettings.FollowingEnabled = false;
activePartyMember.PartyMemberFollowSettings.currentState = Susie_Follower.MemberFollowerStates.Disabled;
activePartyMember.PartyMemberFollowSettings.RotateSusieToDirection(Vector2.right);
}
StartCoroutine(FUCKINGMOVE_TIMED());
}
public void okaysorrycomeback()
{
foreach (ActivePartyMember activePartyMember in PartyMemberSystem.Instance.ActivePartyMembers)
{
activePartyMember.PartyMemberFollowSettings.FollowingEnabled = true;
activePartyMember.PartyMemberFollowSettings.AnimationOverriden = false;
activePartyMember.PartyMemberFollowSettings.SusieAnimator.SetBool("InCutscene", value: false);
activePartyMember.PartyMemberFollowSettings.ClearAllMovementHistory();
activePartyMember.PartyMemberFollowSettings.currentState = Susie_Follower.MemberFollowerStates.SettingUpPosition;
}
}
private IEnumerator FUCKINGMOVE_TIMED()
{
ActivePartyMember susie = PartyMemberSystem.Instance.HasMemberInParty(PartyMemberSystem.Instance.Default_SusieDarkworld);
ActivePartyMember ralsei = PartyMemberSystem.Instance.HasMemberInParty(PartyMemberSystem.Instance.Default_Ralsei);
while ((Vector2)susie.PartyMemberTransform.position != SusieMovePos || (Vector2)ralsei.PartyMemberTransform.position != RalseiMovePos)
{
yield return null;
susie.PartyMemberTransform.position = Vector2.MoveTowards(susie.PartyMemberTransform.position, SusieMovePos, 6f * Time.deltaTime);
susie.PartyMemberFollowSettings.AnimationOverriden = true;
susie.PartyMemberFollowSettings.SusieAnimator.Play("Idle");
susie.PartyMemberFollowSettings.SusieAnimator.SetBool("InCutscene", value: true);
ralsei.PartyMemberTransform.position = Vector2.MoveTowards(ralsei.PartyMemberTransform.position, RalseiMovePos, 6f * Time.deltaTime);
ralsei.PartyMemberFollowSettings.AnimationOverriden = true;
ralsei.PartyMemberFollowSettings.SusieAnimator.Play("Idle");
ralsei.PartyMemberFollowSettings.SusieAnimator.SetBool("InCutscene", value: true);
}
}
public void EndCutscene()
{
PlayerInputDisable = false;
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Game;
DarkworldMenu.Instance.CanOpenMenu = true;
okaysorrycomeback();
}
}