Beispiel #1
0
        public new virtual void FixedUpdate()
        {
            if (!active || energyContainer.getCurEnergy() < 1)
            {
                return;
            }

            energyContainer.addEnergy(-idleEnergyUsage * Time.deltaTime, energyContainer);

            if (enemy == null)
            {
                enemy = findEnemy(useRandom());
                if (enemy != null)
                {
                    enemyCollider = enemy.GetComponent <Collider>();
                }
            }

            if (enemy == null)
            {
                return;
            }

            var impactPos = getImpactPos();

            timeElapsed += Time.deltaTime;
            if (timeElapsed >= 1 / attacksPerSecond)
            {
                timeElapsed -= 1 / attacksPerSecond;
                shoot(enemy, impactPos);
                energyContainer.addEnergy(-energyPerShot * Time.deltaTime, energyContainer);
            }
        }
    public override void FixedUpdate()
    {
        base.FixedUpdate();

        isShooting = false;

        if (!active || energyContainer.getCurEnergy() < 1)
        {
            return;
        }
        energyContainer.addEnergy(-idleEnergyUsage * Time.deltaTime, energyContainer);

        if (enemy == null)
        {
            enemy = findClosestEnemy(range);
            if (enemy != null)
            {
                enemyCollider = enemy.transform.GetComponent <Collider>();
                projectile    = enemy.GetComponent <Projectile>();
            }
        }

        if (enemy == null)
        {
            lineRenderer.SetPosition(1, new Vector3(30f, 0, 0));
            return;
        }

        updateTimer++;
        if (updateTimer % 10 == 0 && !isValidTarget(enemy))
        {
            enemy = null;
            return;
        }

        isShooting = true;

        //attack target
        Vector3 target;
        Vector3 dir;

        if (projectile != null)
        {
            var estimatedTime = Vector3.Distance(enemy.transform.position, lineRenderer.gameObject.transform.position) / bulletVelocity;
            estimatedTime -= Time.deltaTime * 2;
            target         = projectile.futurePosition(estimatedTime);

            //rotate
            var ownPos = lineRenderer.gameObject.transform.position;
            dir = target - ownPos;
            rotateTowards(target);
        }
        else
        {
            target = enemyCollider.ClosestPoint(lineRenderer.gameObject.transform.position);
            dir    = rotateTowards(target);
        }

        drawTargetingLine(target);

        if (isRotated)
        {
            timePassed += Time.deltaTime;
            if (timePassed > 1 / attacksPerSecond)
            {
                timePassed -= 1 / attacksPerSecond;
                lineRenderer.gameObject.SetActive(true);

                energyContainer.addEnergy(-energyPerShot * Time.deltaTime, energyContainer);
                shoot(dir);
            }
        }
    }