GameData, PickUp Mods
These are the modifications included in the Inventory System Package
The following scripts contain updated code that is already integrated the Inventory System Unity Package.
IMPORTANT:  You may get a compile error in your code when importing the InventorySystem Package due to inconsistencies between using the GameData variable:  score, sometimes the variable totalScore was used with the same meaning.  Fix the error:  I recommend using score / Score, instead of totalScore/TotalScore, because it is what is used in subsequent code for Project 3 - LevelManager.cs 
The error above may show up in PlayerStats.cs: Make the following change
private void UpdateDisplay()
    {
        scoreText.text = "Score: " + GameData.instanceRef.Score; //replace .TotalScore
        healthText.text = "Health: " + GameData.instanceRef.Health;
    }Class Pickup
updated Apr 10,2019
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//combines frontEnd UI and BackEnd 
public class PickUp : MonoBehaviour {
    public ItemInstance itemInstance;
    private int value;
    //read-only property
    public int Value
    {
        get { return value; }
    }
    private void Start()
    {
        this.value = itemInstance.item.value;
    }
    /// <summary>
    /// Adds the item to GameData Inventory
    /// Can be executed by button.onClick
    /// when added as a listener
    /// </summary>
    public void AddItem( ) //can be called onClick for a button
    {
        GameData.instanceRef.AddItem(this.itemInstance);
    }
}//end class PickUpGameData Changes:  
Updated Class GameData with CustomEvent and Inventory, AddItem(ItemInstance), BoostHealth( ), BoostExperience( )
IMPORTANT:  You may get a compile error in your code due to inconsistencies between using the GameData variable:  score, sometimes the variable totalScore was used with the same meaning.  Fix the error:  I recommend using score / Score, instead of totalScore/TotalScore, because it is what is used in subsequent code for Project 3 - LevelManager.cs 
GameData: Final Version 
updated Apr 3,2020
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
///4/3/2020
//Singleton - one and only 1 ever in existance
//global variable to allow easy access
public class GameData : MonoBehaviour
{
    /// static means it belongs to the Class, and not to an object instance of the class
    public UnityEvent onPlayerDataUpdate = new UnityEvent();
    public static GameData instanceRef;  ///Global variable 
    public Inventory inventory;//Scriptable Object
    private Dictionary<string, string> choiceData = new Dictionary<string, string>();
    /// <summary>
    /// Properties - provide read/write access to variables
    /// </summary>
    private int levelScore;
    private int score; //some versions use totalScore
    private int health;
    private int experience;
    private int lives;
    private int maxExperience = 100;
    public bool miniGameWinner = false;
    //Properties - Support Encapsulation - protect inner workings of our class
    public int Score //some versions use TotalScore
    {
        get { return score; }   //read only access
    }
    public int LevelScore
    {
        get { return levelScore; }
        set { levelScore = value; }
    }
    public int Lives
    {
        get { return lives; }
        set { lives = value; }
    }
    public int Experience
    {
        get { return experience; }   //read only access
    }
    public int Health
    {
        get { return health; }   //read only access
    }
    private void Awake()
    {
        health = 100; //initialize
        score = 0;
        if (instanceRef == null)
        {
            instanceRef = this; //point to itself
            DontDestroyOnLoad(this.gameObject);  //this will never be destroyed
        }
        else
        {
            Destroy(this.gameObject);
            Debug.Log("Duplicate GameData is Destroyed");
        }
    }
    /// <summary>
    /// Add the specified item.
    /// Overloaded method
    /// takes the ItemInstance item as input parameter
    /// </summary>
    /// <param name="item">Item.</param>
    /// 
    public void AddItem(ItemInstance item)
    {
        inventory.InsertItem(item);
        //inventory invokes onInventoryUpdate event
    }
    /// <summary>
    /// Add the specified value.
    /// Overloaded method
    /// takes the PickUp item's value as input parameter
    /// </summary>
    /// <param name="value">Value.</param>
    public void Add(int value)
    {
        score += value;
        levelScore += value;  //Make sure you have this line of code
        Debug.Log("Score is updated " + score);
        InvokePlayerDataUpdate();
    }
    public void BoostHealth(int value)
    {
        health += value;
        health = Mathf.Min(health, 100);
        Debug.Log("boosting health, new health " + health);
        InvokePlayerDataUpdate();
    }
    public void BoostExperience(int value)
    {
        experience += value;
        experience = Mathf.Min(experience, maxExperience);
        Debug.Log("boosting experience: " + experience);
        InvokePlayerDataUpdate();
    }
    //updated TakeDamage: 4/24/19
    public void TakeDamage(int value)
    {
        health -= value;
        if (health < 0) health = 0;  //makes sure health !< 0
        Debug.Log("Health is updated " + health);
        InvokePlayerDataUpdate();
    }
    public void InvokePlayerDataUpdate()
    {
        if (onPlayerDataUpdate != null)
        {
            onPlayerDataUpdate.Invoke();
        }
    }
    public void SaveChoice(string choiceKey, string choiceValue)
    {
        if (choiceData.ContainsKey(choiceKey))
        {
            choiceData[choiceKey] = choiceValue; //change stored value
            Debug.Log("Choice Changed" + choiceKey + " : " + choiceValue);
        }
        else
        {
            choiceData.Add(choiceKey, choiceValue); //adds key,value pair
            Debug.Log("Choice Data Created" + choiceKey + " : " + choiceValue);
        }
    }
    public string GetChoice(string choiceKey)
    {
        string choiceValue = "None";
        choiceData.TryGetValue(choiceKey, out choiceValue);
        Debug.Log("Choice Data Accessed" + choiceKey + " : " + choiceValue);
        return choiceValue;
    }
    //to restart entire game
    public void ResetGameData()
    {
        health = 100; //initialize
        score = 0;
        experience = 0;
        //inventory.inventory.Clear();
        miniGameWinner = false;
    }
    //to restart miniGame
    public void ResetMiniGameData()
    {
        health = 100; //initialize
        score = 0;
        levelScore = 0;
    }
} //end classLast updated
Was this helpful?
