Fan website of IMMORTAL: Gates of Pyre.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

87 lines
2.0 KiB

using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using Model.BuildOrders;
using YamlDotNet.Serialization;
namespace Services.Immortal;
public class DeprecatedBuildComparisionService : IBuildComparisonService
{
private BuildToCompareModel buildToCompare = new();
public void Subscribe(Action action)
{
OnChange += action;
}
public void Unsubscribe(Action action)
{
OnChange -= action;
}
public void SetBuilds(BuildToCompareModel buildToCompareModel)
{
buildToCompare = buildToCompareModel;
NotifyDataChanged();
}
public BuildToCompareModel Get()
{
return buildToCompare;
}
public string AsJson()
{
var options = new JsonSerializerOptions
{
WriteIndented = true
};
options.Converters.Add(new JsonStringEnumConverter());
return JsonSerializer.Serialize(buildToCompare, options);
}
public bool LoadJson(string data)
{
try
{
var options = new JsonSerializerOptions
{
WriteIndented = true
};
options.Converters.Add(new JsonStringEnumConverter());
buildToCompare = JsonSerializer.Deserialize<BuildToCompareModel>(data, options)!;
// Must Hydrate because not loaded with Parts
HydratedLoadedJson();
NotifyDataChanged();
return true;
}
catch
{
return false;
}
}
public string BuildOrderAsYaml()
{
var stringBuilder = new StringBuilder();
var serializer = new Serializer();
stringBuilder.AppendLine(serializer.Serialize(buildToCompare));
var buildOrderText = stringBuilder.ToString();
return buildOrderText;
}
private event Action OnChange = default!;
private void NotifyDataChanged()
{
OnChange?.Invoke();
}
public void HydratedLoadedJson()
{
}
}