Exemple #1
0
        private void UpdateDisengageState()
        {
            anim.SetInteger(SkunkMovement, 3);
            float animDuration = anim.GetCurrentAnimatorStateInfo(0).length;

            if (Time.time - disengageTimer >= animDuration)
            {
                currState = SkunkState.Patrolling;
            }

            if (!attackHive && distToPlayer >= minDistToAttack &&
                distToPlayer <= maxDistToAttack)
            {
                // Disengaging from player, but player has returned to attacking radius
                currState = SkunkState.Attacking;
            }
            if (attackHive &&
                distToHive <= maxDistToAttackHive &&
                (Time.time - hiveAttackTimer) >= hiveAttackCooldown)
            {
                // Disengaging from hive, but hive has returned to attacking radius and cooldown isn't in effect
                currState = SkunkState.Attacking;
            }

            guiObject.SetActive(false);
        }
Exemple #2
0
        ///////////////////////////////////////////////
        //// Attacking State //////////////////////////


        private void UpdateAttackState()
        {
            if (!attackHive)
            {
                FaceTargetReverse(player.transform.position);
            }
            else
            {
                FaceTargetReverse(hive.transform.position);
            }
            if (!attackHive && distToPlayer < minDistToAttack ||
                !attackHive && distToPlayer > maxDistToAttack)
            {
                // Player was being attacked but is out of the radius
                currState      = SkunkState.Disengaging;
                disengageTimer = Time.time;
            }

            if (attackHive && distToHive > maxDistToAttackHive)
            {
                // Hive was being attacked but is out of radius
                currState      = SkunkState.Disengaging;
                disengageTimer = Time.time;
            }

            agent.speed = 0;
            guiObject.SetActive(true);

            anim.SetInteger(SkunkMovement, 2); // attack
            EnemyAttack();
        }
Exemple #3
0
    void FindTarget()
    {
        gasTimer   += gasMultiplier * Time.deltaTime;
        spray_range = Physics.OverlapSphere(transform.position, 5, LayerMask.GetMask("Player"));

        if (fow.visibleTargets.Contains(sesame.transform))
        {
            //float random_x = Random.Range(8.5f, 48.5f);
            //float random_z = Random.Range(1.5f, 45.5f);
            //fack_target = new Vector3(random_x, 0.5f, random_z);
            target = sesame;

            gasMultiplier = 1;
            fow.viewAngle = 360;
            if (gasTimer > 10)
            {
                ParticleSystem gas_prefab;
                gas_prefab = Instantiate(gas, transform.position, Quaternion.identity);
                Destroy(gas_prefab, 10);
                gasTimer = 0;
            }
            //fart.Play();
            skunkState = SkunkState.gas;
        }
        else
        {
            target     = null;
            skunkState = SkunkState.wander;
        }
    }
Exemple #4
0
 void CheckScales()
 {
     if (target)
     {
         if (target.GetComponent <Character>().scales.magnitude < scales.magnitude)
         {
             skunkState = SkunkState.attack;
         }
         else if (target.GetComponent <Character>().scales.magnitude > scales.magnitude || allyInTrouble)
         {
             skunkState = SkunkState.flee;
         }
     }
 }
Exemple #5
0
        private void EnemyAttack()
        {
            if (Time.time - lastTimeShot > shootRate)
            {
                GameObject proj = Instantiate(projectilePrefab,
                                              projectileSpawn.transform.position, projectileSpawn.transform.rotation);
                if (attackHive)
                {
                    proj.GetComponent <SkunkProjectileBehaviour>().SetTarget(hive.transform);
                    // cooldown hive attacks
                    disengageTimer = Time.time;
                    currState      = SkunkState.Disengaging;
                }
                else
                {
                    proj.GetComponent <SkunkProjectileBehaviour>().SetTarget(player.transform);
                }
                proj.transform.parent = projectilesParent.transform;

                lastTimeShot = Time.time;
            }
        }
Exemple #6
0
        ///////////////////////////////////////////////
        //// Basic Movement States ////////////////////

        public override void UpdatePatrolState()
        {
            agent.speed            = enemySpeed;
            agent.stoppingDistance = patrolStoppingDist;

            float dist = Utils.Distance2D(transform.position, nextPoint);

            if (Utils.Distance2D(transform.position, nextPoint) <= patrolStoppingDist)
            {
                FindNextPoint();
                agent.velocity = Vector3.zero;
                agent.SetDestination(nextPoint);
            }
            if (distToPlayer >= minDistToAttack && distToPlayer <= maxDistToAttack &&
                sight.InFOV(player.transform, "Player"))
            {
                // Player is in attacking radius
                lastTimeShot = Time.time - shootRate - 0.1f;
                attackHive   = false;
                currState    = SkunkState.Attacking;
            }
            else if (hiveFound &&
                     distToHive <= maxDistToAttackHive &&
                     sight.InFOV(hive.transform, "Hive") &&
                     (Time.time - hiveAttackTimer) >= hiveAttackCooldown)
            {
                // Hive is in attacking radius and hiveAttack has cooled down
                lastTimeShot    = Time.time - shootRate - 0.1f;
                hiveAttackTimer = Time.time;
                attackHive      = true;
                currState       = SkunkState.Attacking;
            }

            guiObject.SetActive(false);

            FaceTarget(nextPoint);
            anim.SetInteger(SkunkMovement, 4); // walking
        }
Exemple #7
0
 //Defeated
 public override void EnemyDefeated()
 {
     Destroy(gameObject, 1.5f);
     currState = SkunkState.Dead;
     UpdateDeadState();
 }