private void SearchCommon2(List <string> pAssets, AddonAssetType pAssetType, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { if ((_tagsRegex != null) || (_assetExtraInfoRegex != null)) { return; } foreach (string asset in pAssets) { if ((_nameRegex != null) && (!_nameRegex.IsMatch(asset))) { continue; } string subType = pAssetType.ToString(); if (_assetSubTypesRegex != null) { if (!_assetSubTypesRegex.IsMatch(subType)) { continue; } } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = pAssetType; item.AssetSubtype = subType; item.Name = asset; pFound.Add(item); } }
private void SearchVerbsKind(List <VerbSummaryItem> pVerbs, VerbCollectionFlags pVerbType, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { foreach (VerbSummaryItem verb in pVerbs) { if ((_nameRegex != null) && (!_nameRegex.IsMatch(verb.VerbName))) { continue; } if (_assetSubTypesRegex != null) { if (!_assetSubTypesRegex.IsMatch(verb.VerbType)) { continue; } } string extraInfo = GetVerbExtraInfo(verb, pVerbType); if ((_assetExtraInfoRegex != null) && !_assetExtraInfoRegex.IsMatch(extraInfo ?? ExtraInfoNull)) { continue; } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = AddonAssetType.Verb; item.AssetSubtype = verb.VerbType; item.Name = verb.VerbName; item.ExtraInfo = extraInfo; pFound.Add(item); } }
private void SearchDecals(List <BodyModelSumPuppet> pPuppets, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { if ((_tagsRegex != null) || (_assetExtraInfoRegex != null)) { return; } foreach (BodyModelSumPuppet puppet in pPuppets) { if (puppet.Decals == null) { continue; } string puppetName = puppet.PuppetName; bool foundAnyDecal = false; foreach (BodyModelSumDecal decal in puppet.Decals) { if ((_nameRegex != null) && (!_nameRegex.IsMatch(decal.DecalName))) { continue; } if (_assetSubTypesRegex != null) { if (!_assetSubTypesRegex.IsMatch(decal.Group)) { continue; } } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = AddonAssetType.Decal; item.AssetSubtype = decal.Group; item.Name = $"{puppetName} : {decal.DecalName}"; pFound.Add(item); foundAnyDecal = true; } if (puppet.ExternDecalReferenced && !foundAnyDecal) { if ((_nameRegex != null) && (!_nameRegex.IsMatch("Extern"))) { continue; } if ((_assetSubTypesRegex != null) && (!_assetSubTypesRegex.IsMatch("?"))) { continue; } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = AddonAssetType.Decal; item.AssetSubtype = "?"; item.Name = $"{puppetName} : Extern Decal Referenced"; pFound.Add(item); } } }
private void SearchCuttingRoomAssetsKind(List <CuttingRoomAssetItem> pAssets, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { foreach (CuttingRoomAssetItem asset in pAssets) { if ((_nameRegex != null) && (!_nameRegex.IsMatch(asset.Name))) { continue; } if (_assetSubTypesRegex != null) { if (!_assetSubTypesRegex.IsMatch(asset.AssetSubtype)) { continue; } } if (!TagFilterOk(asset.Tags)) { continue; } string tags = null; if (!string.IsNullOrEmpty(asset.TagsRaw)) { tags = asset.TagsRaw.Replace(",", " "); } string extraInfo = string.IsNullOrEmpty(asset.Description) ? null : asset.Description; if ((_assetExtraInfoRegex != null) && !_assetExtraInfoRegex.IsMatch(extraInfo ?? ExtraInfoNull)) { continue; } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = AddonAssetType.CuttingRoomAsset; item.AssetSubtype = asset.AssetSubtype; item.Name = asset.Name; item.Tags = tags; item.ExtraInfo = extraInfo; pFound.Add(item); } }
private void SearchAnimationsCommon(string pAssetSubType, string pOwnerName, List <string> pAnimations, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { const string prefix = "animations/"; const string extension = ".caf"; foreach (string animation in pAnimations) { if ((_nameRegex != null) && !_nameRegex.IsMatch(animation)) { continue; } string animationLower = animation?.Trim().ToLower().Replace("\\", "/"); if (string.IsNullOrEmpty(animationLower)) { continue; } string animationName = animation.Trim().Replace("\\", "/"); if (animationLower.EndsWith(extension)) { animationName = animationName.Substring(0, animationName.Length - extension.Length); } if (animationLower.StartsWith(prefix)) { animationName = animationName.Remove(0, prefix.Length); } string extraInfo = $"[{pOwnerName}]"; if ((_assetExtraInfoRegex != null) && !_assetExtraInfoRegex.IsMatch(extraInfo ?? ExtraInfoNull)) { continue; } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = AddonAssetType.Animation; item.AssetSubtype = pAssetSubType; item.Name = animationName; item.ExtraInfo = extraInfo; pFound.Add(item); } }
private void SearchAnimations(AssetManifest pManifest, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { if (_tagsRegex != null) { return; } const string PuppetAnimationToken = "PuppetAnimation"; if ((_assetSubTypesRegex == null) || _assetSubTypesRegex.IsMatch(PuppetAnimationToken)) { if ((pManifest.BodyModels != null) && (pManifest.BodyModels.Count > 0)) { foreach (BodyModelItem puppet in pManifest.BodyModels) { if ((puppet.Animations != null) && (puppet.Animations.Count > 0)) { SearchAnimationsCommon(PuppetAnimationToken, puppet.PuppetName, puppet.Animations, pBaseResultItem, pFound); } } } } const string PropAnimationToken = "PropAnimation"; if ((_assetSubTypesRegex == null) || _assetSubTypesRegex.IsMatch(PropAnimationToken)) { if ((pManifest.PropModels != null) && (pManifest.PropModels.Count > 0)) { foreach (PropModelItem prop in pManifest.PropModels) { if ((prop.Animations != null) && (prop.Animations.Count > 0)) { SearchAnimationsCommon(PropAnimationToken, prop.Name, prop.Animations, pBaseResultItem, pFound); } } } } }
private void SearchCommon(List <string> pAssets, AddonAssetType pAssetType, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { if ((_tagsRegex != null) || (_assetExtraInfoRegex != null)) { return; } foreach (string asset in pAssets) { string splitChar = ((pAssetType == AddonAssetType.Stock) || (pAssetType == AddonAssetType.OtherAsset)) ? ":" : "/"; Tuple <string, string> parts = Split(asset, splitChar); if (parts == null) { continue; } if ((_nameRegex != null) && (!_nameRegex.IsMatch(parts.Item1))) { continue; } string subType = parts.Item2 ?? pAssetType.ToString(); if (_assetSubTypesRegex != null) { if (!_assetSubTypesRegex.IsMatch(subType)) { continue; } } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = pAssetType; item.AssetSubtype = subType; item.Name = parts.Item1; pFound.Add(item); } }
private void SearchVerbs(VerbCollection pVerbs, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { if (_tagsRegex != null) { return; } if (pVerbs.Flags.HasFlag(VerbCollectionFlags.Gaits)) { SearchVerbsKind(pVerbs.Gaits, VerbCollectionFlags.Gaits, pBaseResultItem, pFound); } if (pVerbs.Flags.HasFlag(VerbCollectionFlags.Gestures)) { SearchVerbsKind(pVerbs.Gestures, VerbCollectionFlags.Gestures, pBaseResultItem, pFound); } if (pVerbs.Flags.HasFlag(VerbCollectionFlags.PuppetSoloVerbs)) { SearchVerbsKind(pVerbs.PuppetSoloVerbs, VerbCollectionFlags.PuppetSoloVerbs, pBaseResultItem, pFound); } if (pVerbs.Flags.HasFlag(VerbCollectionFlags.PuppetMutualVerbs)) { SearchVerbsKind(pVerbs.PuppetMutualVerbs, VerbCollectionFlags.PuppetMutualVerbs, pBaseResultItem, pFound); } if (pVerbs.Flags.HasFlag(VerbCollectionFlags.PropSoloVerbs)) { SearchVerbsKind(pVerbs.PropSoloVerbs, VerbCollectionFlags.PropSoloVerbs, pBaseResultItem, pFound); } if (pVerbs.Flags.HasFlag(VerbCollectionFlags.HeldPropsVerbs)) { SearchVerbsKind(pVerbs.HeldPropsVerbs, VerbCollectionFlags.HeldPropsVerbs, pBaseResultItem, pFound); } if (pVerbs.Flags.HasFlag(VerbCollectionFlags.InteractivePropsVerbs)) { SearchVerbsKind(pVerbs.InteractivePropsVerbs, VerbCollectionFlags.InteractivePropsVerbs, pBaseResultItem, pFound); } }
public List <AssetSearchResultItem> SearchAsset(AddonPackage pPackage) { List <AssetSearchResultItem> found = new List <AssetSearchResultItem>(); AssetSearchResultItem baseResultItem = new AssetSearchResultItem() { AddonName = pPackage.Name, AddonPublisher = pPackage.Publisher, Free = pPackage.Free, Location = pPackage.Location }; baseResultItem.Installed = (pPackage.AddonFormat == AddonPackageFormat.InstalledFolder); baseResultItem.ContentPack = pPackage.Location.ToLower().StartsWith(ContentPacksPath); if ((pPackage.BodyModelsSummary?.Puppets?.Puppets.Count ?? 0) > 0) { if (AssetType.HasFlag(AddonAssetType.BodyPart)) { SearchBodyParts(pPackage.BodyModelsSummary.Puppets.Puppets, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.Decal)) { SearchDecals(pPackage.BodyModelsSummary.Puppets.Puppets, baseResultItem, found); } } if (AssetType.HasFlag(AddonAssetType.Prop) && ((pPackage.PropModelsSummary.Props?.Props.Count ?? 0) > 0)) { SearchProps(pPackage.PropModelsSummary.Props.Props, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.Verb) && (pPackage.VerbsSummary?.Verbs.HasData ?? false)) { SearchVerbs(pPackage.VerbsSummary.Verbs, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.Animation)) { SearchAnimations(pPackage.AssetManifest, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.CuttingRoomAsset)) { SearchCuttingRoomAssets(pPackage.CuttingRoomAssetsSummary, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.Material) && (((pPackage.Materials?.Count ?? 0) > 0))) { SearchCommon(pPackage.Materials, AddonAssetType.Material, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.Sound) && (((pPackage.Sounds?.Count ?? 0) > 0))) { SearchCommon(pPackage.Sounds, AddonAssetType.Sound, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.SpecialEffect) && (((pPackage.SpecialEffects?.Count ?? 0) > 0))) { SearchCommon(pPackage.SpecialEffects, AddonAssetType.SpecialEffect, baseResultItem, found); } /* * if (AssetType.HasFlag(AddonAssetType.CuttingRoomAsset) && (((pPackage.Filters?.Count ?? 0) > 0))) * { * SearchCommon(pPackage.Filters, AddonAssetType.CuttingRoomAsset, baseResultItem, found); * } */ if (AssetType.HasFlag(AddonAssetType.SkyTexture) && (((pPackage.SkyTextures?.Count ?? 0) > 0))) { SearchCommon(pPackage.SkyTextures, AddonAssetType.SkyTexture, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.OtherAsset) && (((pPackage.OtherAssets?.Count ?? 0) > 0))) { SearchCommon(pPackage.OtherAssets, AddonAssetType.OtherAsset, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.Stock) && (((pPackage.StockAssets?.Count ?? 0) > 0))) { SearchCommon(pPackage.StockAssets, AddonAssetType.Stock, baseResultItem, found); } if (AssetType.HasFlag(AddonAssetType.StartMovie) && (((pPackage.DemoMovies?.Count ?? 0) > 0))) { SearchCommon2(pPackage.DemoMovies, AddonAssetType.StartMovie, baseResultItem, found); } return(found.Count > 0 ? found : null); }
private void SearchCuttingRoomAssets(CuttingRoomAssetsSummary pCuttingRoomAssets, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { if ((pCuttingRoomAssets?.Assets == null) || (!pCuttingRoomAssets.HasData)) { return; } if (pCuttingRoomAssets.Assets.Flags.HasFlag(CuttingRoomAssetCollectionFlags.Filters)) { SearchCuttingRoomAssetsKind(pCuttingRoomAssets.Assets.Filters, pBaseResultItem, pFound); } if (pCuttingRoomAssets.Assets.Flags.HasFlag(CuttingRoomAssetCollectionFlags.TextStyles)) { SearchCuttingRoomAssetsKind(pCuttingRoomAssets.Assets.TextStyles, pBaseResultItem, pFound); } if (pCuttingRoomAssets.Assets.Flags.HasFlag(CuttingRoomAssetCollectionFlags.Transitions)) { SearchCuttingRoomAssetsKind(pCuttingRoomAssets.Assets.Transitions, pBaseResultItem, pFound); } }
private void SearchProps(List <PropModelSumProp> pProps, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { foreach (PropModelSumProp prop in pProps) { if ((_nameRegex != null) && (!_nameRegex.IsMatch(prop.PropName))) { continue; } /* * if ((Tags != null) && (Tags.Count > 0)) * { * if ((prop.Tags == null) || (prop.Tags.Count == 0)) * continue; * bool gotTag = false; * foreach (string tagSearched in Tags) * { * if (prop.Tags.Contains(tagSearched)) * { * gotTag = true; * break; * } * } * * if (!gotTag) * continue; * } */ if (!TagFilterOk(prop.Tags)) { continue; } if (_assetSubTypesRegex != null) { if (!_assetSubTypesRegex.IsMatch(prop.PropType)) { continue; } } string extraInfo = prop.AttributesString; if ((prop.Variants?.Count ?? 0) > 1) { extraInfo += PropVariantsInfo(prop.Variants); } if (prop.MultiPart) { extraInfo += " [Multipart]"; } if ((_assetExtraInfoRegex != null) && !_assetExtraInfoRegex.IsMatch(extraInfo ?? ExtraInfoNull)) { continue; } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = AddonAssetType.Prop; item.AssetSubtype = prop.PropType; item.Name = prop.PropName; item.Tags = StringListToString(prop.Tags); item.ExtraInfo = extraInfo; pFound.Add(item); } }
private void SearchBodyParts(List <BodyModelSumPuppet> pPuppets, AssetSearchResultItem pBaseResultItem, List <AssetSearchResultItem> pFound) { foreach (BodyModelSumPuppet puppet in pPuppets) { if (puppet.BodyParts == null) { continue; } string puppetName = puppet.PuppetName; foreach (BodyModelSumBodyPart part in puppet.BodyParts) { if ((_nameRegex != null) && (!_nameRegex.IsMatch(part.BodyPartName))) { continue; } /* * if ((Tags != null) && (Tags.Count > 0)) * { * if ((part.Tags == null) || (part.Tags.Count == 0)) * continue; * bool gotTag = false; * foreach (string tagSearched in Tags) * { * if (part.Tags.Contains(tagSearched)) * { * gotTag = true; * break; * } * } * * if (!gotTag) * continue; * } */ if (!TagFilterOk(part.Tags)) { continue; } if (_assetSubTypesRegex != null) { if (!_assetSubTypesRegex.IsMatch(part.BodyPartType)) { continue; } } string extraInfo = $"{part.Covers}"; if (part.Morphable) { extraInfo += " [Morphable]"; } if ((_assetExtraInfoRegex != null) && !_assetExtraInfoRegex.IsMatch(extraInfo ?? ExtraInfoNull)) { continue; } AssetSearchResultItem item = (AssetSearchResultItem)pBaseResultItem.Clone(); item.AssetType = AddonAssetType.BodyPart; item.AssetSubtype = part.BodyPartType; item.Name = $"{puppetName} : {part.BodyPartName}"; item.Tags = StringListToString(part.Tags); item.ExtraInfo = extraInfo; pFound.Add(item); } } }