Beispiel #1
0
        private void AttackNearbyEnemyUnits(Players player, Players otherPlayer)
        {
            foreach (var attackingUnit in UnitsByPlayer[player].OfType <IAttackingUnit>())
            {
                if (attackingUnit.HasTarget())
                {
                    continue;
                }

                var target = SpatialUnitsByPlayer.NearestUnit(otherPlayer,
                                                              attackingUnit.Position,
                                                              attackingUnit.GetRange(),
                                                              unit => Math.Abs(AttackModifiers.GetModifier(attackingUnit.UnitType, unit.UnitType)) >= float.Epsilon);
                if (target != null && target is IDamageableUnit attackedUnit)
                {
                    attackingUnit.SetTarget(attackedUnit, false);
                }
            }
        }