/// <summary> /// Initializes a new instance of the <see cref="Dialog_StuffAndQuality"/> class. /// </summary> /// <param name="groupSelector"> Draw dialog from this selector. </param> public Dialog_StuffAndQuality(ThingGroupSelector groupSelector) { _groupSelector = groupSelector ?? throw new ArgumentNullException(nameof(groupSelector)); IEnumerable <SingleThingSelector> singleThingSelectors = _groupSelector.OfType <SingleThingSelector>(); _useSeparateButton = false; _isSeparated = false; _selectedSingleThingSelector = null; if (singleThingSelectors.Count() > 1) { _useSeparateButton = true; _isSeparated = singleThingSelectors.Select(t => t.AllowedQualityLevel).ToHashSet().Count > 1 || singleThingSelectors.Select(t => t.AllowedHitPointsPercent).ToHashSet().Count > 1; if (_isSeparated) { _selectedSingleThingSelector = singleThingSelectors.First(); } } closeOnClickedOutside = true; absorbInputAroundWindow = true; doCloseX = true; }
private void DrawStats(Rect rect, ThingGroupSelector groupSelector) { // Create thing stuff pair for drawing. List <TSPWQuality> pairListToDraw = new List <TSPWQuality>(); if (groupSelector.AllowedThing.MadeFromStuff) { foreach (SingleThingSelector singleThingSelector in groupSelector.OfType <SingleThingSelector>()) { if (singleThingSelector.AllowedStuff != null) { pairListToDraw.Add( new TSPWQuality( groupSelector.AllowedThing, singleThingSelector.AllowedStuff, singleThingSelector.AllowedQualityLevel.min)); } } if (_stuffPreview != null) { pairListToDraw.Add(new TSPWQuality(groupSelector.AllowedThing, _stuffPreview, _qualityPreview)); } } else { pairListToDraw.Add(new TSPWQuality(groupSelector.AllowedThing, null, QualityCategory.Normal)); } _statScrollWidth = pairListToDraw.Count * _statColumnWidth; WidgetRow row = new WidgetRow( rect.x + (_groupSelector.AllowedThing.IsWeapon ? _lineHeaderWidthForWeapon : _lineHeaderWidth), rect.y, UIDirection.RightThenDown, _statScrollWidth); Rect outRect = new Rect(row.FinalX, row.FinalY, _statColumnWidth * 3, rect.height); Rect viewRect = new Rect(row.FinalX, row.FinalY, _statScrollWidth, rect.height); DrawUtility.GetIndexRangeFromScrollPosition(outRect.width, _statScrollPosition.y, out int from, out int to, _statColumnWidth); Rect startRect = new Rect( rect.x + (_groupSelector.AllowedThing.IsWeapon ? _lineHeaderWidthForWeapon : _lineHeaderWidth) + from * _statColumnWidth, rect.y, _statColumnWidth, GenUI.ListSpacing); // Draw stats if (groupSelector.AllowedThing.IsApparel) { DrawStatNameColumn(new Rect(rect.x, row.FinalY + GenUI.ListSpacing, _lineHeaderWidth, GenUI.ListSpacing), _armorStats, out _); Widgets.ScrollHorizontal(outRect, ref _statScrollPosition, viewRect); Widgets.BeginScrollView(outRect, ref _statScrollPosition, viewRect); DrawStatTableHeader(startRect, from, to, pairListToDraw); DrawStatRows(_armorStats, pairListToDraw, startRect.ReplaceY(startRect.yMax), from, to, out _); Widgets.EndScrollView(); } else if (groupSelector.AllowedThing.IsMeleeWeapon) { DrawStatNameColumn(new Rect(rect.x, row.FinalY + GenUI.ListSpacing, _lineHeaderWidthForWeapon, GenUI.ListSpacing), _baseWeaponStats, out float nameColumnY); DrawStatNameColumn(new Rect(rect.x, nameColumnY, _lineHeaderWidthForWeapon, GenUI.ListSpacing), _meleeWeaponStats, out _); Widgets.ScrollHorizontal(outRect, ref _statScrollPosition, viewRect); Widgets.BeginScrollView(outRect, ref _statScrollPosition, viewRect); DrawStatTableHeader(startRect, from, to, pairListToDraw); DrawStatRows(_baseWeaponStats, pairListToDraw, startRect.ReplaceY(startRect.yMax), from, to, out float rollingY); DrawStatRows(_meleeWeaponStats, pairListToDraw, startRect.ReplaceY(rollingY), from, to, out _); Widgets.EndScrollView(); } else if (groupSelector.AllowedThing.IsRangedWeapon) { DrawStatNameColumn(new Rect(rect.x, row.FinalY + GenUI.ListSpacing, _lineHeaderWidthForWeapon, GenUI.ListSpacing), _baseWeaponStats, out float nameColumnY); DrawStatNameColumn(new Rect(rect.x, nameColumnY, _lineHeaderWidthForWeapon, GenUI.ListSpacing), _rangedWeaponStats, out _); Widgets.ScrollHorizontal(outRect, ref _statScrollPosition, viewRect); Widgets.BeginScrollView(outRect, ref _statScrollPosition, viewRect); DrawStatTableHeader(startRect, from, to, pairListToDraw); DrawStatRows(_baseWeaponStats, pairListToDraw, startRect.ReplaceY(startRect.yMax), from, to, out float rollingY); DrawRangedStatRows(pairListToDraw, startRect.ReplaceY(rollingY), from, to); Widgets.EndScrollView(); } else { DrawStatNameColumn(new Rect(rect.x, row.FinalY + GenUI.ListSpacing, _lineHeaderWidth, GenUI.ListSpacing), _generalItemStats, out _); Widgets.ScrollHorizontal(outRect, ref _statScrollPosition, viewRect); Widgets.BeginScrollView(outRect, ref _statScrollPosition, viewRect); DrawStatTableHeader(startRect, from, to, pairListToDraw); DrawStatRows(_generalItemStats, pairListToDraw, startRect.ReplaceY(startRect.yMax), from, to, out _); Widgets.EndScrollView(); } Text.Anchor = TextAnchor.UpperLeft; }