[Solved] Make inventory that receives purchased items from the shop system

Introduction

Inventory management is an important part of any business. It is essential to keep track of the items that are purchased from the shop system in order to ensure that the business is running efficiently and that the right items are being purchased. This article will discuss how to create an inventory system that receives purchased items from the shop system. It will cover the steps needed to set up the system, the benefits of having an inventory system, and how to maintain the system. Finally, it will provide some tips on how to make the most of the inventory system.

Solution

You can use events to make your scripts “communicate” independently.

First you need the gameevents. Make sure you have the script on a gameobject in your scene:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameEvents : MonoBehaviour
{
    public static GameEvents gameEvents;

    private void Awake()
    {
        gameEvents = this;
    }

    public event Action<Item> onItemPurchase;

    public void ItemPurchaseMade(Item item)
    {
        if(onItemPurchase != null)
        {
            onItemPurchase(item);
        }
    }
}

Then include the trigger in your buy method:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ShopManager : MonoBehaviour
{

    public int[,] shopItems = new int[9, 9];
    public float coins;
    public Text CoinsTXT;


    void Start()
    {
        CoinsTXT.text = "" + coins.ToString();

        //ID's
        shopItems[1, 1] = 1;
        shopItems[1, 2] = 2;
        shopItems[1, 3] = 3;
        shopItems[1, 4] = 4;
        shopItems[1, 5] = 5;
        shopItems[1, 6] = 6;
        shopItems[1, 7] = 7;
        shopItems[1, 8] = 8;

        //Price
        shopItems[2, 1] = 10;
        shopItems[2, 2] = 20;
        shopItems[2, 3] = 30;
        shopItems[2, 4] = 40;
        shopItems[2, 5] = 50;
        shopItems[2, 6] = 65;
        shopItems[2, 7] = 110;
        shopItems[2, 8] = 150;

    }


    public void Buy()
    {
        GameObject ButtonRef = GameObject.FindGameObjectWithTag("Event").GetComponent<EventSystem>().currentSelectedGameObject;

        if (coins >= shopItems[2, ButtonRef.GetComponent<ButtonInfo>().ItemID])
        {
            coins -= shopItems[2, ButtonRef.GetComponent<ButtonInfo>().ItemID];
            CoinsTXT.text = "Coins:" + coins.ToString();

            Item yourItem = Item() //get your Item from ID

            GameEvents.gameEvents.ItemPurchaseMade(yourItem);
        }


    }
}

Then listen to the event from your inventory class:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Inventory {

    private List<Item> itemList;

    public Inventory()
    {

        GameEvents.gameEvents.onItemPurchase += AddItem;

        itemList = new List<Item>();

        Debug.Log("Inventory");
    }

    public void AddItem(Item item)
    {
        itemList.Add(item);
    }
}

It is unclear where you get the item by their ids from. That is why I left that part out. As an alternative, you could pass the itemId though the events and get the item in the inventory class.

10

solved Make inventory that receives purchased items from the shop system