public override bool TryInteract(GameObject enterer) { if (Vector3.Distance(transform.position, enterer.transform.position) < enterDistance) { EnterDoor enterDoor = enterer.GetComponent <EnterDoor>(); if (enterDoor != null) { StartCoroutine(LetEnter(enterDoor)); return(true); } } return(false); }
void Start() { if (EnterDoor.getTeleportHasBeenUsed()) { if (gameObject.tag == EnterDoor.getTag()) { GameObject player = GameObject.FindWithTag("Player"); player.transform.position = new Vector3(GameObject.FindGameObjectWithTag(tagDoor).transform.position.x, GameObject.FindGameObjectWithTag(tagDoor).transform.position.y - 1.30f, 0); changePlayerType(); EnterDoor.setTeleportHasBeenUsed(); } } }
private IEnumerator LetEnter(EnterDoor enterer) { doorAnimator.SetBool("open", true); yield return(new WaitForSeconds(0.5f)); enterer.Enter(this); yield return(new WaitForSeconds(1)); if (trigger != null) { trigger.NotifyObservers(); } }
private void Awake() { navMeshAgent = GetComponent <NavMeshAgent>(); animator = GetComponent <Animator>(); _stateMachine = new StateMachine(); var idle = new Idle(this, navMeshAgent, animator); var walk = new Walk(this, navMeshAgent, animator); var changeDestination = new ChangeDestination(this); var enterDoor = new EnterDoor(this); var interactLever = new InteractWithLever(this, navMeshAgent, animator); At(walk, interactLever, InteractLever()); At(interactLever, idle, () => _currentLever == null); At(walk, enterDoor, EnterDoor()); At(enterDoor, walk, () => true); At(idle, walk, () => _nextDestination != Vector3.zero); At(walk, idle, () => Vector3.Distance(transform.position, _currentDestination) < .1f); At(walk, changeDestination, () => _nextDestination != Vector3.zero); At(changeDestination, walk, () => true); _stateMachine.SetState(idle); void At(IState to, IState from, Func <bool> condition) => _stateMachine.AddTransition(to, from, condition); Func <bool> InteractLever() => () => Vector3.Distance(transform.position, _currentDestination) < .2f && _currentLever != null; Func <bool> EnterDoor() => () => Vector3.Distance(transform.position, _currentDestination) < .15f && _currentDoor != null; }
private void OnEnterDoorEntered(GameObject entity) { EnterDoor?.Invoke(entity); }