106 lines
4.8 KiB
C#
106 lines
4.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
using PkmnLibSharp.DynamicData;
|
|
using PkmnLibSharp.DynamicData.Libraries;
|
|
using PkmnLibSharp.FFI;
|
|
using PkmnLibSharp.StaticData;
|
|
using PkmnLibSharp.StaticData.Libraries;
|
|
|
|
namespace PkmnLibSharp.Utils
|
|
{
|
|
public class Resolver
|
|
{
|
|
public static Resolver Instance { get; set; } = new();
|
|
private static readonly Dictionary<FFIHandle, object> Instances = new();
|
|
|
|
protected static T GetOrCreateInstance<T>(FFIHandle handle)
|
|
{
|
|
if (!Instances.TryGetValue(handle, out var instance))
|
|
{
|
|
instance = typeof(T)
|
|
.GetConstructor(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null,
|
|
new[] { typeof(FFIHandle) }, null)
|
|
?.Invoke(new object[] { handle });
|
|
Instances.Add(handle, instance!);
|
|
}
|
|
|
|
return (T)instance!;
|
|
}
|
|
|
|
public virtual EffectParameter ResolveEffectParameter(FFIHandle handle) =>
|
|
GetOrCreateInstance<EffectParameter>(handle);
|
|
|
|
public virtual Ability ResolveAbility(FFIHandle handle) => GetOrCreateInstance<Ability>(handle);
|
|
public virtual Form ResolveForm(FFIHandle handle) => GetOrCreateInstance<Form>(handle);
|
|
|
|
public virtual StaticStatisticSet<T> ResolveStaticStatisticSet<T>(FFIHandle handle)
|
|
where T : struct, IConvertible =>
|
|
GetOrCreateInstance<StaticStatisticSet<T>>(handle);
|
|
|
|
public virtual StatisticSet<T> ResolveStatisticSet<T>(FFIHandle handle) where T : struct, IConvertible =>
|
|
GetOrCreateInstance<StatisticSet<T>>(handle);
|
|
|
|
public virtual LearnableMoves ResolveLearnableMoves(FFIHandle handle) =>
|
|
GetOrCreateInstance<LearnableMoves>(handle);
|
|
|
|
public virtual Item ResolveItem(FFIHandle handle) => GetOrCreateInstance<Item>(handle);
|
|
|
|
public virtual SecondaryEffect ResolveSecondaryEffect(FFIHandle handle) =>
|
|
GetOrCreateInstance<SecondaryEffect>(handle);
|
|
|
|
public virtual MoveData ResolveMoveData(FFIHandle handle) => GetOrCreateInstance<MoveData>(handle);
|
|
public virtual Nature ResolveNature(FFIHandle handle) => GetOrCreateInstance<Nature>(handle);
|
|
|
|
public virtual Species ResolveSpecies(FFIHandle handle) => GetOrCreateInstance<Species>(handle);
|
|
|
|
public virtual AbilityLibrary ResolveAbilityLibrary(FFIHandle handle) =>
|
|
GetOrCreateInstance<AbilityLibrary>(handle);
|
|
|
|
public virtual ItemLibrary ResolveItemLibrary(FFIHandle handle) => GetOrCreateInstance<ItemLibrary>(handle);
|
|
|
|
public virtual LookupGrowthRate ResolveLookupGrowthRate(FFIHandle ptr) =>
|
|
GetOrCreateInstance<LookupGrowthRate>(ptr);
|
|
|
|
public virtual GrowthRateLibrary ResolveGrowthRateLibrary(FFIHandle handle) =>
|
|
GetOrCreateInstance<GrowthRateLibrary>(handle);
|
|
|
|
public virtual MoveLibrary ResolveMoveLibrary(FFIHandle handle) => GetOrCreateInstance<MoveLibrary>(handle);
|
|
|
|
public virtual NatureLibrary ResolveNatureLibrary(FFIHandle handle) =>
|
|
GetOrCreateInstance<NatureLibrary>(handle);
|
|
|
|
public virtual SpeciesLibrary ResolveSpeciesLibrary(FFIHandle handle) =>
|
|
GetOrCreateInstance<SpeciesLibrary>(handle);
|
|
|
|
public virtual LibrarySettings ResolveLibrarySettings(FFIHandle handle) =>
|
|
GetOrCreateInstance<LibrarySettings>(handle);
|
|
|
|
public virtual TypeLibrary ResolveTypeLibrary(FFIHandle handle) => GetOrCreateInstance<TypeLibrary>(handle);
|
|
|
|
public virtual StaticData.Libraries.StaticData ResolveStaticData(FFIHandle handle) =>
|
|
GetOrCreateInstance<StaticData.Libraries.StaticData>(handle);
|
|
|
|
public virtual LearnedMove ResolveLearnedMove(FFIHandle resolve) => GetOrCreateInstance<LearnedMove>(resolve);
|
|
|
|
public virtual Gen7BattleStatCalculator ResolveGen7BattleStatCalculator(FFIHandle handle) =>
|
|
GetOrCreateInstance<Gen7BattleStatCalculator>(handle);
|
|
|
|
public virtual Gen7DamageLibrary ResolveGen7DamageLibrary(FFIHandle handle) =>
|
|
GetOrCreateInstance<Gen7DamageLibrary>(handle);
|
|
|
|
public virtual Gen7MiscLibrary ResolveGen7MiscLibrary(FFIHandle handle) =>
|
|
GetOrCreateInstance<Gen7MiscLibrary>(handle);
|
|
|
|
public virtual EmptyScriptResolver ResolveEmptyScriptResolver(FFIHandle handle) =>
|
|
GetOrCreateInstance<EmptyScriptResolver>(handle);
|
|
|
|
#if WASM
|
|
public virtual WasmScriptResolver ResolveWasmScriptResolver(FFIHandle handle) =>
|
|
GetOrCreateInstance<WasmScriptResolver>(handle);
|
|
#endif
|
|
public DynamicLibrary ResolveDynamicLibrary(FFIHandle resolve) => GetOrCreateInstance<DynamicLibrary>(resolve);
|
|
|
|
public Pokemon ResolvePokemon(FFIHandle resolve) => GetOrCreateInstance<Pokemon>(resolve);
|
|
}
|
|
} |