Exemplo n.º 1
0
        public double GetBestCost(ResourceTypes.ResourceType resourceType, out TradeRegion bestRegion, out TradeRegion worstRegion)
        {
            double bestCost  = 0;
            double worstCost = double.MaxValue;

            bestRegion  = null;
            worstRegion = null;
            double regionalTransportCost = Ownregion.GetTransportCost();

            foreach (TradeRegion tradeRegion in TradeRegions)
            {
                double externalTransportCost = tradeRegion.GetTransportCost();
                double totalTransportCost    = (regionalTransportCost + externalTransportCost) / 2;
                double resourceCost          = tradeRegion.GetResorceCost(resourceType);
                double salesCost             = resourceCost - totalTransportCost;
                if (salesCost > bestCost)
                {
                    bestCost   = salesCost;
                    bestRegion = tradeRegion;
                }
                if (tradeRegion.GetTransportAmount(resourceType) > 0 && salesCost < worstCost)
                {
                    worstCost   = salesCost;
                    worstRegion = tradeRegion;
                }
            }
            return(bestCost);
        }
Exemplo n.º 2
0
        private void DoExternalTradeWithInternalResources(List <TradingResource> TradingResources, ResourceTypes.ResourceType resourceType, double resourceRatio)
        {
            if (resourceRatio == 0)
            {
                return;
            }
            double exportRatio = 1 - (1 / resourceRatio);

            if (exportRatio <= 0)
            {
                return;
            }

            double transportTimeOutOfRigion = Ownregion.GetTransportTime() / 2;

            foreach (TradingResource tradingResounce in TradingResources)
            {
                double totalSellAmount = tradingResounce.Amount * exportRatio;

                foreach (TradeRegion tradeRegion in TradeRegions)
                {
                    double tradeRegionRatio = tradeRegion.GetTransportAmount(resourceType);
                    if (tradeRegionRatio <= 0)
                    {
                        continue;
                    }

                    if (tradingResounce.AffordTransport(tradeRegionRatio, tradingResounce.Amount))
                    {
                        ExternatlTradingResourcesInTransit.TradingResourceList.Add(tradingResounce.SplitAmountExternal(totalSellAmount * tradeRegionRatio, tradeRegion.GetExternalMarket(), transportTimeOutOfRigion));
                    }
                }
            }
        }
Exemplo n.º 3
0
 public void FinilizeTrades()
 {
     foreach (ExternatlTradingResource newExternatlTradingResource in NewExternatlTradingResources)
     {
         newExternatlTradingResource.SetDaysRemaning(Ownregion.GetTransportTime() / 2);
         ExternatlTradingResources.Add(newExternatlTradingResource);
     }
     NewExternatlTradingResources.Clear();
 }
Exemplo n.º 4
0
        public double GetBestCost(ResourceType resourceType, out ExternalMarket bestRegion)
        {
            double bestCost = 0;

            bestRegion = null;
            double regionalTransportCost = Ownregion.GetTransportCost() / 2;

            foreach (Region region in BorderRegions)
            {
                double externalTransportCost = region.GetTransportCost() / 2;
                double totalTransportCost    = regionalTransportCost + externalTransportCost;
                double resourceCost          = region.GetResorceCost(resourceType);
                double salesCost             = resourceCost - totalTransportCost;
                if (salesCost > bestCost)
                {
                    bestCost   = salesCost;
                    bestRegion = region.GetExternalMarket();
                }
            }

            return(bestCost);
        }
Exemplo n.º 5
0
        private void DoExternalTradeWithExternalResources(double priceRatio, double demand, ExternalTradingResources externalTradingResources, ResourceTypes.ResourceType resourceType)
        {
            double amountOfResources = externalTradingResources.TradingResourceList.Count;

            if (amountOfResources == 0)
            {
                return;
            }
            double transportTimeOutOfRigion = Ownregion.GetTransportTime() / 2;
            double keepAmount = getSendRatio(demand, priceRatio);

            if (keepAmount >= amountOfResources)
            {
                return;
            }
            double exportRatio = (amountOfResources - keepAmount) / amountOfResources;

            foreach (ExternalTradingResource externalTradingResource in externalTradingResources.TradingResourceList)
            {
                double totalSellAmount = externalTradingResource.Amount * exportRatio;

                foreach (TradeRegion tradeRegion in TradeRegions)
                {
                    double tradeRegionRatio = tradeRegion.GetTransportAmount(resourceType);
                    if (tradeRegionRatio <= 0)
                    {
                        continue;
                    }

                    if (externalTradingResource.AffordTransport(tradeRegionRatio, externalTradingResource.Amount))
                    {
                        ExternatlTradingResourcesInTransit.TradingResourceList.Add(externalTradingResource.SplitAmountExternal(totalSellAmount * tradeRegionRatio,
                                                                                                                               tradeRegion.GetExternalMarket(), transportTimeOutOfRigion));
                    }
                }
            }
        }
Exemplo n.º 6
0
 public void StartTrade(List <TradingResource> TradingResources, double ratio, ExternalMarket destination)
 {
     foreach (TradingResource tradingResounce in TradingResources)
     {
         if (tradingResounce.AffordTransport())
         {
             ExternatlTradingResources.Add(tradingResounce.SplitExternal(ratio, destination, Ownregion.GetTransportTime() / 2));
         }
     }
 }