Skip to content

Adding a read only item directly crashes AddEntry on inventory #17

@ashblue

Description

@ashblue

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingreleased

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions