Example #1
0
    private void OnTriggerStay(Collider other)
    {
        if (other.gameObject.CompareTag("Player") && AttackTimer <= 0)
        {
            if (GameController.instance.isAlive)
            {
                Animator.SetTrigger("attack" + Random.Range(1, 3));
                other.gameObject.GetComponent <Player_Control>().Health -= 25;
                AttackTimer = AttackCool;
                Audio.PlayOneShot(Hit);

                if (other.gameObject.GetComponent <Player_Control>().Health <= 0)
                {
                    GameController.instance.deathmsg = Localization.GetString("deathStrings", "death_939");
                    checkPlayer    = false;
                    playerDistance = 100;
                    stateSet       = false;
                    state          = state_939.patrol;
                }
            }
            else if (checkPlayer)
            {
                checkPlayer    = false;
                playerDistance = 100;
                stateSet       = false;
                state          = state_939.patrol;
            }
        }
    }
Example #2
0
 public override void setData(NPC_Data state)
 {
     Timer      = state.npcvalue[valTimer];
     this.state = (state_939)state.npcvalue[valState];
     Agent.Warp(state.Pos.toVector3());
     currentTarget = state.Target.toVector3();
     base.setData(state);
 }
Example #3
0
    void NpcUpdate()
    {
        if (!debugGameLoaded)
        {
            if (GameController.instance.doGameplay)
            {
                Player          = GameController.instance.player;
                debugGameLoaded = true;
                checkPlayer     = true;
            }
        }
        else
        {
            switch (state)
            {
            case state_939.idle:
            {
                if (!stateSet)
                {
                    playerCheck = foundPlayer;
                    Animator.SetBool("move", false);
                    Agent.isStopped           = true;
                    data.npcvalue[valDestSet] = 0;
                    stateSet = true;
                    Timer    = Random.Range(defIdle, defIdle + 3);
                    if (isDebuggin)
                    {
                        Debug.Log("Volviendo a Idle");
                    }
                }
                break;
            }

            case state_939.attack:
            {
                Animator.SetBool("move", true);
                Animator.SetTrigger("reset");

                transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(lookAt), 5 * Time.deltaTime);
                playerCheck        = foundPlayerRun;
                if (playerDistance < AttackDistance)
                {
                    Agent.isStopped = true;
                }
                else
                {
                    Agent.isStopped = false;
                    Agent.speed     = runSpeed;
                    if (CheckPlayer())
                    {
                        Agent.SetDestination(Player.transform.position);
                        WaitTimer = WaitTimerBase;
                    }
                    else
                    {
                        WaitTimer -= Time.deltaTime;
                        if (WaitTimer <= 0)
                        {
                            stateSet = false;
                            state    = state_939.idle;
                            GameController.instance.DefMusic();
                        }
                    }
                }
                break;
            }

            case state_939.patrol:
            {
                if (!stateSet)
                {
                    playerCheck = foundPlayer;
                    Animator.SetBool("move", true);
                    Agent.isStopped = false;
                    Agent.speed     = walkSpeed;
                    Agent.SetDestination(patrol[data.npcvalue[valCurrNode]].position);
                    Timer    = Random.Range(defWalk, defWalk + 3);
                    stateSet = true;
                    if (isDebuggin)
                    {
                        Debug.Log("Caminata");
                    }
                }
                else if (Agent.remainingDistance < 1)
                {
                    data.npcvalue[valCurrNode] += 1;
                    if (data.npcvalue[valCurrNode] >= patrol.Length)
                    {
                        data.npcvalue[valCurrNode] = 0;
                    }
                    stateSet = false;
                }
                break;
            }

            case state_939.run:
            {
                if (data.npcvalue[valDestSet] == 0)
                {
                    playerCheck = foundPlayerRun;
                    Animator.SetBool("move", true);
                    Agent.isStopped = false;
                    Agent.speed     = runSpeed;
                    Agent.SetDestination(currentTarget);
                    data.npcvalue[valDestSet] = 1;
                    if (isDebuggin)
                    {
                        Debug.Log(soundlevel + "Corro hacia el!");
                    }
                    PlayVoice(4);
                }
                else if (Agent.remainingDistance < 0.5)
                {
                    data.npcvalue[valDestSet] = 0;
                    foundTarget = false;
                    state       = state_939.idle;
                }
                break;
            }

            case state_939.walk:
            {
                if (data.npcvalue[valDestSet] == 0)
                {
                    playerCheck = foundPlayer;
                    PlayVoice(3);
                    Animator.SetBool("move", true);
                    Agent.isStopped = false;
                    Agent.speed     = walkSpeed;
                    Agent.SetDestination(currentTarget);
                    data.npcvalue[valDestSet] = 1;
                    if (isDebuggin)
                    {
                        Debug.Log(soundlevel + "Camino hacia el!");
                    }
                }
                else if (Agent.remainingDistance < 1)
                {
                    data.npcvalue[valDestSet] = 0;
                    foundTarget = false;
                    state       = state_939.idle;
                }
                break;
            }

            case state_939.hearing:
            {
                if (!stateSet)
                {
                    Agent.isStopped = true;
                    Animator.SetBool("move", false);
                    Animator.SetTrigger("look");
                    data.npcvalue[valDestSet] = 0;
                    Timer = HearingTimer;
                    if (isDebuggin)
                    {
                        Debug.Log(soundlevel + "Escuche algo?");
                    }
                    stateSet = true;
                    PlayVoice(1);
                }
                break;
            }

            case state_939.hearing2:
            {
                if (!stateSet)
                {
                    Agent.isStopped = true;
                    Animator.SetBool("move", false);
                    Animator.SetTrigger("vocal");
                    data.npcvalue[valDestSet] = 0;
                    Timer = Hearing2Timer;
                    if (isDebuggin)
                    {
                        Debug.Log(soundlevel + "Si escuche!");
                    }
                    stateSet = true;
                    PlayVoice(2);
                }
                break;
            }
            }

            Timer       -= Time.deltaTime;
            AttackTimer -= Time.deltaTime;

            if ((state != state_939.run && state != state_939.walk && state != state_939.attack) && patrol != null && Timer <= 0)
            {
                foundTarget = false;
                stateSet    = false;

                switch (state)
                {
                case state_939.idle:
                {
                    state = state_939.patrol;
                    break;
                }

                case state_939.patrol:
                {
                    state = state_939.idle;
                    break;
                }
                }
            }
            if (state == state_939.run || state == state_939.walk || state == state_939.patrol || state == state_939.attack)
            {
                Animator.SetFloat("speed", Agent.velocity.magnitude);

                if (debugSpeed)
                {
                    Debug.Log(Agent.velocity.magnitude);
                }
            }



            if (foundTarget == false && state != state_939.attack)
            {
                CheckSounds();
                if (foundTarget)
                {
                    stateSet = false;

                    if (data.npcvalue[valSoundLevel] == 0)
                    {
                        switch (state)
                        {
                        case state_939.hearing2:
                        {
                            state = state_939.walk;
                            break;
                        }

                        case state_939.run:
                        {
                            state = state_939.hearing2;
                            break;
                        }

                        case state_939.hearing:
                        {
                            state = state_939.hearing2;
                            break;
                        }

                        default:
                        {
                            Debug.Log("Cambiando a hearing!");
                            state = state_939.hearing;
                            break;
                        }
                        }
                    }
                    if (data.npcvalue[valSoundLevel] == 1)
                    {
                        switch (state)
                        {
                        case state_939.hearing2:
                        {
                            state = state_939.walk;
                            break;
                        }

                        case state_939.hearing:
                        {
                            state = state_939.walk;
                            break;
                        }

                        case state_939.run:
                        {
                            state = state_939.walk;
                            break;
                        }

                        default:
                        {
                            state = state_939.hearing2;
                            break;
                        }
                        }
                    }
                    if (data.npcvalue[valSoundLevel] > 1)
                    {
                        switch (state)
                        {
                        case state_939.hearing2:
                        {
                            state = state_939.run;
                            break;
                        }

                        case state_939.run:
                        {
                            state = state_939.run;
                            break;
                        }

                        default:
                        {
                            state = state_939.walk;
                            break;
                        }
                        }
                    }
                }
                else
                {
                    if (state != state_939.idle && state != state_939.patrol)
                    {
                        state = state_939.idle;
                    }
                }
            }

            if (checkPlayer)
            {
                playerDistance = Vector3.Distance(Player.transform.position, transform.position);
            }
            lookAt = new Vector3(Player.transform.position.x, transform.position.y, Player.transform.position.z) - transform.position;
            if (debugPlayerPos)
            {
                Debug.Log("Producto dot " + Vector3.Dot(transform.forward, lookAt.normalized));
            }

            if (playerDistance < playerCheck)
            {
                if (state != state_939.attack && Vector3.Dot(transform.forward, lookAt.normalized) > 0.5f && CheckPlayer())
                {
                    WaitTimer   = WaitTimerBase;
                    foundTarget = false;
                    stateSet    = false;
                    PlayVoice(4);
                    MusicPlayer.instance.Music.PlayOneShot(AttackTheme);

                    if (state == state_939.run)
                    {
                        Animator.SetTrigger("leap");
                    }
                    state = state_939.attack;
                }
            }
            else if (state == state_939.attack)
            {
                state = state_939.idle;
            }
        }
    }