using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Pf2e.Database.Model.Enum; using Pf2e.Scrapper.Processors; namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers; /// /// Класс-расширение для . /// public static class AonprdProcessorInputExtension { /// /// Обработать строку, содержащую информацию о количестве действий. /// /// /// Входная строка с данными. /// Структура, хранящая информацию о количетсве действий. public static ActionStruct ResolveActionString(this ProcessorInput _, string input) { ActionStruct result = new(); switch (input) { case "Single Action": result.Actions = result.MaxActions = 1; break; case "Two Actions": result.Actions = result.MaxActions = 2; break; case "Three Actions": result.Actions = result.MaxActions = 3; break; case "Reaction": result.IsReaction = true; break; case "Free Action": result.IsFreeAction = false; break; case "Single Action to Three Actions": case "Single Action or more Actions": result.Actions = 1; result.MaxActions = 3; break; case "Single Action or Two Actions": case "Single Action to Two Actions": result.Actions = 1; result.MaxActions = 2; break; case "Two Actions or Three Actions": result.Actions = 2; result.MaxActions = 3; break; case "Two Actions to 2 rounds": result.Actions = 2; result.MaxActions = 3; result.TwoRounds = true; break; case "Reaction or One Action": result.IsReaction = true; result.Actions = result.MaxActions = 1; break; case "Reaction or Two Actions": result.IsReaction = true; result.Actions = result.MaxActions = 2; break; case "Free Action or One Action": result.IsFreeAction = false; result.Actions = result.MaxActions = 1; break; default: result.IsPassive = true; break; } return result; } /// /// Класс структуры, хранящей информацию о количетсве действий. /// public class ActionStruct { /// /// Количество действий /// public int Actions { get; set; } /// /// Максимальное количество действий /// public int MaxActions { get; set; } /// /// Флаг, указывающий, что действия не требуются. /// public bool IsPassive { get; set; } /// /// Флаг, указывающий, что действие может быть использовано как реакция. /// public bool IsReaction { get; set; } /// /// Флаг, указывающий, что можно использовать свободное действие. /// public bool IsFreeAction { get; set; } /// /// Флаг, указывающий, что действие может быть продлено до 2 раундов. /// public bool TwoRounds { get; set; } } /// /// Разрешитель перечисления . /// public class SourceCategorySolver : EnumSolver { /// public override Dictionary Data { get; } = new() { { "Rulebooks", SourceCategory.Rulebooks }, { "Adventure Paths", SourceCategory.AdventurePaths }, { "Lost Omens", SourceCategory.LostOmens }, { "Adventures", SourceCategory.Adventures }, { "Comics", SourceCategory.Comics }, { "Blog Posts", SourceCategory.BlogPosts }, { "Society", SourceCategory.Society }, }; } /// /// Разрешитель перечисления . /// public class VisionEnumSolver : EnumSolver { /// public override Dictionary Data { get; } = new() { { "Low-Light VisionEnum", VisionEnum.LowLightVision }, { "Darkvision", VisionEnum.DarkVision }, }; } /// /// Разрешитель перечисления . /// public class AttributeValuesSolver : EnumSolver { /// public override Dictionary Data { get; } = new() { { "Consitution", AttributeValues.Constitution }, { "Other", AttributeValues.Free }, { "other", AttributeValues.Free }, }; } /// /// Разрешитель перечисления . /// public class ActionEnumSolver : EnumSolver { /// public override Dictionary Data { get; } = new() { { "Single Action", ActionEnum.SingleAction }, { "Two Actions", ActionEnum.TwoActions }, { "Three Actions", ActionEnum.ThreeActions }, { "Reaction", ActionEnum.Reaction }, { "Free Action", ActionEnum.FreeAction }, { "Single Action to Three Actions", ActionEnum.SingleActionToThreeActions }, { "Single Action or more Actions", ActionEnum.SingleActionToThreeActions }, { "Single Action or Two Actions", ActionEnum.SingleActionToTwoActions }, { "Single Action to Two Actions", ActionEnum.SingleActionToTwoActions }, { "Two Actions or Three Actions", ActionEnum.TwoActionsToThreeActions }, { "Two Actions to 2 rounds", ActionEnum.TwoActionsToTwoRounds }, { "Reaction or One Action", ActionEnum.ReactionOrOneAction }, { "Reaction or Two Actions", ActionEnum.ReactionOrTwoAction }, { "Reaction or Three Actions", ActionEnum.ReactionOrThreeAction }, { "Free Action or One Action", ActionEnum.FreeActionOrOneAction }, { "1 Minute", ActionEnum.OneMinute }, { "1 minute", ActionEnum.OneMinute }, { "5 minutes", ActionEnum.FiveMinutes }, { "10 minutes", ActionEnum.TenMinutes }, { "30 minutes", ActionEnum.ThirtyMinutes }, { "1 hour", ActionEnum.OneHour }, { "Nethys Note: No cast time was printed", ActionEnum.Unknown }, }; } /// /// Регистрирует службы разрешителей перечислений в контейнере служб. /// /// Коллекция служб. public static void RegisterServices(IServiceCollection serviceCollection) { serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); } }