예제 #1
0
    public IEnemyState DoState(NormalZombie enemy, Player player, ref float timeDelay)
    {
        if (enemy.agent == null)
        {
            Debug.Log("NULL");
            return(null);
        }
        enemy.agent.isStopped = false;
        timeDelay             = 1f;
        float dis = Vector3.Distance(enemy.transform.position, player.transform.position);

        if (dis < enemy.DistanceToChase)
        {
            enemy.agent.SetDestination(player.transform.position);
            return(enemy.chase);
        }


        //Nếu ở là type run  thì không phải wander làm gì
        if (enemy.ZombieType != NormalZombie.TypeOfZombie.Walker)
        {
            enemy.anim.SetBool("Chasing", false);
            return(enemy.wander);
        }

        if (enemy.changeDirec)
        {
            Vector3 newPos = new Vector3(enemy.transform.position.x + Random.Range(-1, 1), enemy.transform.position.y, enemy.transform.position.z + Random.Range(-5, 5));
            enemy.agent.SetDestination(newPos);
            enemy.changeDirec = false;
        }
        enemy.anim.SetBool("Chasing", true);
        return(enemy.wander);
    }
        public NormalZombie createZombie(Vector2 pos)
        {
            NormalZombie zom = new NormalZombie();

            MoveComponent moveCom = zom.GetComponent(typeof(MoveComponent)) as MoveComponent;
            moveCom.Position = pos;

            return zom;
        }
예제 #3
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.CompareTag("FreezeSpell"))
     {
         isFreeze = true;
         GetComponent <Animator>().enabled = false; //STOP BEHAVIOR
         NormalZombie nm = GetComponent <NormalZombie>();
         StopCoroutine(nm.Couroutine_PathFiding);
         nm.agent = null;
         GetComponent <NavMeshAgent>().enabled = false;  //stop path finding
         StartCoroutine(CurrentDestroy_SpawnContinue());
     }
 }
    private void Shot()
    {
        Vector2      mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        Vector2      direction     = CalculateDirection(mousePosition - (Vector2)spawn.position, Stats.BulletSpread);
        RaycastHit2D raycastInfo   = Physics2D.Raycast(spawn.position, direction, 100f, ~DontHit);

        //Debug.DrawLine(spawn.position, direction * 100, Color.yellow);

        if (raycastInfo.transform != null && raycastInfo.transform.CompareTag("Zombie"))
        {
            NormalZombie hitZombie = raycastInfo.collider.GetComponentInParent <NormalZombie>();
            hitZombie.DamageZombie(Stats.Damage);
            Debug.Log("Zombie hit:" + hitZombie.name + ", HP: " + hitZombie.CurrentHealth);
        }

        Stats.BulletsLeft--;

        speakerShot.clip = Shooting;
        speakerShot.Play();
    }
예제 #5
0
    public IEnemyState DoState(NormalZombie enemy, Player player, ref float timeDelay)
    {
        if (enemy.agent == null)
        {
            return(null);
        }
        enemy.agent.isStopped = true;
        timeDelay             = 0.2f;
        float dis = Vector3.Distance(enemy.transform.position, player.transform.position);

        if (dis < enemy.DistanceToChase)
        {
            return(enemy.chase);
        }
        else
        {
            enemy.anim.SetBool("Chasing", false);
            return(enemy.wander);
        }
    }
예제 #6
0
    public IEnemyState DoState(NormalZombie enemy, Player player, ref float timeDelay)
    {
        if (enemy.agent == null)
        {
            return(null);
        }
        enemy.agent.isStopped = true;
        float             dis      = Vector3.Distance(enemy.transform.position, player.transform.position);
        AnimatorStateInfo currInfo = enemy.anim.GetCurrentAnimatorStateInfo(0);

        timeDelay = currInfo.length;


        enemy.anim.SetBool("Attack", true); // this animation include key event attack
        if (dis < enemy.DistanceToChase)
        {
            return(enemy.chase);   //Tai enum attack , tức là lúc attack phải set des tại chỗ để tấn công , sau đó set chase vì nhân vật chắc chắc k di chuyen quá xa
        }
        else
        {
            return(enemy.idle);
        }
    }