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
}
}