Example #1
0
    private FactoryDetail FindClosestFactory(FactoryDetail targetFactory)
    {
        var distancesFromTargetFactory = FactoryDistance[targetFactory.EntityId];

        var myFactories = FactoryDetailList.Where(x => x.Owner == 1);

        if (!myFactories.Any())
        {
            return(null);
        }

        var           minDistance    = 30;
        FactoryDetail closestFactory = null;

        //todo - improvement: I might be able to get rid of the loop if I add the destination array to each object for each factory
        // gets the closest factory
        foreach (var myFactory in myFactories)
        {
            if (distancesFromTargetFactory[myFactory.EntityId] < minDistance && targetFactory.EntityId != myFactory.EntityId)
            {
                minDistance    = distancesFromTargetFactory[myFactory.EntityId];
                closestFactory = myFactory;
            }
        }

        return(closestFactory);
    }
Example #2
0
    private void BuildTroopList(FactoryDetail targetFactory)
    {
        var troopToSend = BuildTroop(targetFactory);

        if (troopToSend != null)
        {
            TroopListToSend.Add(troopToSend);
        }
    }
Example #3
0
    private Troop BuildTroop(FactoryDetail sourceFactory, FactoryDetail targetFactory)
    {
        var troopToSend = new Troop
        {
            SourceFactory  = sourceFactory.EntityId,
            TargetFactory  = targetFactory.EntityId,
            NumberOfCyborg = targetFactory.NumberOfCyborgPresent + 2
        };

        targetFactory.NumberOfCyborgPresent -= troopToSend.NumberOfCyborg;

        //UpdateCyborgNumberInFactory(troopToSend);

        return(troopToSend);
    }
Example #4
0
    public Troop BuildTroop(FactoryDetail targetFactory)
    {
        var closestFactoryWithBiggerArmy = FindClosestFactoryWithBiggerArmy(targetFactory);

        if (closestFactoryWithBiggerArmy != null)
        {
            var troopToSend = new Troop
            {
                SourceFactory  = closestFactoryWithBiggerArmy.EntityId,
                TargetFactory  = targetFactory.EntityId,
                NumberOfCyborg = targetFactory.NumberOfCyborgPresent + 2
            };

            UpdateCyborgNumberInFactory(troopToSend);

            return(troopToSend);
        }

        return(null);
    }
Example #5
0
    public FactoryDetail FindClosestFactoryWithBiggerArmy(FactoryDetail targetFactory)
    {
        DebugMessage("Target: " + targetFactory.EntityId);

        var distancesFromTargetFactory = FactoryDistance[targetFactory.EntityId];

        var myFactories = FactoryDetailList.Where(x => x.Owner == 1).ToList();

        if (!myFactories.Any())
        {
            return(null);
        }

        var           minDistance   = 30;
        FactoryDetail factoryDetail = null;

        //todo - improvement: I might be able to get rid of the loop if I add the destination array to each object for each factory
        // gets the closest factory
        foreach (var myFactory in myFactories)
        {
            if (distancesFromTargetFactory[myFactory.EntityId] < minDistance &&
                targetFactory.NumberOfCyborgPresent < myFactory.NumberOfCyborgPresent)
            {
                if (IsFactoryUnderAttack(myFactory.EntityId))
                {
                    DebugMessage($"Factory under attack, don't send troop. factory id: {myFactory.EntityId}");
                }
                else
                {
                    minDistance   = distancesFromTargetFactory[myFactory.EntityId];
                    factoryDetail = myFactory;
                    DebugMessage(
                        $"Source Factory found: {factoryDetail.EntityId}  army: {factoryDetail.NumberOfCyborgPresent} prod rate: {factoryDetail.ProductionRate} distance: {minDistance}");
                }
            }
        }

        return(factoryDetail);
    }
Example #6
0
    private void BuildTroopToSendAround(FactoryDetail sourceFactory)
    {
        var neutralFactories = FactoryDetailList.Where(x => x.Owner == Owner.Neutral);

        foreach (var nFactory in neutralFactories)
        {
            nFactory.AttackValue = (decimal)nFactory.ProductionRate / MaximumProduction +
                                   (1 -
                                    (decimal)sourceFactory.DistanceToOtherFactories[nFactory.EntityId] /
                                    MaximumDistance);
        }

        var neutralfactoriesOrderedByAttackValue = neutralFactories.OrderByDescending(x => x.AttackValue);

        foreach (var nFactory in neutralfactoriesOrderedByAttackValue)
        {
            if (nFactory.NumberOfCyborgPresent < sourceFactory.NumberOfCyborgPresent + 2)
            {
                DebugMessage(
                    $"Sending troop to {nFactory.EntityId} prodrate: {nFactory.ProductionRate} distance: {FactoryDistance[sourceFactory.EntityId][nFactory.EntityId]} attack value: {nFactory.AttackValue}");
                AddTroopToSendList(sourceFactory, nFactory);
            }
        }
    }
Example #7
0
 private void AddTroopToSendList(FactoryDetail sourceFactory, FactoryDetail targetFactory)
 {
     TroopListToSend.Add(BuildTroop(sourceFactory, targetFactory));
 }