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(); } /// /// Call when the search playable director is over. /// 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 }