예제 #1
0
    void Suspicious()
    {
        switch (suspiciousState)
        {
        case SuspiciousState.MovingToSuspiciousPosition:
            // if (suspiciousPosition.x <= rb.position.x) {
            //     rb.MovePosition(rb.position + new Vector2(lookDirection.x * moveSpeed * Time.fixedDeltaTime, 0));
            //     if (rb.position.x < suspiciousPosition.x) {
            //         SuspiciousFromMovingToWaiting();
            //     }
            // }
            // if (suspiciousPosition.x >= rb.position.x) {
            //     rb.MovePosition(rb.position + new Vector2(lookDirection.x * moveSpeed * Time.fixedDeltaTime, 0));
            //     if (rb.position.x > suspiciousPosition.x) {
            //         SuspiciousFromMovingToWaiting();
            //     }
            // }
            rb.MovePosition(rb.position + new Vector2(lookDirection.x * moveSpeed * Time.fixedDeltaTime, 0));
            if (Vector2.Distance(rb.position, suspiciousPosition) < .1f)
            {
                SuspiciousFromMovingToWaiting();
            }
            break;

        case SuspiciousState.Waiting:
            if (suspiciousWaitTime <= 0)
            {
                suspiciousWaitTime = startSuspiciousWaitTime;
                statusIcon.GetComponent <Animator>().SetBool("suspiciousWaiting", false);
                statusIcon.GetComponent <SpriteRenderer>().color = Color.white;
                suspiciousState            = SuspiciousState.ReturningToPoint;
                isDistractedByDoppelganger = false;
            }
            else
            {
                suspiciousWaitTime -= Time.deltaTime;
                statusIcon.GetComponent <Animator>().SetBool("Suspicious_Permanent", false);
                statusIcon.GetComponent <SpriteRenderer>().color = new Color(1, 1, 1, ((float)suspiciousWaitTime / (float)startSuspiciousWaitTime));
            }
            break;

        case SuspiciousState.ReturningToPoint:
            if (isStandingGuard)
            {
                state          = State.Patrol;
                patrolState    = PatrolState.Returning;
                patrolWaitTime = startPatrolWaitTime;
            }
            else
            {
                state          = State.Patrol;
                patrolState    = PatrolState.MovingToNextPoint;
                patrolWaitTime = startPatrolWaitTime;
            }
            break;
        }
    }
예제 #2
0
    void BecomeSuspiciousState(Vector2 positionToCheck)
    {
        state              = State.Suspicious;
        suspiciousState    = SuspiciousState.MovingToSuspiciousPosition;
        detectMeasure      = 0;
        suspiciousPosition = positionToCheck;

        statusIcon.GetComponent <SpriteRenderer>().color = Color.white;
        statusIcon.GetComponent <Animator>().SetBool("patrolWaiting", false);
        statusIcon.GetComponent <Animator>().SetTrigger("isSuspicious");
        statusIcon.GetComponent <Animator>().SetBool("Suspicious_Permanent", true);
    }
예제 #3
0
 private void InitStates()
 {
     istate    = new IState[9];
     istate[0] = new IdleState(gameObject);
     istate[1] = new PatrolState(gameObject);
     istate[2] = new SuspiciousState(gameObject);
     istate[3] = new DetectionState(gameObject);
     istate[4] = new AlertState(gameObject);
     istate[5] = new AttackState(gameObject);
     istate[6] = new EscapeState(gameObject);
     istate[7] = new StunState(gameObject);
     istate[8] = new DeadState(gameObject);
 }
예제 #4
0
    private void Awake()
    {
        chaseState      = new ChaseState(this);
        patrolState     = new PatrolState(this);
        guardState      = new GuardState(this);
        dazedState      = new DazedState(this);
        distractedState = new DistractedState(this);
        searchingState  = new SearchingState(this);
        suspiciousState = new SuspiciousState(this);
        koState         = new KOState(this);
        walkState       = new WalkState(this);

        navMeshAgent = GetComponent <NavMeshAgent>();
    }
예제 #5
0
    private void Awake()
    {
        chaseState = new ChaseState(this);
        patrolState = new PatrolState(this);
        guardState = new GuardState(this);
        dazedState = new DazedState(this);
        distractedState = new DistractedState(this);
        searchingState = new SearchingState(this);
        suspiciousState = new SuspiciousState(this);
        koState = new KOState(this);
        walkState = new WalkState(this);
        pointSearchState = new PointSearchState(this);

        navMeshAgent = GetComponent<NavMeshAgent>();
        player = GameObject.FindGameObjectWithTag("Player");
        Path = Pathways[0];
        AIPath CheckpointScript = Path.GetComponent<AIPath>();
        navPoint = CheckpointScript.getPoints()[0];
        currentState = patrolState; //sets the current state
        NoOcclusionLM = 1 << noOcclusionLayer;
        NoOcclusionLM = ~NoOcclusionLM;
    }
예제 #6
0
 public void SuspiciousFromMovingToWaiting()
 {
     suspiciousState = SuspiciousState.Waiting;
     statusIcon.GetComponent <Animator>().SetBool("suspiciousWaiting", true);
 }