Use fancy C# 8 Nullable Reference pattern.
This commit is contained in:
@@ -59,7 +59,7 @@ namespace PkmnLibSharp.Library
|
||||
{
|
||||
var p = IntPtr.Zero;
|
||||
Creaturelib.Generated.EffectParameter.AsString(Ptr, ref p).Assert();
|
||||
return p.PtrString();
|
||||
return p.PtrString()!;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -10,17 +10,17 @@ namespace PkmnLibSharp.Library
|
||||
{
|
||||
public class Forme : PointerWrapper
|
||||
{
|
||||
private ReadOnlyArray<string> _abilities;
|
||||
private ReadOnlyArray<string> _hiddenAbilities;
|
||||
private LearnableMoves _moves;
|
||||
private string _name;
|
||||
private ReadOnlyArray<byte> _types;
|
||||
private ReadOnlyArray<string>? _abilities;
|
||||
private ReadOnlyArray<string>? _hiddenAbilities;
|
||||
private LearnableMoves? _moves;
|
||||
private string? _name;
|
||||
private ReadOnlyArray<byte>? _types;
|
||||
|
||||
internal Forme(IntPtr parent) : base(parent)
|
||||
{
|
||||
}
|
||||
|
||||
public string Name => _name ??= SpeciesVariant.GetName(Ptr).PtrString();
|
||||
public string Name => _name ??= SpeciesVariant.GetName(Ptr).PtrString()!;
|
||||
public float Height => SpeciesVariant.GetHeight(Ptr);
|
||||
public float Weight => SpeciesVariant.GetWeight(Ptr);
|
||||
public float BaseExperience => SpeciesVariant.GetBaseExperience(Ptr);
|
||||
@@ -66,7 +66,7 @@ namespace PkmnLibSharp.Library
|
||||
{
|
||||
var s = IntPtr.Zero;
|
||||
SpeciesVariant.GetTalent(Ptr, MarshalHelper.False, i, ref s).Assert();
|
||||
abilities[i] = s.PtrString();
|
||||
abilities[i] = s.PtrString()!;
|
||||
}
|
||||
|
||||
_abilities = abilities.ToReadOnly();
|
||||
@@ -87,7 +87,7 @@ namespace PkmnLibSharp.Library
|
||||
{
|
||||
var s = IntPtr.Zero;
|
||||
SpeciesVariant.GetTalent(Ptr, MarshalHelper.True, i, ref s).Assert();
|
||||
abilities[i] = s.PtrString();
|
||||
abilities[i] = s.PtrString()!;
|
||||
}
|
||||
|
||||
_hiddenAbilities = abilities.ToReadOnly();
|
||||
@@ -101,9 +101,10 @@ namespace PkmnLibSharp.Library
|
||||
{
|
||||
if (_moves != null) return _moves;
|
||||
var movesPtr = SpeciesVariant.GetLearnableAttacks(Ptr);
|
||||
if (!TryResolvePointer(movesPtr, out _moves)) _moves = new LearnableMoves(movesPtr);
|
||||
if (!TryResolvePointer(movesPtr, out _moves))
|
||||
_moves = new LearnableMoves(movesPtr);
|
||||
|
||||
return _moves;
|
||||
return _moves!;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +115,8 @@ namespace PkmnLibSharp.Library
|
||||
|
||||
public Forme(string name, float height, float weight, uint baseExperience, byte[] types,
|
||||
ushort baseHealth, ushort baseAttack, ushort baseDefense, ushort baseSpecialAttack,
|
||||
ushort baseSpecialDefense, ushort baseSpeed, string[] abilities, string[] hiddenAbilities,
|
||||
ushort baseSpecialDefense, ushort baseSpeed, IReadOnlyCollection<string> abilities,
|
||||
IReadOnlyCollection<string> hiddenAbilities,
|
||||
LearnableMoves moves)
|
||||
{
|
||||
var abilitiesConverted = abilities.Select(x => x.ToPtr()).ToArray();
|
||||
@@ -123,8 +125,8 @@ namespace PkmnLibSharp.Library
|
||||
var hab = hiddenAbilitiesConverted.ArrayPtr();
|
||||
var ptr = SpeciesVariant.Construct(name.ToPtr(), height, weight, baseExperience, types.ArrayPtr(),
|
||||
(ulong) types.Length, baseHealth, baseAttack, baseDefense, baseSpecialAttack,
|
||||
baseSpecialDefense, baseSpeed, ab, (ulong) abilities.Length, hab,
|
||||
(ulong) hiddenAbilities.Length, moves.Ptr);
|
||||
baseSpecialDefense, baseSpeed, ab, (ulong) abilities.Count, hab,
|
||||
(ulong) hiddenAbilities.Count, moves.Ptr);
|
||||
var f = new Forme(ptr);
|
||||
foreach (var intPtr in abilitiesConverted)
|
||||
Marshal.FreeHGlobal(intPtr);
|
||||
|
||||
@@ -6,13 +6,13 @@ namespace PkmnLibSharp.Library.Items
|
||||
{
|
||||
public class Item : PointerWrapper
|
||||
{
|
||||
private string _name;
|
||||
private string? _name;
|
||||
|
||||
internal Item(IntPtr ptr) : base(ptr)
|
||||
{
|
||||
}
|
||||
|
||||
public string Name => _name ??= Creaturelib.Generated.Item.GetName(Ptr).PtrString();
|
||||
public string Name => _name ??= Creaturelib.Generated.Item.GetName(Ptr).PtrString()!;
|
||||
public ItemCategory Category => (ItemCategory) Creaturelib.Generated.Item.GetCategory(Ptr);
|
||||
|
||||
public BattleItemCategory BattleCategory =>
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace PkmnLibSharp.Library.Items
|
||||
_cache.Remove(key);
|
||||
}
|
||||
|
||||
public bool TryGet(string key, out Item item)
|
||||
public bool TryGet(string key, out Item? item)
|
||||
{
|
||||
if (_cache.TryGetValue(key, out item))
|
||||
return true;
|
||||
@@ -41,7 +41,7 @@ namespace PkmnLibSharp.Library.Items
|
||||
return false;
|
||||
if (TryResolvePointer(ptr, out item))
|
||||
{
|
||||
_cache.Add(key, item);
|
||||
_cache.Add(key, item!);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -56,10 +56,10 @@ namespace PkmnLibSharp.Library.Items
|
||||
return item;
|
||||
var ptr = IntPtr.Zero;
|
||||
Creaturelib.Generated.ItemLibrary.Get(Ptr, key.ToPtr(), ref ptr).Assert();
|
||||
if (TryResolvePointer(ptr, out item))
|
||||
if (TryResolvePointer(ptr, out Item? i))
|
||||
{
|
||||
_cache.Add(key, item);
|
||||
return item;
|
||||
_cache.Add(key, i!);
|
||||
return i!;
|
||||
}
|
||||
|
||||
item = new Item(ptr);
|
||||
|
||||
@@ -8,14 +8,14 @@ namespace PkmnLibSharp.Library.Moves
|
||||
{
|
||||
public class MoveData : PointerWrapper
|
||||
{
|
||||
private string _name;
|
||||
private string _secondaryEffectName;
|
||||
private string? _name;
|
||||
private string? _secondaryEffectName;
|
||||
|
||||
internal MoveData(IntPtr ptr) : base(ptr)
|
||||
{
|
||||
}
|
||||
|
||||
public string Name => _name ??= AttackData.GetName(Ptr).PtrString();
|
||||
public string Name => _name ??= AttackData.GetName(Ptr).PtrString()!;
|
||||
public byte Type => AttackData.GetType(Ptr);
|
||||
public MoveCategory Category => (MoveCategory) AttackData.GetCategory(Ptr);
|
||||
public byte BasePower => AttackData.GetBasePower(Ptr);
|
||||
@@ -27,7 +27,7 @@ namespace PkmnLibSharp.Library.Moves
|
||||
public float SecondaryEffectChance => AttackData.GetSecondaryEffectChance(Ptr);
|
||||
|
||||
public string SecondaryEffectName =>
|
||||
_secondaryEffectName ??= AttackData.GetSecondaryEffectName(Ptr).PtrString();
|
||||
_secondaryEffectName ??= AttackData.GetSecondaryEffectName(Ptr).PtrString()!;
|
||||
|
||||
public bool HasFlag(string s)
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace PkmnLibSharp.Library.Moves
|
||||
_cache.Remove(key);
|
||||
}
|
||||
|
||||
public bool TryGet(string key, out MoveData move)
|
||||
public bool TryGet(string key, out MoveData? move)
|
||||
{
|
||||
if (_cache.TryGetValue(key, out move))
|
||||
return true;
|
||||
@@ -37,7 +37,7 @@ namespace PkmnLibSharp.Library.Moves
|
||||
return false;
|
||||
if (TryResolvePointer(ptr, out move))
|
||||
{
|
||||
_cache.Add(key, move);
|
||||
_cache.Add(key, move!);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -52,10 +52,10 @@ namespace PkmnLibSharp.Library.Moves
|
||||
return move;
|
||||
var ptr = IntPtr.Zero;
|
||||
AttackLibrary.Get(Ptr, key.ToPtr(), ref ptr).Assert();
|
||||
if (TryResolvePointer(ptr, out move))
|
||||
if (TryResolvePointer(ptr, out MoveData? m))
|
||||
{
|
||||
_cache.Add(key, move);
|
||||
return move;
|
||||
_cache.Add(key, m!);
|
||||
return m!;
|
||||
}
|
||||
|
||||
move = new MoveData(ptr);
|
||||
|
||||
@@ -33,11 +33,11 @@ namespace PkmnLibSharp.Library
|
||||
return nature;
|
||||
var ptr = IntPtr.Zero;
|
||||
Pkmnlib.Generated.NatureLibrary.GetNatureByName(Ptr, name.ToPtr(), ref ptr).Assert();
|
||||
if (TryResolvePointer(ptr, out nature))
|
||||
if (TryResolvePointer(ptr, out Nature? n))
|
||||
{
|
||||
_cache.Add(name, nature);
|
||||
_cache.Add(name, n!);
|
||||
_natureNames.Add(ptr, name);
|
||||
return nature;
|
||||
return n!;
|
||||
}
|
||||
|
||||
nature = new Nature(ptr);
|
||||
@@ -52,14 +52,14 @@ namespace PkmnLibSharp.Library
|
||||
return s;
|
||||
var ptr = IntPtr.Zero;
|
||||
Pkmnlib.Generated.NatureLibrary.GetNatureName(Ptr, nature.Ptr, ref ptr).Assert();
|
||||
return ptr.PtrString();
|
||||
return ptr.PtrString()!;
|
||||
}
|
||||
|
||||
public string GetRandomNatureName(Random random)
|
||||
{
|
||||
IntPtr val = IntPtr.Zero;
|
||||
Pkmnlib.Generated.NatureLibrary.GetRandomNatureName(Ptr, random.Ptr, ref val).Assert();
|
||||
return val.PtrString();
|
||||
return val.PtrString()!;
|
||||
}
|
||||
|
||||
protected override void DeletePtr()
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace PkmnLibSharp.Library
|
||||
{
|
||||
public class PokemonLibrary : PointerWrapper
|
||||
{
|
||||
private LibrarySettings _settings;
|
||||
private LibrarySettings? _settings;
|
||||
|
||||
public LibrarySettings Settings
|
||||
{
|
||||
@@ -18,13 +18,13 @@ namespace PkmnLibSharp.Library
|
||||
if (_settings != null) return _settings;
|
||||
var ptr = DataLibrary.GetSettings(Ptr);
|
||||
if (TryResolvePointer(ptr, out _settings))
|
||||
return _settings;
|
||||
return _settings!;
|
||||
_settings = new LibrarySettings(ptr);
|
||||
return _settings;
|
||||
}
|
||||
}
|
||||
|
||||
private SpeciesLibrary _species;
|
||||
private SpeciesLibrary? _species;
|
||||
|
||||
public SpeciesLibrary SpeciesLibrary
|
||||
{
|
||||
@@ -33,13 +33,13 @@ namespace PkmnLibSharp.Library
|
||||
if (_species != null) return _species;
|
||||
var ptr = DataLibrary.GetSpeciesLibrary(Ptr);
|
||||
if (TryResolvePointer(ptr, out _species))
|
||||
return _species;
|
||||
return _species!;
|
||||
_species = new SpeciesLibrary(ptr);
|
||||
return _species;
|
||||
}
|
||||
}
|
||||
|
||||
private MoveLibrary _moves;
|
||||
private MoveLibrary? _moves;
|
||||
|
||||
public MoveLibrary MoveLibrary
|
||||
{
|
||||
@@ -48,13 +48,13 @@ namespace PkmnLibSharp.Library
|
||||
if (_moves != null) return _moves;
|
||||
var ptr = DataLibrary.GetAttackLibrary(Ptr);
|
||||
if (TryResolvePointer(ptr, out _moves))
|
||||
return _moves;
|
||||
return _moves!;
|
||||
_moves = new MoveLibrary(ptr);
|
||||
return _moves;
|
||||
}
|
||||
}
|
||||
|
||||
private ItemLibrary _items;
|
||||
private ItemLibrary? _items;
|
||||
|
||||
public ItemLibrary ItemLibrary
|
||||
{
|
||||
@@ -63,13 +63,13 @@ namespace PkmnLibSharp.Library
|
||||
if (_items != null) return _items;
|
||||
var ptr = DataLibrary.GetItemLibrary(Ptr);
|
||||
if (TryResolvePointer(ptr, out _items))
|
||||
return _items;
|
||||
return _items!;
|
||||
_items = new ItemLibrary(ptr);
|
||||
return _items;
|
||||
}
|
||||
}
|
||||
|
||||
private GrowthRateLibrary _growthRateLibrary;
|
||||
private GrowthRateLibrary? _growthRateLibrary;
|
||||
|
||||
public GrowthRateLibrary GrowthRateLibrary
|
||||
{
|
||||
@@ -78,13 +78,13 @@ namespace PkmnLibSharp.Library
|
||||
if (_growthRateLibrary != null) return _growthRateLibrary;
|
||||
var ptr = DataLibrary.GetGrowthRates(Ptr);
|
||||
if (TryResolvePointer(ptr, out _growthRateLibrary))
|
||||
return _growthRateLibrary;
|
||||
return _growthRateLibrary!;
|
||||
_growthRateLibrary = new GrowthRateLibrary(ptr);
|
||||
return _growthRateLibrary;
|
||||
}
|
||||
}
|
||||
|
||||
private TypeLibrary _typeLibrary;
|
||||
private TypeLibrary? _typeLibrary;
|
||||
|
||||
public TypeLibrary TypeLibrary
|
||||
{
|
||||
@@ -93,13 +93,13 @@ namespace PkmnLibSharp.Library
|
||||
if (_typeLibrary != null) return _typeLibrary;
|
||||
var ptr = DataLibrary.GetTypeLibrary(Ptr);
|
||||
if (TryResolvePointer(ptr, out _typeLibrary))
|
||||
return _typeLibrary;
|
||||
return _typeLibrary!;
|
||||
_typeLibrary = new TypeLibrary(ptr);
|
||||
return _typeLibrary;
|
||||
}
|
||||
}
|
||||
|
||||
private NatureLibrary _natureLibrary;
|
||||
private NatureLibrary? _natureLibrary;
|
||||
|
||||
public NatureLibrary NatureLibrary
|
||||
{
|
||||
@@ -108,7 +108,7 @@ namespace PkmnLibSharp.Library
|
||||
if (_natureLibrary != null) return _natureLibrary;
|
||||
var ptr = Pkmnlib.Generated.PokemonLibrary.GetNatureLibrary(Ptr);
|
||||
if (TryResolvePointer(ptr, out _natureLibrary))
|
||||
return _natureLibrary;
|
||||
return _natureLibrary!;
|
||||
_natureLibrary = new NatureLibrary(ptr);
|
||||
return _natureLibrary;
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@ namespace PkmnLibSharp.Library
|
||||
{
|
||||
public class Species : PointerWrapper
|
||||
{
|
||||
private string _name;
|
||||
private string _growthRate;
|
||||
private string? _name;
|
||||
private string? _growthRate;
|
||||
|
||||
private readonly Dictionary<string, Forme> _formes =
|
||||
new Dictionary<string, Forme>(StringComparer.InvariantCultureIgnoreCase);
|
||||
@@ -20,15 +20,15 @@ namespace PkmnLibSharp.Library
|
||||
public ushort Id => CreatureSpecies.GetId(Ptr);
|
||||
public float GenderRate => CreatureSpecies.GetGenderRate(Ptr);
|
||||
public byte CaptureRate => CreatureSpecies.GetCaptureRate(Ptr);
|
||||
public string Name => _name ??= CreatureSpecies.GetName(Ptr).PtrString();
|
||||
public string GrowthRate => _growthRate ??= CreatureSpecies.GetGrowthRate(Ptr).PtrString();
|
||||
public string Name => _name ??= CreatureSpecies.GetName(Ptr).PtrString()!;
|
||||
public string GrowthRate => _growthRate ??= CreatureSpecies.GetGrowthRate(Ptr).PtrString()!;
|
||||
|
||||
public bool HasForme(string s)
|
||||
{
|
||||
return CreatureSpecies.HasVariant(Ptr, s.ToPtr()) == MarshalHelper.True;
|
||||
}
|
||||
|
||||
public bool TryGetForme(string s, out Forme forme)
|
||||
public bool TryGetForme(string s, out Forme? forme)
|
||||
{
|
||||
if (_formes.TryGetValue(s, out forme))
|
||||
return true;
|
||||
@@ -37,7 +37,7 @@ namespace PkmnLibSharp.Library
|
||||
{
|
||||
if (TryResolvePointer(ptr, out forme))
|
||||
{
|
||||
_formes.Add(s, forme);
|
||||
_formes.Add(s, forme!);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -55,10 +55,10 @@ namespace PkmnLibSharp.Library
|
||||
return forme;
|
||||
var ptr = IntPtr.Zero;
|
||||
CreatureSpecies.GetVariant(ref ptr, Ptr, s.ToPtr()).Assert();
|
||||
if (TryResolvePointer(ptr, out forme))
|
||||
if (TryResolvePointer(ptr, out Forme? f))
|
||||
{
|
||||
_formes.Add(s, forme);
|
||||
return forme;
|
||||
_formes.Add(s, f!);
|
||||
return f!;
|
||||
}
|
||||
forme = new Forme(ptr);
|
||||
_formes.Add(s, forme);
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace PkmnLibSharp.Library
|
||||
_cache.Remove(key);
|
||||
}
|
||||
|
||||
public bool TryGet(string key, out Species species)
|
||||
public bool TryGet(string key, out Species? species)
|
||||
{
|
||||
if (_cache.TryGetValue(key, out species))
|
||||
return true;
|
||||
@@ -30,7 +30,7 @@ namespace PkmnLibSharp.Library
|
||||
return false;
|
||||
if (TryResolvePointer(ptr, out species))
|
||||
{
|
||||
_cache.Add(key, species);
|
||||
_cache.Add(key, species!);
|
||||
return true;
|
||||
}
|
||||
species = new Species(ptr);
|
||||
@@ -44,10 +44,10 @@ namespace PkmnLibSharp.Library
|
||||
return species;
|
||||
var ptr = IntPtr.Zero;
|
||||
Creaturelib.Generated.SpeciesLibrary.Get(Ptr, key.ToPtr(), ref ptr).Assert();
|
||||
if (TryResolvePointer(ptr, out species))
|
||||
if (TryResolvePointer(ptr, out Species? s))
|
||||
{
|
||||
_cache.Add(key, species);
|
||||
return species;
|
||||
_cache.Add(key, s!);
|
||||
return s!;
|
||||
}
|
||||
species = new Species(ptr);
|
||||
_cache.Add(key, species);
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace PkmnLibSharp.Library
|
||||
|
||||
var ptr = IntPtr.Zero;
|
||||
Creaturelib.Generated.TypeLibrary.GetTypeName(ref ptr, Ptr, typeId).Assert();
|
||||
var s = ptr.PtrString();
|
||||
var s = ptr.PtrString()!;
|
||||
_cache[s] = typeId;
|
||||
return s;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user