示例#1
0
 public override void ApplyToEnemy(Enemy target) {
   target.effectDamageMultiplier += intensity;
 }
示例#2
0
 public abstract void ApplyToEnemy(Enemy target);
示例#3
0
 public override void ApplyToEnemy(Enemy target) {
   target.ApplyDebuffDamage(GetType(), (int)intensity);
 }
示例#4
0
 public override void ApplyToEnemy(Enemy other) {
   other.currentSpeed = other.currentSpeed - (other.currentSpeed * intensity);
 }
示例#5
0
    void LaunchProjectile(Enemy enemy) {
      // Oh look I accidentally invented polar coordinates.
      if (towerStats.projectileType == Projectile.Type.PIERCE) {
        float dist = towerStats.range;
        float originAngle = Mathf.Atan2(enemy.transform.position.y - transform.position.y, enemy.transform.position.x - transform.position.x);
        Vector3 target;
        var x = dist * Mathf.Cos(originAngle) + transform.position.x;
        var y = dist * Mathf.Sin(originAngle) + transform.position.y;
        target = new Vector3(x, y, 0f);
        FireProjectile(new Vector3(x, y, 0f));
      } else if (towerStats.projectileType == Projectile.Type.MULTI) {
        int shots = Mathf.RoundToInt(towerStats.projectileSizeModifier);
        float cone = towerStats.projectileDeviationModifier;
        float dist = towerStats.range;
        float originAngle = Mathf.Atan2(enemy.transform.position.y - transform.position.y, enemy.transform.position.x - transform.position.x);
        List<Vector3> targets = new List<Vector3>();
        if (shots % 2 == 1) {
          targets.Add(PolarToWorldSpace(dist, originAngle, transform.position));
          shots -= 1;
        }

        for (int i = 1; i <= (shots / 2); i++) {
          float anglePerPair = (cone / shots) * Mathf.Deg2Rad;
          float[] multipliers = { 1, -1 };
          foreach (var mult in multipliers) {
            float currentAngle = originAngle + (anglePerPair * i * mult);
            targets.Add(PolarToWorldSpace(dist, currentAngle, transform.position));
          }
        }
        targets.ForEach(target => FireProjectile(target));

      } else if (towerStats.projectileType == Projectile.Type.PULSE) {
        FireProjectile(transform.position);
      } else {
        FireProjectile();
      }
    }
示例#6
0
    public void DamageEnemiesInRadius(float radius, Enemy target = null) {
      var others = Physics2D.OverlapCircleAll(transform.position, projectileEffectSizeModifier);
      foreach (var potentialEnemy in others) {
        if (potentialEnemy.gameObject.CompareTag("Enemy")) {
          var distance = Vector2.Distance(potentialEnemy.transform.position, this.transform.position);
          var blastRadiusRatio = (projectileEffectSizeModifier - distance) / projectileEffectSizeModifier;
          blastRadiusRatio = 1f - (1f - projectileEffectDeviationModifier) * (1f - blastRadiusRatio);
          var enemy = potentialEnemy.GetComponent<Enemy>();
          // Forget all this math if this dude is the primary target.
          if (enemy == target) {
            blastRadiusRatio = 1f;
          }
          MaybeDamageEnemy(enemy, blastRadiusRatio);
        }
      }

    }
示例#7
0
 private void MaybeDamageEnemy(Enemy enemy, float projectileScaler = 1f) {
   if (!enemiesDamaged.Contains(enemy)) {
     enemy.ApplyProjectileEffects(this, projectileScaler);
     enemiesDamaged.Add(enemy);
   }
 }
 public void AddEnemyToList(Enemy script) {
   enemies.Add(script);
 }