246 lines
11 KiB
C#
246 lines
11 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// This should be called from the script when the player presses the button to get out.
|
|
/// </summary>
|
|
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();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Should be called when from the trigger of the closetComeOutPlaybleDirector in the end.
|
|
/// </summary>
|
|
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();
|
|
}
|
|
/// <summary>
|
|
/// Call when the search playable director is over.
|
|
/// </summary>
|
|
public void EnemyCanChangePointAfterSearching()
|
|
{
|
|
PatrolManager.GetInstance()._canChangePoint = true;
|
|
}
|
|
|
|
public void MedeaKillsPlayerInCloset()
|
|
{
|
|
MedeaDemonicEnemyBehaviour.GetInstance().DisableMedeaMeshRenderers();
|
|
PlayerDeath.GetInstance().LowSanityGhostKillsPlayer();
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
} |