public bool BuildItem(WarehouseBuildItemRequest item, bool removeExisting = false)
    {
        if (!this.HasGround(item.column, item.row) || this.HasOccupant(item.column, item.row) && !removeExisting)
        {
            return(false);
        }

        BaseItem newItem = null;

        if (item.boxType != null)
        {
            var prefabReference = this.File.GetPrefab <Box>();
            var newObject       = Instantiate(prefabReference, this.itemHolder.transform);
            newItem = newObject.GetComponent <Box>();
            (newItem as Box).boxType = item.boxType.Value;
        }
        else if (item.markerType != null)
        {
            var prefabReference = this.File.GetPrefab <Marker>();
            var newObject       = Instantiate(prefabReference, this.itemHolder.transform);
            newItem = newObject.GetComponent <Marker>();
            (newItem as Marker).markerType = item.markerType.Value;
        }
        else if (item.itemType != null)
        {
            var prefabReference = this.File.GetPrefab(Type.GetType(item.itemType));
            var newObject       = Instantiate(prefabReference, this.itemHolder.transform);
            newItem = newObject.GetComponent <BaseItem>();
        }

        if (newItem != null)
        {
            newItem.validation   = this;
            newItem.timeProvider = this.timeProvider;
            newItem.origin       = item;
            if (this.enableOccupantEvents)
            {
                newItem.ToggleInput(true);
                // newItem.OnMouseDownEvent.AddListener((owner) => this.OnOccupantSelectedEvent.Invoke(owner.parent as Ground, newItem));
                newItem.OnMouseUpEvent.AddListener((owner) => this.OnOccupantSelectedEvent.Invoke(owner.parent as Ground, newItem));
            }
            return(this.PlaceItem(newItem, item.column, item.row));
        }

        return(false);
    }
 public bool PlaceItem(Sprite sprite, int column, int row) =>
 this.BuildItem(WarehouseBuildItemRequest.FromSprite(sprite, column, row), true);