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
using System.Collections;using System.Collections.Generic;using UnityEngine;//combines frontEnd UI and BackEnd publicclassPickUp : MonoBehaviour {publicItemInstance itemInstance;privateint value;//read-only propertypublicintValue { get { return value; } }privatevoidStart() {this.value=itemInstance.item.value; }/// <summary>/// Adds the item to GameData Inventory/// Can be executed by button.onClick/// when added as a listener/// </summary>publicvoidAddItem( ) //can be called onClick for a button {GameData.instanceRef.AddItem(this.itemInstance); }}//end class PickUp
GameData 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 accesspublicclassGameData : MonoBehaviour{/// static means it belongs to the Class, and not to an object instance of the classpublicUnityEvent onPlayerDataUpdate =newUnityEvent();publicstaticGameData instanceRef; ///Global variable publicInventory inventory;//Scriptable ObjectprivateDictionary<string,string> choiceData =newDictionary<string,string>();/// <summary>/// Properties - provide read/write access to variables/// </summary>privateint levelScore;privateint score; //some versions use totalScoreprivateint health;privateint experience;privateint lives;privateint maxExperience =100;public bool miniGameWinner =false;//Properties - Support Encapsulation - protect inner workings of our classpublicint Score //some versions use TotalScore { get { return score; } //read only access }publicintLevelScore { get { return levelScore; } set { levelScore = value; } }publicintLives { get { return lives; } set { lives = value; } }publicintExperience { get { return experience; } //read only access }publicintHealth { get { return health; } //read only access }privatevoidAwake() { health =100; //initialize score =0;if (instanceRef ==null) { instanceRef =this; //point to itselfDontDestroyOnLoad(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>/// publicvoidAddItem(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>publicvoidAdd(int value) { score += value; levelScore += value; //Make sure you have this line of codeDebug.Log("Score is updated "+ score);InvokePlayerDataUpdate(); }publicvoidBoostHealth(int value) { health += value; health =Mathf.Min(health,100);Debug.Log("boosting health, new health "+ health);InvokePlayerDataUpdate(); }publicvoidBoostExperience(int value) { experience += value; experience =Mathf.Min(experience, maxExperience);Debug.Log("boosting experience: "+ experience);InvokePlayerDataUpdate(); }//updated TakeDamage: 4/24/19publicvoidTakeDamage(int value) { health -= value;if (health <0) health =0; //makes sure health !< 0Debug.Log("Health is updated "+ health);InvokePlayerDataUpdate(); }publicvoidInvokePlayerDataUpdate() {if (onPlayerDataUpdate !=null) {onPlayerDataUpdate.Invoke(); } }publicvoidSaveChoice(string choiceKey, string choiceValue) {if (choiceData.ContainsKey(choiceKey)) { choiceData[choiceKey] = choiceValue; //change stored valueDebug.Log("Choice Changed"+ choiceKey +" : "+ choiceValue); }else {choiceData.Add(choiceKey, choiceValue); //adds key,value pairDebug.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 gamepublicvoidResetGameData() { health =100; //initialize score =0; experience =0;//inventory.inventory.Clear(); miniGameWinner =false; }//to restart miniGamepublicvoidResetMiniGameData() { health =100; //initialize score =0; levelScore =0; }} //end class