Exemplo n.º 1
0
        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));
                }
            }
        }
Exemplo n.º 2
0
        private void RefreshNearbyTowers()
        {
            UnsubscribeTowerEvents();

            var radius = Attributes[AttributeName.AuraRange].Value;

            _towers = TargetingHelper.GetTowersInRadius(transform.position, radius);

            _towers.ForEach(tower => { tower.OnLevelUp += HandleTowerLevelUp; });
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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;
        }