Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        // Enemy will always face the player and approach them.
        // If enemy is within shooting range, enemy will attack player.
        LookAtPlayer();
        bool isEnemyInRange = Vector3.Distance(transform.position, player.position) <= shootDitance;

        if (isEnemyInRange && canMove && enemyHealth.health > 0)
        {
            anim.SetBool("isMoving", false);
            enemyShooting.Shoot();
        }
        else if (canMove == true && enemyHealth.health > 0)
        {
            MoveTowardsPlayer();
        }

        // If enemy is stun, decrease the timer to reset enemy movement
        if (stunTimer <= 0)
        {
            canMove = true;
        }

        stunTimer -= Time.deltaTime;
    }
Exemple #2
0
 public void AnimShootLaser()
 {
     if (battery <= 0)
     {
         return;
     }
     enemyShooting.Shoot();
     battery--;
     _clipSizeMax--;
 }
Exemple #3
0
    // Update is called once per frame
    void Update()
    {
        _distance = (transform.position - _move.target.position).magnitude;
        Debug.DrawRay(_enShooting.BulletSpawn.transform.position, _enShooting.BulletSpawn.transform.right * RangeDistance);
        if (_enShooting.canShoot == true && CanSee())
        {
            if (gameObject.tag == "EnemyType1")
            {
                if (hit.collider.tag == "Player")
                {
                    _enShooting.Shoot();

                    if (_move.moveSpeed > SlowDownSpeed)
                    {
                        _move.moveSpeed = SlowDownSpeed;
                    }
                    if (hit.distance <= DistanceLimit)
                    {
                        _move.moveSpeed = 0;
                    }
                }
            }
            else if (gameObject.tag == "EnemyType2")
            {
                if (hit.collider.tag == "Building")
                {
                    Debug.Log(hit.collider.tag);
                    _enShooting.Shoot();
                    if (_move.moveSpeed > SlowDownSpeed)
                    {
                        _move.moveSpeed = SlowDownSpeed;
                    }
                    if (hit.distance <= DistanceLimit)
                    {
                        _move.moveSpeed = 0;
                    }
                }
            }
        }
    }
    // Attack behaviour
    private void Attack()
    {
        if (Vector2.Distance(transform.position, target.position) <= shootDistance || Vector2.Distance(transform.position, targetProjection) <= 2f || groundInfoLeft.collider == false || groundInfoRight.collider == false)
        {
            transform.position = Vector2.MoveTowards(transform.position, targetProjection, -movementSpeed * Time.deltaTime);
            monsterScorpionTurret.Shoot();

            timeBtwShots = weaponCoolDown;
        }
        else if (Vector2.Distance(transform.position, target.position) >= shootDistance && groundInfoLeft.collider == true && groundInfoRight.collider == true)
        {
            transform.position = Vector2.MoveTowards(transform.position, targetProjection, movementSpeed * Time.deltaTime);
        }
    }
Exemple #5
0
    // Update is called once per frame
    void Update()
    {
        //Debug.LogError(Vector3.Distance(player.transform.position, transform.position));
        if (Vector3.Distance(player.transform.position, transform.position) <= Detection)
        {
            AI.canSearch = true;
            GetComponent <AIDestinationSetter>().target = player.transform;
            enemyShooting.Shoot();

            /*Vector2 LookDirection = (Vector2)player.transform.position - rb.position;
             * float angle = Mathf.Atan2(LookDirection.y, LookDirection.x) * Mathf.Rad2Deg - 90f;
             * rb.rotation = angle;*/
        }
        else
        {
            AI.canSearch = false;
        }
    }
Exemple #6
0
    void Update()
    {
        bool hasLOSToPlayer = AIUtilities.HasLineOfSight(transform.position, player.transform.position, player);

        if (hasLOSToPlayer)
        {
            lastKnownPlayerLocation            = player.transform.position;
            lastKnownVisual.transform.position = lastKnownPlayerLocation;
        }

        var aimPos = lastKnownPlayerLocation;

        aimPos.y = 0;
        aiming.LookAt(aimPos);

        if (!hasLOSToPlayer)
        {
            confidence += confidenceRegen * Time.deltaTime;
        }

        // DEBUG INPUTS
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            AffectConfidence(100f);
            movement.StopMoving();
        }
        if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            AffectConfidence(-100f);
            movement.StopMoving();
        }

        Vector3 moveToPoint = Vector3.down;

        // Getting in cover
        if (confidence < 50f)
        {
            if (hasLOSToPlayer /*&& lastPlayerPos != player.transform.position*/)
            {
                moveToPoint = AIUtilities.GetClosestLOSPoint(this, transform.position, player.transform.position, false, player);
            }

            // Attacking player
        }
        else
        {
            if (hasLOSToPlayer)
            {
                shooting.Shoot(transform.forward);
            }
            else
            {
                if (AIUtilities.HasLineOfSight(transform.position, lastKnownPlayerLocation))
                {
                    print("has los");
                    moveToPoint = lastKnownPlayerLocation;
                }
                else
                {
                    print("no los");
                    moveToPoint = AIUtilities.GetClosestLOSPoint(this, transform.position, lastKnownPlayerLocation, true);
                }
            }
        }

        if (moveToPoint != Vector3.down && moveToPoint != lastMoveToPoint)
        {
            print("<color=red>Moving</color>");
            movement.MoveToPoint(moveToPoint);
            moveToVisual.transform.position = moveToPoint;
            lastMoveToPoint = moveToPoint;
            movingToNode    = Grid.GetNodeWorldPoint(moveToPoint);
        }
    }