Initial set up for item use
This commit is contained in:
21
PkmnLib.Dataloader/CommonDataLoaderHelper.cs
Normal file
21
PkmnLib.Dataloader/CommonDataLoaderHelper.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using PkmnLib.Dataloader.Models;
|
||||
using PkmnLib.Static.Moves;
|
||||
using PkmnLib.Static.Utils;
|
||||
|
||||
namespace PkmnLib.Dataloader;
|
||||
|
||||
internal static class CommonDataLoaderHelper
|
||||
{
|
||||
internal static ISecondaryEffect? ParseEffect(this SerializedMoveEffect? effect)
|
||||
{
|
||||
if (effect == null)
|
||||
return null;
|
||||
var name = effect.Name;
|
||||
var chance = effect.Chance;
|
||||
var parameters = effect.Parameters?.ToDictionary(x => (StringKey)x.Key, x => x.Value.ToParameter()) ??
|
||||
new Dictionary<StringKey, object?>();
|
||||
return new SecondaryEffectImpl(chance, name, parameters);
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ using System.Text.Json;
|
||||
using PkmnLib.Dataloader.Models;
|
||||
using PkmnLib.Static;
|
||||
using PkmnLib.Static.Libraries;
|
||||
using PkmnLib.Static.Moves;
|
||||
using PkmnLib.Static.Utils;
|
||||
|
||||
namespace PkmnLib.Dataloader;
|
||||
@@ -27,20 +28,23 @@ public static class ItemDataLoader
|
||||
library.Add(i);
|
||||
return library;
|
||||
}
|
||||
|
||||
|
||||
// ReSharper disable once MemberCanBePrivate.Global
|
||||
public static Func<SerializedItem, StringKey, ItemCategory, BattleItemCategory, int,
|
||||
IEnumerable<StringKey>, IItem> ItemConstructor = (_, name, type, battleType, price, flags) =>
|
||||
{
|
||||
return new ItemImpl(name, type, battleType, price, flags);
|
||||
};
|
||||
IEnumerable<StringKey>, ISecondaryEffect?, ISecondaryEffect?,
|
||||
// ReSharper disable once FieldCanBeMadeReadOnly.Global
|
||||
IItem> ItemConstructor = (_, name, type, battleType, price, flags, effect, battleTriggerEffect) =>
|
||||
new ItemImpl(name, type, battleType, price, flags, effect, battleTriggerEffect);
|
||||
|
||||
private static IItem DeserializeItem(SerializedItem serialized)
|
||||
{
|
||||
if (!Enum.TryParse<ItemCategory>(serialized.ItemType, true, out var itemType))
|
||||
throw new InvalidDataException($"Item type {serialized.ItemType} is not valid for item {serialized.Name}.");
|
||||
Enum.TryParse(serialized.BattleType, true, out BattleItemCategory battleType);
|
||||
var effect = serialized.Effect?.ParseEffect();
|
||||
var battleTriggerEffect = serialized.BattleEffect?.ParseEffect();
|
||||
|
||||
return ItemConstructor(serialized, serialized.Name, itemType, battleType, serialized.Price,
|
||||
serialized.Flags.Select(x => (StringKey)x).ToImmutableHashSet());
|
||||
serialized.Flags.Select(x => (StringKey)x).ToImmutableHashSet(), effect, battleTriggerEffect);
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,8 @@ public class SerializedItem
|
||||
public string[] Flags { get; set; } = null!;
|
||||
public int Price { get; set; }
|
||||
public byte FlingPower { get; set; }
|
||||
public SerializedMoveEffect? Effect { get; set; }
|
||||
public SerializedMoveEffect? BattleEffect { get; set; }
|
||||
|
||||
[JsonExtensionData]
|
||||
public Dictionary<string, JsonElement>? ExtensionData { get; set; }
|
||||
|
||||
@@ -57,21 +57,11 @@ public static class MoveDataLoader
|
||||
throw new InvalidDataException($"Category {category} is not a valid category.");
|
||||
if (!Enum.TryParse<MoveTarget>(target, true, out var targetEnum))
|
||||
throw new InvalidDataException($"Target {target} is not a valid target.");
|
||||
var secondaryEffect = ParseEffect(effect);
|
||||
var secondaryEffect = effect.ParseEffect();
|
||||
|
||||
var move = MoveConstructor(serialized, serialized.Name, typeIdentifier, categoryEnum, power, accuracy, pp, targetEnum,
|
||||
priority, secondaryEffect, flags.Select(x => (StringKey)x).ToImmutableHashSet());
|
||||
return move;
|
||||
}
|
||||
|
||||
private static ISecondaryEffect? ParseEffect(SerializedMoveEffect? effect)
|
||||
{
|
||||
if (effect == null)
|
||||
return null;
|
||||
var name = effect.Name;
|
||||
var chance = effect.Chance;
|
||||
var parameters = effect.Parameters?.ToDictionary(x => (StringKey)x.Key, x => x.Value.ToParameter()) ??
|
||||
new Dictionary<StringKey, object?>();
|
||||
return new SecondaryEffectImpl(chance, name, parameters);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user