Files
HauntedBloodlines/Assets/Scripts/Player/HideMechanics/BedHideBehaviourBase.cs
2025-05-29 22:31:40 +03:00

233 lines
9.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class BedHideBehaviourBase : MonoBehaviour
{
public bool isInRightSide;
[SerializeField] private PlayableDirector bedHideRightPlayableDirector;
[SerializeField] private PlayableDirector bedHideLeftPlayableDirector;
[SerializeField] private PlayableDirector bedComeOutRightPlayableDirector;
[SerializeField] private PlayableDirector bedComeOutLeftPlayableDirector;
public bool playerIsHidingUnderBed;
[Header("Medea Related")]
public Transform enemySearchPositionRight;
public Transform enemySearchPositionLeft;
[SerializeField] private PlayableDirector enemyBedSearchPlayableDirector;
[SerializeField] private PlayableDirector enemyKillPlayerBedRightPlayableDirector;
[SerializeField] private PlayableDirector enemyKillPlayerBedLeftPlayableDirector;
public void HideInRightSide()
{
PlayerManager.GetInstance()._PlayerMovement.ForcePlayerStandUpFromCrouch();
isInRightSide = true;
HideManager.GetInstance().isInBedRightSide = true;
Vector3 newPosition = enemySearchPositionRight.position;
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = false;
//PlayerManager.GetInstance().PlayerCharacterController.enabled = false;
PlayerManager.GetInstance()._PlayerMovement.enabled = false;
PlayerManager.GetInstance().playerGameObj.transform.position = newPosition;
PlayerManager.GetInstance().playerGameObj.transform.rotation = enemySearchPositionRight.rotation;
bedHideRightPlayableDirector.Play();
ClockController.GetInstance().canUsePocketWatch = false;
FlashlightController.GetInstance().canUseFlashlight = false;
if (FlashlightController.GetInstance()._IsOpen)
{
FlashlightController.GetInstance().PutFlashlightDown();
FlashlightController.GetInstance()._IsOpen = false;
}
if (MedeaDemonicEnemyBehaviour.GetInstance() != null)
{
MedeaDemonicEnemyBehaviour.GetInstance()._medeaAI.isStopped = true;
}
}
public void HideInLeftSide()
{
ClockController.GetInstance().canUsePocketWatch = false;
PlayerManager.GetInstance()._PlayerMovement.ForcePlayerStandUpFromCrouch();
Vector3 newPosition = enemySearchPositionLeft.position;
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = false;
//PlayerManager.GetInstance().PlayerCharacterController.enabled = false;
PlayerManager.GetInstance()._PlayerMovement.enabled = false;
PlayerManager.GetInstance().playerGameObj.transform.position = newPosition;
PlayerManager.GetInstance().playerGameObj.transform.rotation = enemySearchPositionLeft.rotation;
bedHideLeftPlayableDirector.Play();
ClockController.GetInstance().canUsePocketWatch = false;
FlashlightController.GetInstance().canUseFlashlight = false;
if (FlashlightController.GetInstance()._IsOpen)
{
FlashlightController.GetInstance().PutFlashlightDown();
FlashlightController.GetInstance()._IsOpen = false;
}
if (MedeaDemonicEnemyBehaviour.GetInstance() != null)
{
MedeaDemonicEnemyBehaviour.GetInstance()._medeaAI.isStopped = true;
}
}
public void IsUnderBed()
{
playerIsHidingUnderBed = true;
HideManager.GetInstance().UnderBed = true;
HideManager.GetInstance().CanPressKey = true;
HideManager.GetInstance().StartPlayerHideTimer();
//Enable Bed camera Movement (CHANGE AND IMPLEMENT THIS!!!!!!!)
PlayerManager.GetInstance()._cameraMovement.cameraBedHideMovement = true;
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = true;
print("Is UNDER bed");
if (MedeaDemonicEnemyBehaviour.GetInstance() != null)
{
MedeaDemonicEnemyBehaviour.GetInstance()._medeaAI.isStopped = false;
PatrolManager.GetInstance().UpdateTakeOutPlayerSpot();
PatrolManager.GetInstance().CanPatrol = true;
MedeaDemonicEnemyBehaviour.GetInstance().StopPlayerLostContinueChasingTimer();
}
}
public void UnderBedAnimationIdleTrue()
{
//PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = true;
Quaternion RotationAfterIsUnderBed = PlayerManager.GetInstance()._PlayerMovement.cameraBedHidePosition.localRotation;
PlayerManager.GetInstance()._cameraMovement.transform.localPosition = PlayerManager.GetInstance()._PlayerMovement.cameraBedHidePosition.localPosition;
PlayerManager.GetInstance()._cameraMovement.transform.localRotation = RotationAfterIsUnderBed;
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.SetBool("IsUnderBed", true);
}
public void UnderBedAnimationIdleFalse()
{
PlayerManager.GetInstance()._cameraMovement.transform.localPosition = PlayerManager.GetInstance()._PlayerMovement._cameraDefaultPOS;
PlayerManager.GetInstance()._cameraMovement.transform.localRotation = PlayerManager.GetInstance()._PlayerMovement.cameraDefaultROT;
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.SetBool("IsUnderBed", false);
}
public void ComeOutRightSide()
{
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = false;
bedComeOutRightPlayableDirector.Play();
isInRightSide = false;
HideManager.GetInstance().isInBedRightSide = false;
HideManager.GetInstance().StopPlayerHideTimer();
}
public void ComeOutLeftSide()
{
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = false;
bedComeOutLeftPlayableDirector.Play();
HideManager.GetInstance().StopPlayerHideTimer();
}
public void IsOutOfBed()
{
playerIsHidingUnderBed = false;
HideManager.GetInstance().UnderBed = false;
HideManager.GetInstance().CanPressKey = true;
//Disable Bed camera Movement (CHANGE AND IMPLEMENT THIS!!!!!!!)
PlayerManager.GetInstance()._PlayerMovement.enabled = true;
PlayerManager.GetInstance().PlayerCharacterController.enabled = true;
PlayerManager.GetInstance()._cameraMovement.cameraBedHideMovement = false;
PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = true;
ClockController.GetInstance().canUsePocketWatch = true;
FlashlightController.GetInstance().canUseFlashlight = true;
print("Is OUT of bed");
if(MedeaDemonicEnemyBehaviour.GetInstance()!= null)
{
StopEnemySearchCutscene();
StopEnemyKillPlayerUnderBedLeft();
StopEnemyKillPlayerUnderBedRight();
}
}
public void IfPlayerIsUnderTheBedTransitionToKillCutscene()
{
if (HideManager.GetInstance().UnderBed)
{
if (isInRightSide)
{
PlayEnemyKillPlayerUnderBedRightCutscene();
}
else
{
PlayEnemyKillPlayerUnderBedLeftCutscene();
}
}
}
#region Enemy Related
public void PlayEnemyKillPlayerUnderBedRightCutscene()
{
print("Is killing player under bed Right");
enemyKillPlayerBedRightPlayableDirector.Play();
}
public void PlayEnemyKillPlayerUnderBedLeftCutscene()
{
print("Is killing player under bed Left");
enemyKillPlayerBedLeftPlayableDirector.Play();
}
public void PlayEnemyBedSearchCutscene()
{
print("Is searching for player under bed");
enemyBedSearchPlayableDirector.Play();
PatrolManager.GetInstance().medeasCurrentPlayableDirector = enemyBedSearchPlayableDirector;
}
public void StopEnemyBedSearchCutscene()
{
print("Interrupted the searching for player under bed");
//enemyBedSearchPlayableDirector.Stop();
PatrolManager.GetInstance().medeasCurrentPlayableDirector.Stop();
}
/// <summary>
/// Call when the search playable director is over.
/// </summary>
public void EnemyCanChangePointAfterSearching()
{
PatrolManager.GetInstance()._canChangePoint = true;
}
public void PlayPlayerKillCutscene()
{
PlayerDeath.GetInstance().LowSanityGhostKillsPlayer();
}
public void StopEnemySearchCutscene()
{
if (enemyBedSearchPlayableDirector.time > 0)
{
enemyBedSearchPlayableDirector.Stop();
print("Stopped enemy search playable director");
}
}
public void StopEnemyKillPlayerUnderBedLeft()
{
if (enemyKillPlayerBedLeftPlayableDirector.time > 0)
{
enemyKillPlayerBedLeftPlayableDirector.Stop();
print("Stopped enemy bed kill left playable director");
}
}
public void StopEnemyKillPlayerUnderBedRight()
{
if (enemyKillPlayerBedRightPlayableDirector.time > 0)
{
enemyKillPlayerBedRightPlayableDirector.Stop();
print("Stopped enemy bed kill right playable director");
}
}
#endregion
}