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 new void handleConnections() { if (network == null) { return; } float minEnergy = float.MaxValue; EnergyContainer target = null; foreach (EnergyContainer connection in base.network) { if (connection.getMaxInput() < 1) { continue; } if (connection.getCurEnergy() < minEnergy) { target = connection; minEnergy = connection.getCurEnergy(); } } if (target == null) { return; } float transferAmount = (target.getMaxInput() > this.getMaxOutput()) ? target.getMaxInput() : this.getMaxOutput(); if (target.getMaxInput() < this.getMaxOutput()) { transferAmount = target.getMaxInput(); } if (transferAmount > this.getCurEnergy()) { transferAmount = this.getCurEnergy(); } target.addEnergy(transferAmount, this); this.addEnergy(-transferAmount, this); }
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); } } }