Done it so the items from the inventory now get removed when used instead of one item never being able to be removed
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Fill out your copyright notice in the Description page of Project Settings.
 | |
| 
 | |
| 
 | |
| #include "InventoryComponent.h"
 | |
| #include "Items/BaseItem.h"
 | |
| #include "the_twilight_abyss/PlayerTemp/TempCharacter.h"
 | |
| 
 | |
| 
 | |
| // Sets default values for this component's properties
 | |
| UInventoryComponent::UInventoryComponent()
 | |
| {
 | |
| 	// Set this component to be initialized when the game starts, and to be ticked every frame.  You can turn these features
 | |
| 	// off to improve performance if you don't need them.
 | |
| 	PrimaryComponentTick.bCanEverTick = true;
 | |
| 
 | |
| 	MaxItemSlots = 10;
 | |
| }
 | |
| 
 | |
| 
 | |
| // Called when the game starts
 | |
| void UInventoryComponent::BeginPlay()
 | |
| {
 | |
| 	Super::BeginPlay();
 | |
| 
 | |
| 	//activates the AddItem function for every DefaultItem that inherits BaseItem
 | |
| 	for(auto & BaseItem : DefaultItems)
 | |
| 	{
 | |
| 		AddItem(BaseItem);
 | |
| 	}												
 | |
| }		
 | |
| 																											
 | |
| bool UInventoryComponent::AddItem(class UBaseItem* BaseItem)
 | |
| {
 | |
| 	//if the items is over the maxinventoryslots then it wont add the item
 | |
| 	if (Items.Num() >= MaxItemSlots || !BaseItem)
 | |
| 	{
 | |
| 		UE_LOG(LogTemp, Display, TEXT("THERE ARE MORE ITEMS THAN THE INVENTORY SLOTS"));
 | |
| 		return false;
 | |
| 	}
 | |
| 	BaseItem->StoredItems = this;
 | |
| 	BaseItem->World = GetWorld();
 | |
| 	Items.Add(BaseItem);
 | |
| 	UE_LOG(LogTemp, Display, TEXT("ITEM HAS BEEN ADDED TO INVENTORY"));
 | |
| 	//log the itemid
 | |
| 
 | |
| 	//Refreshes the inventory
 | |
| 	OnInventoryUpdated.Broadcast();
 | |
| 
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| // remove only gets called once on the same item
 | |
| bool UInventoryComponent::Remove(class UBaseItem* BaseItem)
 | |
| {
 | |
| 	if(BaseItem)
 | |
| 	{
 | |
| 		UE_LOG(LogTemp, Display, TEXT("ItEM HAS BEEN REMOVED"));
 | |
| 		BaseItem->StoredItems = nullptr;
 | |
| 		BaseItem->World = nullptr;
 | |
| 		//Items.RemoveSingle(BaseItem);
 | |
| 		OnInventoryUpdated.Broadcast(); // Updates UI
 | |
| 		return true;
 | |
| 	}
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| UBaseItem* UInventoryComponent::GetItem(int Index)
 | |
| {
 | |
| 	return Items[Index];
 | |
| }
 | |
| 
 | |
| void UInventoryComponent::RemoveItem(UEatableItems* Item)
 | |
| {
 | |
| 	Items.RemoveSingle(Item);
 | |
| 	OnInventoryUpdated.Broadcast();
 | |
| }
 | |
| 
 |