Update Inventory Component for Helper Functions
This commit is contained in:
parent
5d009904f8
commit
6609476eec
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include "InventoryComponent.h"
|
#include "InventoryComponent.h"
|
||||||
|
|
||||||
|
#include "BaseItem.h"
|
||||||
|
|
||||||
|
|
||||||
// Sets default values for this component's properties
|
// Sets default values for this component's properties
|
||||||
UInventoryComponent::UInventoryComponent()
|
UInventoryComponent::UInventoryComponent()
|
||||||
@ -21,7 +23,6 @@ void UInventoryComponent::BeginPlay()
|
|||||||
Super::BeginPlay();
|
Super::BeginPlay();
|
||||||
|
|
||||||
// ...
|
// ...
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -41,39 +42,100 @@ void UInventoryComponent::LineTraceForItemCheck()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void UInventoryComponent::Pickup(UBaseItem* Item)
|
void UInventoryComponent::Pickup()
|
||||||
{
|
{
|
||||||
|
//TODO: Add pickup logic and create pickup Actor
|
||||||
|
if (!IsValid(ItemToPickup)) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UInventoryComponent::IsRoomAvailable(UBaseItem* Item, int TopLeftIndex)
|
bool UInventoryComponent::IsRoomAvailable(UBaseItem* Item, const int TopLeftIndex)
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < IndexToTile(TopLeftIndex).X + (Item->ItemSize.X - 1); i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < IndexToTile(TopLeftIndex).Y + (Item->ItemSize.Y - 1); j++)
|
||||||
|
{
|
||||||
|
FInventoryTile TileToCheck;
|
||||||
|
TileToCheck.X = i;
|
||||||
|
TileToCheck.Y = j;
|
||||||
|
if (!IsTileValid(TileToCheck)) return false;
|
||||||
|
const TTuple<UBaseItem*, bool> ItemAtIndex = GetItemAtIndex(TileToIndex(TileToCheck));
|
||||||
|
if (ItemAtIndex.Get<1>()) return false;
|
||||||
|
if (IsValid(ItemAtIndex.Get<0>())) return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
FVector UInventoryComponent::IndexToTile(int Index)
|
FInventoryTile UInventoryComponent::IndexToTile(const int Index) const
|
||||||
{
|
{
|
||||||
|
FInventoryTile Tile;
|
||||||
|
Tile.X = Index % Columns;
|
||||||
|
Tile.Y = Index / Columns;
|
||||||
|
return Tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
UBaseItem* UInventoryComponent::GetItemAtIndex(int Index)
|
TTuple<UBaseItem*, bool> UInventoryComponent::GetItemAtIndex(const int Index)
|
||||||
{
|
{
|
||||||
|
if (!InventoryItems.IsValidIndex(Index)) return std::make_tuple(nullptr, false);
|
||||||
|
return std::make_tuple(InventoryItems[Index], true);
|
||||||
}
|
}
|
||||||
|
|
||||||
FInventoryTiles UInventoryComponent::TileToIndex(int Index)
|
int UInventoryComponent::TileToIndex(const FInventoryTile InventoryTile) const
|
||||||
{
|
{
|
||||||
|
return InventoryTile.X + InventoryTile.Y * Columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UInventoryComponent::AddItemAt(UBaseItem* Item, int TopLeftIndex)
|
void UInventoryComponent::AddItemAt(UBaseItem* Item, const int TopLeftIndex)
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < IndexToTile(TopLeftIndex).X + (Item->ItemSize.X - 1); i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < IndexToTile(TopLeftIndex).Y + (Item->ItemSize.Y - 1); j++)
|
||||||
|
{
|
||||||
|
FInventoryTile TileToCheck;
|
||||||
|
TileToCheck.X = i;
|
||||||
|
TileToCheck.Y = j;
|
||||||
|
if (!IsTileValid(TileToCheck)) return;
|
||||||
|
InventoryItems.Insert(Item, TileToIndex(TileToCheck));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IsDirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UInventoryComponent::GetAllItems()
|
TMap<UBaseItem*, FInventoryTile> UInventoryComponent::GetAllItems()
|
||||||
{
|
{
|
||||||
|
TMap<UBaseItem*, FInventoryTile> Items;
|
||||||
|
for (int i = 0; i < InventoryItems.Num(); i++)
|
||||||
|
{
|
||||||
|
UBaseItem* Item = InventoryItems[i];
|
||||||
|
if (!IsValid(Item)) continue;
|
||||||
|
if (!Items.Contains(Item)) continue;
|
||||||
|
Items.Add(Item, IndexToTile(i));
|
||||||
|
}
|
||||||
|
return Items;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UInventoryComponent::RemoveItem(UBaseItem* Item)
|
void UInventoryComponent::RemoveItem(UBaseItem* Item)
|
||||||
{
|
{
|
||||||
|
if (!IsValid(Item)) return;
|
||||||
|
for (int i = 0; i < InventoryItems.Num(); i++)
|
||||||
|
{
|
||||||
|
if (InventoryItems[i] == Item)
|
||||||
|
{
|
||||||
|
InventoryItems.RemoveAt(i);
|
||||||
|
IsDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UInventoryComponent::SpawnItem(UBaseItem* Item, FVector Location, FRotator Rotation)
|
void UInventoryComponent::SpawnItem(UBaseItem* Item, FVector Location, FRotator Rotation)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool UInventoryComponent::IsTileValid(const FInventoryTile InventoryTile) const
|
||||||
|
{
|
||||||
|
if (InventoryTile.X >= 0 && InventoryTile.Y >= 0 && InventoryTile.Y < Columns && InventoryTile.Y < Rows)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
#include "Components/ActorComponent.h"
|
#include "Components/ActorComponent.h"
|
||||||
#include "InventoryStructs.h"
|
#include "InventoryStructs.h"
|
||||||
|
#include "EndlessVendetta/EndlessVendettaCharacter.h"
|
||||||
#include "InventoryComponent.generated.h"
|
#include "InventoryComponent.generated.h"
|
||||||
|
|
||||||
|
|
||||||
@ -17,6 +18,13 @@ public:
|
|||||||
// Sets default values for this component's properties
|
// Sets default values for this component's properties
|
||||||
UInventoryComponent();
|
UInventoryComponent();
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintRead, Category="Inventory")
|
||||||
|
int Columns = 10;
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintRead, Category="Inventory")
|
||||||
|
int Rows = 10;
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintRead, Category="Inventory")
|
||||||
|
float MaxPickupDistance = 200.0f;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Called when the game starts
|
// Called when the game starts
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
@ -30,21 +38,32 @@ public:
|
|||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
void LineTraceForItemCheck();
|
void LineTraceForItemCheck();
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
void Pickup(class UBaseItem* Item);
|
void Pickup();
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
bool IsRoomAvailable(class UBaseItem* Item, int TopLeftIndex);
|
bool IsRoomAvailable(class UBaseItem* Item, const int TopLeftIndex);
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
FVector IndexToTile(int Index);
|
FInventoryTile IndexToTile(const int Index) const;
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
UBaseItem* GetItemAtIndex(int Index);
|
TTuple<UBaseItem*, bool> GetItemAtIndex(const int Index);
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
FInventoryTiles TileToIndex(int Index);
|
int TileToIndex(const FInventoryTile InventoryTile) const;
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
void AddItemAt(class UBaseItem* Item, int TopLeftIndex);
|
void AddItemAt(class UBaseItem* Item, const int TopLeftIndex);
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
void GetAllItems();
|
TMap<UBaseItem*, FInventoryTile> GetAllItems();
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
void RemoveItem(class UBaseItem* Item);
|
void RemoveItem(class UBaseItem* Item);
|
||||||
UFUNCTION(BlueprintCallable, Category="Inventory")
|
UFUNCTION(BlueprintCallable, Category="Inventory")
|
||||||
void SpawnItem(class UBaseItem* Item, FVector Location, FRotator Rotation);
|
void SpawnItem(class UBaseItem* Item, FVector Location, FRotator Rotation);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool IsTileValid(const FInventoryTile InventoryTile) const;
|
||||||
|
|
||||||
|
UPROPERTY()
|
||||||
|
AEndlessVendettaCharacter* PlayerCharacter;
|
||||||
|
UPROPERTY()
|
||||||
|
AActor* ItemToPickup;
|
||||||
|
bool IsDirty = false;
|
||||||
|
UPROPERTY()
|
||||||
|
TArray<UBaseItem*> InventoryItems;
|
||||||
};
|
};
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
USTRUCT(BlueprintType)
|
USTRUCT(BlueprintType)
|
||||||
struct FInventoryLines
|
struct FInventoryLine
|
||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ struct FInventoryLines
|
|||||||
};
|
};
|
||||||
|
|
||||||
USTRUCT(BlueprintType)
|
USTRUCT(BlueprintType)
|
||||||
struct FInventoryTiles
|
struct FInventoryTile
|
||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user