Пример #1
0
        /// <summary>
        /// Finds out which transits will be over soonest and returns the datetime.
        /// </summary>
        /// <param name="transitsO"></param>
        /// <returns></returns>
        public static DateTime SoonestAvailableMerchants(Account acc, Village vill1, Village vill2, List <MerchantsUnderWay> transitsO)
        {
            var transits = transitsO
                           .Where(x => x.Transit == TransitType.Outgoin || x.Transit == TransitType.Returning)
                           .ToList();

            var ret = DateTime.MaxValue;

            foreach (var transit in transits)
            {
                DateTime time = DateTime.MaxValue;

                switch (transit.Transit)
                {
                case TransitType.Outgoin:
                    var oneTransitTime = MarketHelper.CalculateTransitTime(acc, vill1, vill2);
                    time = transit.Arrival.Add(oneTransitTime);
                    if (transit.RepeatTimes > 1)
                    {
                        time += TimeHelper.MultiplyTimespan(
                            oneTransitTime,
                            (2 * (transit.RepeatTimes - 1))
                            );
                    }
                    break;

                case TransitType.Returning:
                    time = transit.Arrival;
                    if (transit.RepeatTimes > 1)
                    {
                        time += TimeHelper.MultiplyTimespan(
                            MarketHelper.CalculateTransitTime(acc, vill1, vill2),
                            (2 * (transit.RepeatTimes - 1))
                            );
                    }
                    break;
                }
                if (ret > time)
                {
                    ret = time;
                }
            }
            return(ret);
        }