public void DurationEndTimeNull()
        {
            var start = DateTime.UtcNow;
            var data  = new DurationData(start, null);

            data.Duration.Should().BeNull();
        }
        public void DurationStartTimeNull()
        {
            var end  = DateTime.UtcNow;
            var data = new DurationData(null, end);

            data.Duration.Should().BeNull();
        }
Пример #3
0
 public ContinuousEffect(OID source, Duration duration, DurationData data, Modification[] modifications)
     : this(source, duration, data)
 {
     foreach (var mod in modifications)
     {
         AddModification(mod);
     }
 }
        public void Duration()
        {
            var start = DateTime.UtcNow;
            var end   = DateTime.Now;
            var data  = new DurationData(start, end);

            data.Duration.Should().Be(end - start);
        }
        public void InitStartTimeNull()
        {
            var end  = DateTime.Now;
            var data = new DurationData(null, end);

            data.StartTime.Should().BeNull();
            data.EndTime.Should().Be(end);
        }
        public void InitEndTimeNull()
        {
            var start = DateTime.UtcNow;
            var data  = new DurationData(start, null);

            data.StartTime.Should().Be(start);
            data.EndTime.Should().BeNull();
        }
        public void Init()
        {
            var start = DateTime.UtcNow;
            var end   = DateTime.Now;
            var data  = new DurationData(start, end);

            data.StartTime.Should().Be(start);
            data.EndTime.Should().Be(end);
        }
Пример #8
0
        public void UpdateValues(VehicleScheduleData data, RootTask _)
        {
            if (data != _scheduleData)
            {
                throw new ArgumentException("Schedule data is not for this ScheduleTotalIndicator");
            }

            Locale locale = LazyManager <LocaleManager> .Current.Locale;
            IReadOnlyDictionary <Item, TransferData> routeTotalTransfers = null;

            if (_capacityIndicator != null)
            {
                _lastTotalTransfers = data.Capacity.GetTotalTransfers();
                routeTotalTransfers = RouteTotalTransfers;
            }
            int itemsLimit = routeTotalTransfers != null ? 7 : 10;

            _lastTransfersPerStation = null;
            _lastMonthMultiplier     = data.ScheduleMonthlyMultiplier;
            _lastTotalTime           = data.ScheduleAvereageDuration;
            _lastInaccurate          = _lastTotalTime is { Estimated : true };
            _lastInaccurate          = false;
            if (_text != null)
            {
                itemsLimit = routeTotalTransfers != null ? 3 : 5;
                if (_lastTotalTime != null)
                {
                    _lastInaccurate = _lastTotalTime.Estimated;
                    _text.text      = locale.GetString("schedule_stopwatch/days_hours").Format(((int)_lastTotalTime.Duration.TotalDays).ToString("N0"), _lastTotalTime.Duration.Hours.ToString("N0"));
                    if (_lastInaccurate)
                    {
                        _text.color = Color.gray;
                    }
                    else
                    {
                        _text.color = Color.black;
                    }
                }
                else
                {
                    _text.text = locale.GetString("schedule_stopwatch/unknown").ToUpper();
                }
            }

            if (_capacityIndicator != null)
            {
                _lastTotalTransfers = data.Capacity.GetTotalTransfers();
                _capacityIndicator.UpdateItems(_lastTotalTransfers, _lastMonthMultiplier, routeTotalTransfers, itemsLimit: itemsLimit, transfDirection: TransferDirection.unloading);
            }
        }
Пример #9
0
 private void Invalidate()
 {
     if (_isDirty)
     {
         _totalTravelAverage         = _travelData.GetAverageDuration(_lastSnapshot.GetNonNonstopTasks());
         _totalStationLoadingAverage = _stationLoadingData.GetAverageDuration(_lastSnapshot.GetNonNonstopTasks());
         _totalAverage = _totalStationLoadingAverage != null && _totalTravelAverage != null ? _totalStationLoadingAverage + _totalTravelAverage : null;
         _averageSpeed = null;
         float?distance;
         if (_totalTravelAverage != null && (distance = _travelData.GetTravelledDistance(_lastSnapshot.GetNonNonstopTasks())) != null)
         {
             _averageSpeed = distance.Value / ((float)_totalTravelAverage.Duration.TotalSeconds / TimeManager.GameSecondsPerSecond) * 5f;
         }
         _isDirty = false;
     }
 }
        public DurationData GetAverageDuration(RootTask task)
        {
            if (!_data.TryGetValue(task, out DurationDataSet dataSet))
            {
                return(null);
            }
            TimeSpan?average = dataSet.Average;

            if (!average.HasValue)
            {
                return(null);
            }
            DurationData durationData = new DurationData(average.Value, dataSet.Estimated);

            return(durationData);
        }
        //Gets sum of average duration for all tasks in the list. If some task is missing data, returns null
        public DurationData GetAverageDuration(IEnumerable <RootTask> tasks)
        {
            TimeSpan result    = default;
            bool     estimated = false;

            foreach (RootTask task in tasks)
            {
                DurationData duration = GetAverageDuration(task);
                if (duration == null)
                {
                    return(null);
                }
                result    += duration.Duration;
                estimated |= duration.Estimated;
            }

            return(new DurationData(result, estimated));
        }
Пример #12
0
        public ContinuousEffect(OID source, Duration duration, DurationData?data = null)
        {
            this.source   = source;
            this.duration = duration;

            if (data.HasValue)
            {
                durationData = data.Value;
            }
            else
            {
                durationData = new DurationData();
            }

            if (!IsDurationDataValid())
            {
                throw new ArgumentException($"Duration data invalid for {duration}");
            }
        }
        public void UpdateValues(VehicleScheduleData data, RootTask _)
        {
            if (data != _scheduleData || data == null)
            {
                throw new ArgumentException("Schedule data is not for this ScheduleTaskIndicator");
            }
            Locale locale = LazyManager <LocaleManager> .Current.Locale;

            if (_travelTimeText != null)
            {
                DurationData travel = _lastTravelData = data.GetAverageTravelDuration(Task);
                if (travel != null)
                {
                    _travelTimeText.text = locale.GetString("schedule_stopwatch/days_hours").Format(((int)travel.Duration.TotalDays).ToString("N0"), travel.Duration.Hours.ToString("N0"));
                    if (travel.Estimated)
                    {
                        _travelTimeText.color = Color.gray;
                    }
                    else
                    {
                        _travelTimeText.color = Color.black;
                    }
                }
                else
                {
                    _travelTimeText.text = locale.GetString("schedule_stopwatch/unknown").ToUpper();
                }
                DurationData loading = _lastStationLoadingData = data.GetAverageStationLoadingDuration(Task);
                if (loading != null)
                {
                    _loadingTimeText.text = locale.GetString("schedule_stopwatch/hours_minutes").Format(((int)loading.Duration.TotalHours).ToString("N0"), loading.Duration.Minutes.ToString("N0"));
                    if (loading.Estimated)
                    {
                        _loadingTimeText.color = Color.grey;
                    }
                    else
                    {
                        _loadingTimeText.color = Color.black;
                    }
                }
                else
                {
                    _loadingTimeText.text = locale.GetString("schedule_stopwatch/unknown").ToUpper();
                }
            }

            if (_loadCapacityIndicator != null || _unloadCapacityIndicator != null)
            {
                _lastMonthMultiplier = data.ScheduleMonthlyMultiplier;
                _lastTaskTransfers   = _scheduleData.Capacity.GetTransfers(Task);
                IReadOnlyDictionary <Item, TransferData> routeTransfers = RouteTaskTransfers;
                int itemsLimit;
                if (routeTransfers != null && routeTransfers.Count > 0)
                {
                    itemsLimit = _travelTimeText != null ? 2 : 5;
                }
                else
                {
                    itemsLimit = _travelTimeText != null ? 4 : 8;
                }

                if (_unloadCapacityIndicator != null)
                {
                    _unloadCapacityIndicator.UpdateItems(_lastTaskTransfers, _lastMonthMultiplier, routeTransfers, transfDirection: TransferDirection.unloading, itemsLimit);
                    _unloadCapacityIndicator.gameObject.SetActive(_unloadCapacityIndicator.ItemsCount > 0);
                    _unloadingCapIcon.gameObject.SetActive(_unloadCapacityIndicator.ItemsCount > 0);
                    itemsLimit -= Math.Min(_unloadCapacityIndicator.ItemsCount, 1);
                }


                if (_loadCapacityIndicator != null)
                {
                    _loadCapacityIndicator.UpdateItems(_lastTaskTransfers, _lastMonthMultiplier, routeTransfers, transfDirection: TransferDirection.loading, itemsLimit);
                    _loadCapacityIndicator.gameObject.SetActive(_loadCapacityIndicator.ItemsCount > 0);
                    _loadingCapIcon.gameObject.SetActive(_loadCapacityIndicator.ItemsCount > 0);
                }
            }
        }
Пример #14
0
        public void DurationBothNull()
        {
            var data = new DurationData(null, null);

            data.Duration.Should().BeNull();
        }