using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Playables; namespace InfallibleCode { public class ClosetHideBehaviour : MonoBehaviour, IInteractable { [Header("Player Related")] [SerializeField] private PlayableDirector closetHidePlaybleDirector; [SerializeField] private PlayableDirector closetComeOutPlayableDirector; [SerializeField] private Transform _closetTeleportPoint; [SerializeField] private Transform _inClosetTeleportPoint; [SerializeField] private Transform _outsideClosetPoint; //public bool InCloset; //public bool CanPressKey = true; public Transform OutOfCloset; [Header("Medea Related")] public Transform enemySearchPosition; [SerializeField] private PlayableDirector enemyClosetSearchPlayableDirector; [SerializeField] private PlayableDirector enemyKillPlayerInClosetPlayableDirector; public bool playerIsHidingInThisCloset; [Header("Light switch")] [Tooltip("If there's a light switch in the closet")] public NewLightSwitch lightSwitch; void Awake() { //OutOfCloset = _outsideClosetPoint; } public void Interact() { ClosetUpdate(); } public void ClosetUpdate() { //If you are inside the closet and press the key to exit you will exit the closet. if (HideManager.GetInstance().InCloset && !HideManager.GetInstance().OutOfCloset) { //StartCoroutine(OutOfClosetDelay()); //PlayerManager.GetInstance().PlayerCharacterController.enabled = false; //PlayerManager.GetInstance().playerGameObj.transform.position = _outsideClosetPoint.position; //Teleports player outside the closet. //PlayerManager.GetInstance().PlayerCharacterController.enabled = true; //HideManager.GetInstance().CanPressKey = false; //HideManager.GetInstance().OutOfCloset = true; //print("Player is outside the closet"); GetOutOfCloset(); } else { //StartCoroutine(InClosetDelay()); //PlayerManager.GetInstance().PlayerCharacterController.enabled = false; //PlayerManager.GetInstance().playerGameObj.transform.position = _insideClosetPoint.position; //Teleports player inside the closet. //PlayerManager.GetInstance().PlayerCharacterController.enabled = true; //HideManager.GetInstance().CanPressKey = false; //HideManager.GetInstance().OutOfCloset = false; //print("player is inside the closet"); HideInCloset(); } } private void HideInCloset() { PlayerManager.GetInstance()._PlayerMovement.ForcePlayerStandUpFromCrouch(); PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.SetFloat("speedPercent", 0f); //PlayerManager.GetInstance()._PlayerMovement.enabled = false; PlayerManager.GetInstance().PlayerMovementCannotBeEnabled(); PlayerManager.GetInstance().DisablePlayerMovement(); //Teleports player outside the closet where he supposed to be for the animation to begin. Vector3 newPosition = _closetTeleportPoint.position; PlayerManager.GetInstance().PlayerCharacterController.enabled = false; PlayerManager.GetInstance().playerGameObj.transform.position = newPosition; PlayerManager.GetInstance().playerGameObj.transform.rotation = _closetTeleportPoint.rotation; PlayerManager.GetInstance().PlayerCharacterController.enabled = true; PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = false; HideManager.GetInstance().CanPressKey = false; HideManager.GetInstance().OutOfCloset = false; //HideManager.GetInstance().InCloset = true;// here closetHidePlaybleDirector.Play(); print("player is inside the closet, GAYH"); var enemyInstance = MedeaDemonicEnemyBehaviour.GetInstance(); if (enemyInstance != null) { if (MedeaDemonicEnemyBehaviour.GetInstance()._medeaAI.isActiveAndEnabled) { MedeaDemonicEnemyBehaviour.GetInstance()._medeaAI.isStopped = true; } } } /// /// This should be called from the script when the player presses the button to get out. /// public void GetOutOfCloset() { PlayerManager.GetInstance()._cameraMovement.enabled = false; PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = false; PlayerManager.GetInstance().playerGameObj.transform.rotation = _inClosetTeleportPoint.rotation; HideManager.GetInstance().CanPressKey = false; closetComeOutPlayableDirector.Play(); HideManager.GetInstance().StopPlayerHideTimer(); print("player is getting out of the closet"); } public void IsInCloset() { //PlayerManager.GetInstance().PlayerCharacterController.enabled = false; //PlayerManager.GetInstance().playerGameObj.transform.position = _inClosetTeleportPoint.position; //PlayerManager.GetInstance().playerGameObj.transform.rotation = _inClosetTeleportPoint.rotation; //PlayerManager.GetInstance().PlayerCharacterController.enabled = true; //PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.gameObject.transform.localPosition = new Vector3(0, 0, 0); HideManager.GetInstance().InCloset = true;// here PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = true; PlayerManager.GetInstance()._cameraMovement.enabled = true; //HideManager.GetInstance().InCloset = true; HideManager.GetInstance().CanPressKey = true; playerIsHidingInThisCloset = true; HideManager.GetInstance().StartPlayerHideTimer(); print("Player is in closet"); var enemyInstance = MedeaDemonicEnemyBehaviour.GetInstance(); if (enemyInstance != null) { if (MedeaDemonicEnemyBehaviour.GetInstance()._medeaAI.isActiveAndEnabled) { MedeaDemonicEnemyBehaviour.GetInstance()._medeaAI.isStopped = false; PatrolManager.GetInstance().UpdateTakeOutPlayerSpot(); PatrolManager.GetInstance().CanPatrol = true; } //MedeaDemonicEnemyBehaviour.GetInstance().StopPlayerLostContinueChasingTimer(); } } /// /// Should be called when from the trigger of the closetComeOutPlaybleDirector in the end. /// public void IsOutOfCloset() { //PlayerManager.GetInstance().PlayerCharacterController.enabled = false; //Vector3 newPosition = _outsideClosetPoint.position; //PlayerManager.GetInstance().playerGameObj.transform.position = newPosition; //PlayerManager.GetInstance().playerGameObj.transform.rotation = _outsideClosetPoint.rotation; //PlayerManager.GetInstance().PlayerCharacterController.enabled = true; PlayerManager.GetInstance().PlayerMovementCanBeEnabled(); PlayerManager.GetInstance().EnablePlayerMovement(); PlayerManager.GetInstance()._cameraMovement.enabled = true; HideManager.GetInstance().InCloset = false; HideManager.GetInstance().CanPressKey = true; PlayerManager.GetInstance().PlayerCharacterController.enabled = true; PlayerManager.GetInstance()._PlayerMovement._CharacterAnimator.enabled = true; playerIsHidingInThisCloset = false; print("Player is out of the closet"); } #region Old Implementation // Update is called once per frame //void Update() //{ // //If you are inside the closet and press the key to exit you will exit the closet. // if (InCloset && !OutOfCloset && Input.GetKeyDown(KeyCode.E) || Input.GetKeyDown(KeyCode.JoystickButton1)/*B button*/) // { // StartCoroutine(OutOfClosetDelay()); // _player.transform.position = _outsideClosetPoint.position; //Teleports player outside the closet. // CanPressKey = false; // OutOfCloset = true; // print("Player is outside the closet"); // } //} //public void HideInCloset() //{ // if (!InCloset && OutOfCloset && Input.GetKeyDown(KeyCode.E) || Input.GetKeyDown(KeyCode.JoystickButton0)/*A button*/) // { // StartCoroutine(InClosetDelay()); // _player.transform.position = _insideClosetPoint.position; //Teleports player inside the closet. // CanPressKey = false; // OutOfCloset = false; // print("player is inside the closet"); // } //} #endregion IEnumerator InClosetDelay() { yield return new WaitForSeconds(1f); HideManager.GetInstance().InCloset = true; HideManager.GetInstance().CanPressKey = true; print("Eimai malakas kai thelo na krifto"); } IEnumerator OutOfClosetDelay() { yield return new WaitForSeconds(1f); HideManager.GetInstance().InCloset = false; HideManager.GetInstance().CanPressKey = true; print("Eimai malakas kai thelo na vgw"); } #region Enemy Related public void PlayEnemyKillPlayerInClosetCutscene() { print("Is killing player in closet"); enemyKillPlayerInClosetPlayableDirector.Play(); } public void PlayEnemyClosetSearchCutscene() { print("Is searching for player in closet"); enemyClosetSearchPlayableDirector.Play(); PatrolManager.GetInstance().medeasCurrentPlayableDirector = enemyClosetSearchPlayableDirector; } public void StopEnemyClosetSearchCutscene() { print("Interrupt closet search cutscene"); //enemyClosetSearchPlayableDirector.Stop(); PatrolManager.GetInstance().medeasCurrentPlayableDirector.Stop(); } /// /// Call when the search playable director is over. /// public void EnemyCanChangePointAfterSearching() { PatrolManager.GetInstance()._canChangePoint = true; } public void MedeaKillsPlayerInCloset() { MedeaDemonicEnemyBehaviour.GetInstance().DisableMedeaMeshRenderers(); PlayerDeath.GetInstance().LowSanityGhostKillsPlayer(); } #endregion } }