Calling a script like this with ItemEntryData causes an error when adding an item.
public class MyInventory {
public InventoryHelper inventory;
public ItemEntryData item;
void Awake () {
inventory.Add(item);
}
}
The quick workaround is as follows for now.
public class MyInventory {
public InventoryHelper inventory;
public ItemEntryData item;
void Awake () {
inventory.Add(item.Definition, item.Quantity);
}
}
If you want to fix this and submit a PR. The issue is this line in InventoryInstance.cs
public IItemEntryReadOnly AddEntry(IItemEntryReadOnly entry) {
if (entry == null) return null;
// Unique items and items without existing quantities can be added directly
if (entry.Definition.Unique || !Has(entry.Definition)) {
// ### as IItemEntry ### is causing the issue
AddEntry(entry as IItemEntry);
entry.UpdateTimeLogs();
return entry;
}
return Add(entry.Definition, entry.Quantity);
It needs to handle read only implementations separate from live item entry instances. A test should be included.
public IItemEntryReadOnly AddEntry(IItemEntryReadOnly entry) {
if (entry == null) return null;
// Unique items and items without existing quantities can be added directly
if ((entry.Definition.Unique || !Has(entry.Definition)) && entry is IItemEntry) {
AddEntry(entry as IItemEntry);
entry.UpdateTimeLogs();
return entry;
}
return Add(entry.Definition, entry.Quantity);
Error log.
NullReferenceException: Object reference not set to an instance of an object
CleverCrow.Fluid.ElasticInventory.InventoryInstance.AddEntry (CleverCrow.Fluid.ElasticInventory.IItemEntry entry) (at ./Library/PackageCache/com.fluid.elastic-inventory@1.0.1/Runtime/Inventory/InventoryInstance.cs:72)
CleverCrow.Fluid.ElasticInventory.InventoryInstance.AddEntry (CleverCrow.Fluid.ElasticInventory.IItemEntryReadOnly entry) (at ./Library/PackageCache/com.fluid.elastic-inventory@1.0.1/Runtime/Inventory/InventoryInstance.cs:63)
CleverCrow.SpacePirateRebellion.Exploration.SkillChallengeDefinition.OnActivate (CleverCrow.SpacePirateRebellion.Exploration.ITileRuntime tile, CleverCrow.SpacePirateRebellion.Exploration.IPlayerExploration target) (at Assets/Game/Scripts/Exploration/Tiles/SkillChallengeDefinition.cs:111)
CleverCrow.SpacePirateRebellion.Exploration.TileDefinitionBase.Activate (CleverCrow.SpacePirateRebellion.Exploration.ITileRuntime tile, CleverCrow.SpacePirateRebellion.Exploration.IPlayerExploration target) (at Assets/Game/Scripts/Exploration/Tiles/TileDefinitionBase.cs:15)
CleverCrow.SpacePirateRebellion.Exploration.TileRuntime.Activate (CleverCrow.SpacePirateRebellion.Exploration.IPlayerExploration player) (at Assets/Game/Scripts/Exploration/Tiles/TileRuntime.cs:21)
CleverCrow.SpacePirateRebellion.Exploration.ExplorationController+<PlayLoop>d__16.MoveNext () (at Assets/Game/Scripts/Exploration/ExplorationController.cs:69)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <6b66e7caaeb045048a0fbc11f111e6fa>:0)
Calling a script like this with ItemEntryData causes an error when adding an item.
The quick workaround is as follows for now.
If you want to fix this and submit a PR. The issue is this line in
InventoryInstance.cs
It needs to handle read only implementations separate from live item entry instances. A test should be included.
Error log.