Ejemplo n.º 1
0
    // Use this for initialization
    void Start()
    {
        Animator          anim  = GetComponentInChildren <Animator>();
        AnimatorStateInfo state = anim.GetCurrentAnimatorStateInfo(0);

        anim.Play(state.fullPathHash, -1, Random.Range(0f, 1f));

        rb           = GetComponent <Rigidbody>();
        currentState = 0;
        timer        = 2f;
        walkSpeed    = 4;
        runSpeed     = 13;
        stateOfMind  = State_Of_Mind.IDLE;

        int personalityGen = Random.Range(1, 101);

        if (personalityGen < 60)
        {
            personality = Enemy_Personality.NORMAL;
        }
        else if (personalityGen >= 60 && personalityGen < 89)
        {
            personality = Enemy_Personality.TIMID;
        }
        else if (personalityGen >= 89 && personalityGen < 100)
        {
            personality = Enemy_Personality.FRIENDLY;
        }
        else
        {
            personality = Enemy_Personality.SPECIAL;
        }

        player1Found = false;
        player2Found = false;

        panicCycles = 0;

        health = 100;

        dropType = 0;
    }
Ejemplo n.º 2
0
    void doNormalPanicBehavior()
    {
        if (personality == Enemy_Personality.FRIENDLY)
        {
            //You monster.
            personality = Enemy_Personality.TIMID;
        }
        switch (currentState)
        {
        case 0:
            //Calculate turn angle.
            //Also, break out of panic mode if the enemy has been panicking for a bit and has lost sight of the player.
            if (!player1Found && !player2Found && panicCycles > 10)
            {
                stateOfMind = State_Of_Mind.IDLE;
                panicCycles = 0;
                break;
            }
            turn         = Random.Range(-150f, 150f);
            turnSpeed    = Random.Range(15f, 20f);
            currentState = 1;
            break;

        case 1:
            //Turn.
            float angleToTurn = turnSpeed * Mathf.Sign(turn);
            turn -= angleToTurn;
            Vector3 rotation = new Vector3(0, angleToTurn, 0);
            transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles + rotation);
            if (Mathf.Abs(turn) - turnSpeed < 0)
            {
                currentState = 2;
                timer        = Random.Range(3f, 6f);
            }
            break;

        case 2:
            //Move forward.
            if (Physics.Raycast(transform.position, transform.forward, 1f, 1 << 0))
            {
                turn         = Random.Range(90f, 270f) * (Random.Range(0, 1) == 0 ? -1 : 1);
                turnSpeed    = Random.Range(3f, 5f);
                currentState = 1;
            }
            //Layer 8 is going to be the Enemy Layer
            else if (Physics.Raycast(transform.position, transform.forward, 1f, 1 << 8))
            {
                turn         = Random.Range(30f, 60f) * (Random.Range(0, 1) == 0 ? -1 : 1);
                turnSpeed    = Random.Range(3f, 5f);
                currentState = 1;
            }
            else
            {
                rb.MovePosition(transform.position + transform.forward * runSpeed * Time.deltaTime);
            }
            break;
        }
        panicCycles++;
        timer -= Time.deltaTime;
        if (timer < 0 && currentState == 2)
        {
            currentState++;
            if (currentState > 2)
            {
                currentState = 0;
            }
            timer = 1f;
        }
    }