AzureAbyss/Source/the_twilight_abyss/BaseItems/InventoryComponent.cpp

94 lines
2.3 KiB
C++
Raw Normal View History

// 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();
bool isNewItem = true;
for (auto & Item : Items)
{
//if the item is the same as the item that is being added
if (Item->ItemDisplayName.ToString() == BaseItem->ItemDisplayName.ToString())
{
Item->StackCount++;
UE_LOG(LogTemp, Display, TEXT("ITEM STACKCOUNT: %d"), Item->StackCount);
isNewItem = false;
break;
}
}
if (isNewItem == true)
{
Items.Add(BaseItem);
UE_LOG(LogTemp, Display, TEXT("ITEM HAS BEEN ADDED TO INVENTORY"));
}
//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)
{
Item->StackCount--;
if (Item->StackCount <= 0)
{
Remove(Item); // activates the remove function up above
}
OnInventoryUpdated.Broadcast();
}