コード例 #1
0
 /// <summary>
 /// Sort the agreements in ascending order by QuantityAmountFrom then RecordId then FromDate.
 /// </summary>
 /// <param name="left">Left side of the comparison.</param>
 /// <param name="right">Right side of the comparison.</param>
 /// <returns>Returns -1 if left is less, 0 if equal, 1 if left is more.</returns>
 private static int AgreementSortMethod(TradeAgreement left, TradeAgreement right)
 {
     if (left.QuantityAmountFrom < right.QuantityAmountFrom)
     {
         return(-1);
     }
     else if (left.QuantityAmountFrom > right.QuantityAmountFrom)
     {
         return(1);
     }
     else
     {
         if (left.RecordId < right.RecordId)
         {
             return(-1);
         }
         else if (left.RecordId > right.RecordId)
         {
             return(1);
         }
         else
         {
             if (left.FromDate < right.FromDate)
             {
                 return(-1);
             }
             else if (left.FromDate > right.FromDate)
             {
                 return(1);
             }
             else
             {
                 return(0);
             }
         }
     }
 }
コード例 #2
0
            private static Dictionary <string, IList <TradeAgreement> > IndexAgreementsByItemId(ReadOnlyCollection <TradeAgreement> tradeAgreements)
            {
                var agreementsByItemId = new Dictionary <string, IList <TradeAgreement> >(StringComparer.OrdinalIgnoreCase);

                foreach (var ta in tradeAgreements)
                {
                    var itemId = ta.ItemRelation;

                    if (!agreementsByItemId.ContainsKey(itemId))
                    {
                        agreementsByItemId.Add(itemId, new List <TradeAgreement>());
                    }

                    IList <TradeAgreement> agreements;
                    if (!agreementsByItemId.TryGetValue(itemId, out agreements))
                    {
                        agreements = new TradeAgreement[0];
                    }

                    agreements.Add(ta);
                }

                return(agreementsByItemId);
            }
コード例 #3
0
    private void CreateSupplyTrade(PlanetData pData)
    {
        TradeAgreement newTrade = new TradeAgreement();

        newTrade.ExportPlanetID = pData.ID;
        newTrade.Status         = TradeAgreement.eAgreementStatus.Supply_Trade;
        newTrade.ImportPlanetID = pData.SupplyToPlanetID;

        if (pData.FoodExportAvailable > 0)
        {
            newTrade.FoodSent = pData.FoodExportAvailable / Constants.Constants.SupplyPlanetLow;
        }

        if (pData.EnergyExportAvailable > 0)
        {
            newTrade.EnergySent = pData.EnergyExportAvailable / Constants.Constants.SupplyPlanetLow;
        }

        if (pData.AlphaExportAvailable > 0)
        {
            newTrade.AlphaSent = pData.AlphaExportAvailable / Constants.Constants.SupplyPlanetLow;
        }

        if (pData.HeavyExportAvailable > 0)
        {
            newTrade.HeavySent = pData.HeavyExportAvailable / Constants.Constants.SupplyPlanetLow;
        }

        if (pData.RareExportAvailable > 0)
        {
            newTrade.RareSent = pData.RareExportAvailable / Constants.Constants.SupplyPlanetLow;
        }

        Debug.Log("Supply trade created from " + newTrade.ExportPlanet.Name + " to " + newTrade.ImportPlanet.Name + " for " + newTrade.TotalSent.ToString("N2") + " units, costing " + newTrade.Cost.ToString("N2") + ".");
        gDataRef.ActiveTradeAgreements.Add(newTrade);
    }
コード例 #4
0
    private void LookForTradePartner(Civilization civ, string resource, string planetID)
    {
        PlanetData needyPlanet          = HelperFunctions.DataRetrivalFunctions.GetPlanet(planetID);
        SortedList sortedPlanetDistList = new SortedList();

        // create the sorted list
        foreach (PlanetData pData in needyPlanet.System.Province.PlanetList)
        {
            if (pData.ID != planetID && pData.IsInhabited)
            {
                float dist = HelperFunctions.Formulas.MeasureDistanceBetweenSystems(needyPlanet.System, pData.System);
                while (sortedPlanetDistList.ContainsKey(dist))
                {
                    dist += .001f;
                }
                sortedPlanetDistList.Add(dist, pData);
            }
        }

        // now check for general ability to create agreement (distance, starbase, support level of viceroy)
        foreach (DictionaryEntry de in sortedPlanetDistList)
        {
            PlanetData exportPlanet = (PlanetData)de.Value;                // cast?

            if (exportPlanet.IsTradeAgreementValid(needyPlanet, resource)) // check for food agreement (is there enough food to send?)
            {
                TradeAgreement newTrade = new TradeAgreement();
                newTrade.ExportPlanetID = exportPlanet.ID;
                newTrade.Status         = TradeAgreement.eAgreementStatus.Active;
                newTrade.ImportPlanetID = needyPlanet.ID;
                switch (resource)
                {
                case "food":
                {
                    if (exportPlanet.FoodExportAvailable >= Math.Abs(needyPlanet.FoodDifference))
                    {
                        newTrade.FoodSent = Math.Abs(needyPlanet.FoodDifference);
                    }
                    else if (exportPlanet.FoodExportAvailable > 0)
                    {
                        newTrade.FoodSent = exportPlanet.FoodExportAvailable;
                    }
                    else
                    {
                        newTrade.FoodSent = 0;         // no food avail, error check
                    }
                    if (newTrade.FoodSent >= exportPlanet.StarbaseCapacityRemaining)
                    {
                        newTrade.FoodSent = exportPlanet.StarbaseCapacityRemaining;
                    }
                    break;
                }

                case "energy":
                {
                    if (exportPlanet.EnergyExportAvailable >= Math.Abs(needyPlanet.EnergyDifference))
                    {
                        newTrade.EnergySent = Math.Abs(needyPlanet.EnergyDifference);
                    }
                    else if (exportPlanet.EnergyExportAvailable > 0)
                    {
                        newTrade.EnergySent = exportPlanet.EnergyExportAvailable;
                    }
                    else
                    {
                        newTrade.EnergySent = 0;
                    }

                    if (newTrade.EnergySent >= exportPlanet.StarbaseCapacityRemaining)
                    {
                        newTrade.EnergySent = exportPlanet.StarbaseCapacityRemaining;
                    }
                    break;
                }

                case "alpha":
                {
                    if (exportPlanet.AlphaExportAvailable >= Math.Abs(needyPlanet.AlphaPreProductionDifference))
                    {
                        newTrade.AlphaSent = Math.Abs(needyPlanet.AlphaPreProductionDifference);
                    }
                    else if (exportPlanet.AlphaExportAvailable > 0)
                    {
                        newTrade.AlphaSent = exportPlanet.AlphaExportAvailable;
                    }
                    else
                    {
                        newTrade.AlphaSent = 0;
                    }

                    if (newTrade.AlphaSent >= exportPlanet.StarbaseCapacityRemaining)
                    {
                        newTrade.AlphaSent = exportPlanet.StarbaseCapacityRemaining;
                    }
                    break;
                }

                case "heavy":
                {
                    if (exportPlanet.HeavyExportAvailable >= Math.Abs(needyPlanet.HeavyPreProductionDifference))
                    {
                        newTrade.HeavySent = Math.Abs(needyPlanet.HeavyPreProductionDifference);
                    }
                    else if (exportPlanet.HeavyExportAvailable > 0)
                    {
                        newTrade.HeavySent = exportPlanet.HeavyExportAvailable;
                    }
                    else
                    {
                        newTrade.HeavySent = 0;
                    }

                    if (newTrade.HeavySent >= exportPlanet.StarbaseCapacityRemaining)
                    {
                        newTrade.HeavySent = exportPlanet.StarbaseCapacityRemaining;
                    }
                    break;
                }

                case "rare":
                {
                    if (exportPlanet.RareExportAvailable >= Math.Abs(needyPlanet.RarePreProductionDifference))
                    {
                        newTrade.RareSent = Math.Abs(needyPlanet.RarePreProductionDifference);
                    }
                    else if (exportPlanet.RareExportAvailable > 0)
                    {
                        newTrade.RareSent = exportPlanet.RareExportAvailable;
                    }
                    else
                    {
                        newTrade.RareSent = 0;
                    }

                    //starbase capacity check
                    if (newTrade.RareSent >= exportPlanet.StarbaseCapacityRemaining)
                    {
                        newTrade.RareSent = exportPlanet.StarbaseCapacityRemaining;
                    }
                    break;
                }

                default:
                    break;
                }

                if (newTrade.TotalSent >= 0.01) // minimum threshold amount for trades, also check for capacity of the trade
                {
                    Debug.Log("Trade of " + newTrade.TotalSent.ToString("N2") + " " + resource + " to " + newTrade.ImportPlanet.Name + " from " + newTrade.ExportPlanet.Name + " over " + newTrade.Distance.ToString("N1") + " LY for $" + newTrade.Cost.ToString("N2") + " with a " + newTrade.CostModifier.ToString("N1") + " modifier.");
                    gDataRef.ActiveTradeAgreements.Add(newTrade); // add the new agreement
                }

                // update the trade info for each planet
                UpdatePlanetTradeInfo(needyPlanet);
                UpdatePlanetTradeInfo(exportPlanet);
            }
        }
    }
コード例 #5
0
 public void Ctor()
 {
     var agreement = new TradeAgreement();
 }