Example #1
0
 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();
         }
     }
 }
Example #3
0
    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();
        }
    }
Example #4
0
    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;
    }
Example #5
0
 private void OnEnterDoorEntered(GameObject entity)
 {
     EnterDoor?.Invoke(entity);
 }