Ejemplo n.º 1
0
            private static Tuple <float, float> CalculateWarScore(CampaignWar campaignWar, MBReadOnlyList <IFaction> kingdomSide, MBReadOnlyList <IFaction> oppositionSide)
            {
                var kingdomWarScore    = CalculateWarScoreForSideAgainst(campaignWar, kingdomSide, oppositionSide);
                var oppositionWarScore = CalculateWarScoreForSideAgainst(campaignWar, oppositionSide, kingdomSide);

                return(Tuple.Create(kingdomWarScore, oppositionWarScore));
            }
Ejemplo n.º 2
0
 private static void FindSides(CampaignWar campaignWar, Kingdom kingdom, out MBReadOnlyList <IFaction> kingdomSide, out MBReadOnlyList <IFaction> oppositionSide)
 {
     if (campaignWar.Side1.Contains(kingdom))
     {
         kingdomSide    = campaignWar.Side1;
         oppositionSide = campaignWar.Side2;
     }
     else
     {
         kingdomSide    = campaignWar.Side2;
         oppositionSide = campaignWar.Side1;
     }
 }
Ejemplo n.º 3
0
            private static float CalculateWarScoreForSideAgainst(CampaignWar campaignWar, MBReadOnlyList <IFaction> kingdomSide, MBReadOnlyList <IFaction> oppositionSide)
            {
                var warScore = 0.0f;

                var factionCasualties = 0;

                foreach (var faction in kingdomSide)
                {
                    // Each point of renown is 1 point.
                    var factionRenown = campaignWar.GetWarScoreOfFaction(faction);
                    warScore += factionRenown * 1f;

                    // Each raid counts as 50 points.
                    var factionRaids = campaignWar.GetSuccessfulRaidsOfFaction(faction);
                    warScore += factionRaids * 50f;

                    // Each siege counts as 300 points.
                    var factionSieges = campaignWar.GetSuccessfulSiegesOfFaction(faction);
                    warScore += factionSieges * 300f;

                    // Track, but do not add, the number of allies killed.
                    factionCasualties += campaignWar.GetCasualtiesOfFaction(faction);
                }

                // Each enemy casualty is 1 point.
                var oppositionCasualties = 0;

                foreach (var faction in oppositionSide)
                {
                    oppositionCasualties += campaignWar.GetCasualtiesOfFaction(faction);
                }
                warScore += oppositionCasualties * 1f;

                // Scale the score by the a multiplier reflecting how many
                // of the total losses are on the opponent's side.
                var totalCasualties = factionCasualties + oppositionCasualties;
                var casualtyMult    = (totalCasualties > 0) ? (oppositionCasualties / (float)totalCasualties) : 1;

                warScore *= casualtyMult;

                return(warScore);
            }