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); } } }