public override void ApplyToEnemy(Enemy target) { target.effectDamageMultiplier += intensity; }
public abstract void ApplyToEnemy(Enemy target);
public override void ApplyToEnemy(Enemy target) { target.ApplyDebuffDamage(GetType(), (int)intensity); }
public override void ApplyToEnemy(Enemy other) { other.currentSpeed = other.currentSpeed - (other.currentSpeed * intensity); }
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(); } }
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); } } }
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); }