public static WeaponSearchType LimitTypeToListType(WeaponListKind type) { switch (type) { case WeaponListKind.Melee: return(WeaponSearchType.Melee); case WeaponListKind.Ranged: return(WeaponSearchType.Ranged); case WeaponListKind.Both: default: return(WeaponSearchType.Both); } }
public static bool CustomDrawer_MatchingWeapons_active(Rect wholeRect, SettingHandle <ThingDefHashSetHandler> setting, WeaponListKind kind, Color background, string yesText = "Sidearms", string noText = "Not sidearms") { drawBackground(wholeRect, background); if (setting.Value == null) { setting.Value = new ThingDefHashSetHandler(); } GUI.color = Color.white; Rect leftRect = new Rect(wholeRect); leftRect.width = leftRect.width / 2; leftRect.height = wholeRect.height - TextMargin + BottomMargin; leftRect.position = new Vector2(leftRect.position.x, leftRect.position.y); Rect rightRect = new Rect(wholeRect); rightRect.width = rightRect.width / 2; leftRect.height = wholeRect.height - TextMargin + BottomMargin; rightRect.position = new Vector2(rightRect.position.x + leftRect.width, rightRect.position.y); DrawLabel(yesText, leftRect, TextMargin); DrawLabel(noText, rightRect, TextMargin); leftRect.position = new Vector2(leftRect.position.x, leftRect.position.y + TextMargin); rightRect.position = new Vector2(rightRect.position.x, rightRect.position.y + TextMargin); int iconsPerRow = (int)(leftRect.width / (IconGap + IconSize)); IEnumerable <ThingDef> matchingSidearmsEnumerable; IEnumerable <ThingDef> allSidearmsEnumerable = GettersFilters.getValidWeaponsThingDefsOnly(); switch (kind) { case WeaponListKind.Melee: matchingSidearmsEnumerable = allSidearmsEnumerable.Where(t => t.IsMeleeWeapon); break; case WeaponListKind.Ranged: matchingSidearmsEnumerable = allSidearmsEnumerable.Where(t => t.IsRangedWeapon); break; case WeaponListKind.Both: default: matchingSidearmsEnumerable = allSidearmsEnumerable; break; } List <ThingDef> matchingSidearms = matchingSidearmsEnumerable.ToList(); List <ThingDef> allSidearms = allSidearmsEnumerable.ToList(); matchingSidearms = matchingSidearms.OrderBy(t => t.GetStatValueAbstract(StatDefOf.Mass)).ToList(); List <ThingDef> selectedSidearms = setting.Value.InnerList.ToList(); List <ThingDef> unselectedSidearms = new List <ThingDef>(); for (int i = 0; i < matchingSidearms.Count; i++) { if (!selectedSidearms.Contains(matchingSidearms[i])) { unselectedSidearms.Add(matchingSidearms[i]); } } bool change = false; int biggerRows = Math.Max((selectedSidearms.Count - 1) / iconsPerRow, (unselectedSidearms.Count - 1) / iconsPerRow) + 1; setting.CustomDrawerHeight = (biggerRows * IconSize) + ((biggerRows) * IconGap) + TextMargin; for (int i = 0; i < selectedSidearms.Count; i++) { int collum = (i % iconsPerRow); int row = (i / iconsPerRow); bool interacted = DrawIconForWeapon(selectedSidearms[i], leftRect, new Vector2(IconSize * collum + collum * IconGap, IconSize * row + row * IconGap), i); if (interacted) { change = true; setting.Value.InnerList.Remove(selectedSidearms[i]); } } for (int i = 0; i < unselectedSidearms.Count; i++) { int collum = (i % iconsPerRow); int row = (i / iconsPerRow); bool interacted = DrawIconForWeapon(unselectedSidearms[i], rightRect, new Vector2(IconSize * collum + collum * IconGap, IconSize * row + row * IconGap), i); if (interacted) { change = true; setting.Value.InnerList.Add(unselectedSidearms[i]); } } return(change); }
internal static bool CustomDrawer_MatchingWeapons_active(Rect wholeRect, SettingHandle <StringHashSetHandler> setting, WeaponListKind kind, Color background, string yesText = "Sidearms", string noText = "Not sidearms", bool excludeNeolithic = false) { drawBackground(wholeRect, background); if (setting.Value == null) { setting.Value = new StringHashSetHandler(); } GUI.color = Color.white; Rect leftRect = new Rect(wholeRect); leftRect.width = leftRect.width / 2; leftRect.height = wholeRect.height - TextMargin + BottomMargin; leftRect.position = new Vector2(leftRect.position.x, leftRect.position.y); Rect rightRect = new Rect(wholeRect); rightRect.width = rightRect.width / 2; leftRect.height = wholeRect.height - TextMargin + BottomMargin; rightRect.position = new Vector2(rightRect.position.x + leftRect.width, rightRect.position.y); DrawLabel(yesText, leftRect, TextMargin); DrawLabel(noText, rightRect, TextMargin); leftRect.position = new Vector2(leftRect.position.x, leftRect.position.y + TextMargin); rightRect.position = new Vector2(rightRect.position.x, rightRect.position.y + TextMargin); int iconsPerRow = (int)(leftRect.width / (IconGap + IconSize)); HashSet <string> selection = setting.Value.InnerList; List <ThingStuffPair> matchingSidearms; List <ThingStuffPair> allSidearms = GettersFilters.filterForType(PawnSidearmsGenerator.getWeaponsList(), WeaponSearchType.Both, false); switch (kind) { case WeaponListKind.Melee: matchingSidearms = GettersFilters.filterForType(allSidearms, WeaponSearchType.Melee, false); break; case WeaponListKind.Ranged: matchingSidearms = GettersFilters.filterForType(allSidearms, WeaponSearchType.Ranged, false); break; case WeaponListKind.Both: default: matchingSidearms = allSidearms; break; } if (excludeNeolithic) { GettersFilters.excludeNeolithic(matchingSidearms); } matchingSidearms.Sort(new MassComparer()); List <string> selectionAsList = selection.ToList(); ThingDef[] selectionThingDefs = new ThingDef[selectionAsList.Count]; for (int i = 0; i < allSidearms.Count; i++) { for (int j = 0; j < selectionThingDefs.Length; j++) { if (selectionAsList[j].Equals(allSidearms[i].thing.defName)) { selectionThingDefs[j] = allSidearms[i].thing; } } } List <ThingStuffPair> unselectedSidearms = new List <ThingStuffPair>(); for (int i = 0; i < matchingSidearms.Count; i++) { if (!selection.Contains(matchingSidearms[i].thing.defName)) { unselectedSidearms.Add(matchingSidearms[i]); } } bool change = false; int biggerRows = Math.Max((selection.Count - 1) / iconsPerRow, (unselectedSidearms.Count - 1) / iconsPerRow) + 1; setting.CustomDrawerHeight = (biggerRows * IconSize) + ((biggerRows) * IconGap) + TextMargin; for (int i = 0; i < selectionAsList.Count; i++) { if (selectionThingDefs[i] == null) { continue; } int collum = (i % iconsPerRow); int row = (i / iconsPerRow); bool interacted = DrawIconForWeapon(selectionThingDefs[i], leftRect, new Vector2(IconSize * collum + collum * IconGap, IconSize * row + row * IconGap), i); if (interacted) { change = true; selection.Remove(selectionAsList[i]); } } for (int i = 0; i < unselectedSidearms.Count; i++) { int collum = (i % iconsPerRow); int row = (i / iconsPerRow); bool interacted = DrawIconForWeapon(unselectedSidearms[i].thing, rightRect, new Vector2(IconSize * collum + collum * IconGap, IconSize * row + row * IconGap), i); if (interacted) { change = true; selection.Add(unselectedSidearms[i].thing.defName); } } if (change) { setting.Value.InnerList = selection; } return(change); }
private void Limits(Listing_Standard listing, WeaponListKind listType, Action onChange) { ref var limitModeSingle = ref LimitModeSingle;