private ToolInfo privateBestTool(ToolType toolType) { ToolInfo info = null; float val = 0f; foreach (var currInfo in useableTools) { float currVal = currInfo.comp[toolType]; if (currInfo.comp.TryGetValue(toolType, out var baseVal) && baseVal > 1f && currVal > val) { info = currInfo; val = currVal; } } return(info); }
public ToolInfo ClosestToolInfo(ToolType toolType, IntVec3 pos, Pawn pawn = null) { var reservation = pawn?.MapHeld.reservationManager; var faction = pawn?.Faction; var flag = pawn.CanUseTools(out var tracker); ThingFilter assignmentFilter = null; if (flag) { assignmentFilter = tracker.ToolAssignment.filter; } ToolInfo info = null; float bestDist = float.MaxValue; foreach (var currInfo in UseableToolInfos) { if (pawn != null) { if (flag) { if (currInfo.tool.ToolIsForbidden(pawn, assignmentFilter, reservation, faction)) { continue; } } else if (currInfo.tool.ToolIsForbidden(pawn, reservation, faction)) { continue; } } if (!currInfo.comp.TryGetValue(toolType, out float val) || val < 1f || !Distance(currInfo.tool, pos, out float dist)) { continue; } if (dist < bestDist) { bestDist = dist; info = currInfo; } } return(info); }