Пример #1
0
        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);
        }