public void UpdateAuraTargets() { ClearAuraTargets(); if (!HasAttribute(AttributeName.AuraRange)) { return; } var pos = transform.position; var range = GetAttributeValue(AttributeName.AuraRange); foreach (var auraEffect in AuraEffects) { if (auraEffect.AffectsNpcs) { var npcsInRange = TargetingHelper.GetNpcsInRadius(pos, range); npcsInRange.ForEach(npc => ApplyAuraEffect(npc, auraEffect)); } if (auraEffect.AffectsTowers) { var towersInRange = TargetingHelper.GetTowersInRadius(pos, range); towersInRange.ForEach(npc => ApplyAuraEffect(npc, auraEffect)); } } }
private void RefreshNearbyTowers() { UnsubscribeTowerEvents(); var radius = Attributes[AttributeName.AuraRange].Value; _towers = TargetingHelper.GetTowersInRadius(transform.position, radius); _towers.ForEach(tower => { tower.OnLevelUp += HandleTowerLevelUp; }); }
public void EnforceNearbyTower(int goldAmount) { var range = GetAttributeValue(AttributeName.AuraRange); var towers = TargetingHelper.GetTowersInRadius(transform.position, range); towers.Add(this); var tower = towers[_rng.Next(towers.Count)]; if (tower.HasAttribute(AttributeName.AttackDamage)) { var effect = new AttributeEffect(0.5f, AttributeName.AttackDamage, AttributeEffectType.Flat, this); tower.Attributes[AttributeName.AttackDamage].AddAttributeEffect(effect); } }
private void CheckExplode(Npc npc, NpcHitData hitData) { if (_stunTriggered) { return; } if (npc.CurrentHealth > npc.Attributes[AttributeName.MaxHealth].Value / 2.0f) { return; } var towers = TargetingHelper.GetTowersInRadius(transform.position, _stunRadius); towers.ForEach(tower => { tower.Stun(_stunDuration, this); }); _stunTriggered = true; }