private static List <SkeletonSlotAttachment> CollectSlotAttachments( List <FilePathsList> sources, string typeName, bool isMale, bool requireEquipmentTextures) { var result = new List <SkeletonSlotAttachment>(); var gender = isMale ? "Male" : "Female"; var skeletonNameFront = gender + "Front"; var skeletonNameBack = gender + "Back"; foreach (var pair in sources) { var fullPath = pair.SourceFolderPath; var filePaths = pair.FilesInFolder; if (filePaths.Count == 0) { continue; } // collect unisex uni-view sprites ClientSkeletonAttachmentsLoader.CreateSlotAttachmentsForTexturesFolder( fullPath, skeletonName: null, filterSubfolderPath: string.Empty, filePaths: filePaths, slotAttachments: result); // collect unisex front-view sprites ClientSkeletonAttachmentsLoader.CreateSlotAttachmentsForTexturesFolder( fullPath, skeletonName: skeletonNameFront, filterSubfolderPath: "Front/", filePaths: filePaths, slotAttachments: result); // collect gender-specific sprites ClientSkeletonAttachmentsLoader.CreateSlotAttachmentsForTexturesFolder( fullPath, skeletonName: skeletonNameFront, filterSubfolderPath: "Front/" + gender + "/", filePaths: filePaths, slotAttachments: result); // collect unisex back-view sprites ClientSkeletonAttachmentsLoader.CreateSlotAttachmentsForTexturesFolder( fullPath, skeletonName: skeletonNameBack, filterSubfolderPath: "Back/", filePaths: filePaths, slotAttachments: result); // collect gender-specific back-view sprites ClientSkeletonAttachmentsLoader.CreateSlotAttachmentsForTexturesFolder( fullPath, skeletonName: skeletonNameBack, filterSubfolderPath: "Back/" + gender + "/", filePaths: filePaths, slotAttachments: result); } CopyAttachmentIfNotAvailable( result, fromSkeletonName: skeletonNameFront, fromAttachmentName: "HandLeftEquipment", toSkeletonName: skeletonNameBack, toAttachmentName: "HandLeftFrontEquipment"); if (requireEquipmentTextures && result.Count == 0) { var message = $"There are no attachment sprites for: {typeName} (sex: {gender}). Checked at folders:{Environment.NewLine}" + sources.Select(p => ContentPaths.Textures + p.SourceFolderPath) .GetJoinedString(Environment.NewLine); if (isMale) { Api.Logger.Error(message); } else { // TODO: this also should be a error - but currently we don't have female sprites for all equipment Api.Logger.Warning(message); } } return(result); }