Code modifications that must be manually included into PlayerController in order for the Inventory System logic to be included in the MiniGame logic.
The Video below shows configurations that are required for integrating the Inventory System with the MiniGame.
IMPORTANT - You may need to download updated Inventory System Files: If you have InventoryDisplay behavior as shown at the end of this video where each diamond occupies a separate inventory slot - then download and install this package with updated Inventory System Files: You may need to re-attach InventoryDisplay.cs to the InventoryDisplay Prefab
Code Updated Apr 13, 2019
Updated Code Inventory System Code Files - Due to a change in the way the scriptableObjects are attached to the PickUp prefabs, the Inventory System files were changed so that the InventoryDisplay's Dictionary has been changed from Dictionary< ItemInstance, int> , where prior versions were able to recognize that Scriptable Object ItemInstances of the same type: IE: Gem.Sapphire were all identical, meaning they had the same memory-address. To fix this issue, a new field had to be added to the Item class: public string instanceType, where this must be set in the constructor for the child classes.
Updated code for PlayerController
Note: There will be additional modifications, not included here, which include UnityEvents used in LevelManager and Collisions with Water, Exit, and AudioClips
Added: GameData.InstanceRef.AddItem( item.itemInstance ), so that we add the item to the GameData inventory.
Modified: Code when gameObject has tag 'Hazard', to incorporate logic for gameObjects with Hazard Component (has no ItemInstance ) instead of using the PickUp Component on Hazard Items.
Code - PlayerController.cs - For Inventory System
Updated Apr 13, 2019
using System.Collections;using System.Collections.Generic;using UnityEngine;publicclassPlayerController : MonoBehaviour {publicenumHeroState { idle, walk, jump, dead }privateRigidbody2D rb2D; //declare the variablepublicfloat forceX =50f; //this is probably too smallprivate bool facingRight;public bool grounded; //tracks if player is touching groundprivate bool jump; //has jump key (spacebar been pressed - last)publicTransform groundCheck; //set in inspector, (add child to player - empty gameObject at player's feet)publicLayerMask groundLayer; //set in inspectorpublicfloat groundCheckRadius =0.2f; //modify as neededpublicfloat jumpForce =8f; //modify as neededprivateAnimator animator;// Use this for initializationvoidStart () {rb2D =GetComponent< Rigidbody2D >(); ///we made the connection with the componentfacingRight =true;animator =GetComponent<Animator>();animator.SetInteger("HeroState",(int) HeroState.idle);}//Fixed Update is called at regular time intervals - use with Physics2DvoidFixedUpdate () {float inputX =Input.GetAxis("Horizontal"); //-1, 0, 1 bool isWalking =Mathf.Abs(inputX) >0; grounded =Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer); bool jumpPressed =Input.GetButtonDown("Jump"); //spacebar was last key pressedif (jumpPressed) { jump =true; }else { jump =false; }if ( isWalking){if( inputX >0&&!facingRight){Flip(); }elseif(inputX <0&& facingRight){Flip(); }rb2D.velocity=newVector2(0,rb2D.velocity.y);rb2D.AddForce(newVector2(inputX * forceX ,0));animator.SetInteger("HeroState", (int)HeroState.walk); } //end if isWalkingelse {animator.SetInteger("HeroState", (int)HeroState.idle); } //end elseif( jump && grounded) {animator.SetInteger("HeroState", (int)HeroState.jump);rb2D.velocity=newVector2(rb2D.velocity.x,0); //zero out velocity.y, maintain velocity.xrb2D.AddForce(newVector2(0f, jumpForce),ForceMode2D.Impulse); //add force as impulse }} //end Fixed UPdate/// <summary>/// THIS IS THE EVENT that starts the chain reaction of events/// </summary>/// <param name="collision">Collision.</param>//Customize to your game needsprivatevoidOnTriggerEnter2D(Collider2D collision) {if (collision.CompareTag("Collectible")) {//update scorePickUp item =collision.GetComponent<PickUp>();GameData.instanceRef.Add(item.Value); //points for each specific item's value//ADD THIS NEW CODE FOR INVENTORY SYSTEMGameData.instanceRef.AddItem(item.itemInstance); //points for each specific item's valueDebug.Log("Hit collectible");Destroy(collision.gameObject); }elseif (collision.CompareTag("Hazard")) {//decrease health//what type of object has tag "Hazard"//ADD THIS NEW CODE FOR INVENTORY SYSTEM - HAZARD COMPONENTHazard hazardItem =collision.GetComponent<Hazard>();if (hazardItem !=null) {GameData.instanceRef.TakeDamage(hazardItem.Value); }else {Debug.Log("Collided with a different type Hazard");//TODO add code for Hazard-type itemsPickUp item =collision.GetComponent<PickUp>();GameData.instanceRef.TakeDamage(item.Value); }Destroy(collision.gameObject); }else {Debug.Log("Hit Something Else"); } } //end functionprivatevoidFlip(){ facingRight =!facingRight; //toggle this valueVector3 theScale =transform.localScale;theScale.x*=-1; //we have changed the valuetransform.localScale= theScale;}} //end Class