Files
Pf2eDataScrapper/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorInput.cs
T

139 lines
4.5 KiB
C#

using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Helpers;
using Pf2eDataScrapper.Processors;
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
/// <summary>
/// Класс для работы с JSON-объектом при обработки данных с Архивов Нефиса.
/// </summary>
/// <param name="input">JSON-объект, который будет использоваться для доступа к данным.</param>
internal class AonprdProcessorInput(JObject input) : ProcessorInput(input)
{
/// <inheritdoc/>
public override T Enum<T>(string value)
{
try
{
return AonprdEnumResolver.Resolve<T>(value);
}
catch
{
return base.Enum<T>(value);
}
}
/// <summary>
/// Обработать строку, содержащую информацию о количестве действий.
/// </summary>
/// <param name="input">Входная строка с данными.</param>
/// <returns>Структура, хранящая информацию о количетсве действий.</returns>
public ActionStruct ResolveActionString(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;
}
/// <summary>
/// Класс структуры, хранящей информацию о количетсве действий.
/// </summary>
public class ActionStruct
{
/// <summary>
/// Количество действий
/// </summary>
public int Actions { get; set; }
/// <summary>
/// Максимальное количество действий
/// </summary>
public int MaxActions { get; set; }
/// <summary>
/// Флаг, указывающий, что действия не требуются.
/// </summary>
public bool IsPassive { get; set; }
/// <summary>
/// Флаг, указывающий, что действие может быть использовано как реакция.
/// </summary>
public bool IsReaction { get; set; }
/// <summary>
/// Флаг, указывающий, что можно использовать свободное действие.
/// </summary>
public bool IsFreeAction { get; set; }
/// <summary>
/// Флаг, указывающий, что действие может быть продлено до 2 раундов.
/// </summary>
public bool TwoRounds { get; set; }
}
}