5#include "CoreMinimal.h"
6#include "GameFramework/Actor.h"
7#include "ItemSpawner.generated.h"
9#define CLAIMED_SPAWN "ClaimedSpawn"
10#define ITEM_SPAWN "ItemSpawn"
17 GENERATED_USTRUCT_BODY()
20 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
21 TSubclassOf<class AActor> SpawnableItem =
nullptr;
23 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
24 FName Tag = NAME_None;
26 UPROPERTY(EditInstanceOnly, BlueprintReadWrite, meta = (ClampMin = "0.001", ClampMax = "1000.0", UIMin = "0.001", UIMax = "1000.0"))
27 float SpawnWeight = 100.0f;
30 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
31 FVector2D SpawnMinMax = FVector2D(1.0f, 2.0f);
33 uint32 SpawnedCount = 0;
39 GENERATED_USTRUCT_BODY()
41 FName GroupName = FName("New SpawnGroup");
43 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
44 TArray<AActor*> Spawnpoints;
46 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
50 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
51 FVector2D SpawnMinMax = FVector2D(5.0f, 10.0f);
53 UPROPERTY(EditInstanceOnly, BlueprintReadWrite, meta = (ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0"))
54 float DuplicatesPenalty = 0.5f;
63 UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Category = ItemSpawner)
69 virtual
void BeginPlay() override;
72 UWorld* World =
nullptr;
74 void BuildSpawnList(const
FSpawnGroup& SpawnGroup, TArray<USceneComponent*>& SpawnLocations);
75 void SpawnItems(
FSpawnGroup& SpawnGroup, const TArray<USceneComponent*>& SpawnLocations);
76 void SpawnItem(
FSpawnableItem& Item, TArray<USceneComponent*>& SpawnLocations);
77 void BuildFilteredSpawnList(const
FSpawnableItem& SpawnableItem, TArray<USceneComponent*>& FilteredSpawnList, const TArray<USceneComponent*>& SpawnLocations);
78 void ClampSpawnAmountsToGroup(
FSpawnGroup& SpawnGroup,
float& SpawnWeightTotal, uint32& TotalItemSpawnMinimums, uint32& TotalItemSpawnMaximums);
79 void Cleanup(TArray<USceneComponent*>& SpawnLocations);
81 USceneComponent* GetUnusedSpawnPoint(const TArray<USceneComponent*>& SpawnLocations) const;
83 bool IsSpawnableItemValid(
FSpawnableItem& SpawnableItem, const
FSpawnGroup& SpawnGroup, const TArray<USceneComponent*>& SpawnLocations);
84 bool IsSpawnGroupValid(
FSpawnGroup& SpawnGroup, const TArray<USceneComponent*>& SpawnLocations);
86 FORCEINLINE const uint32 GetSpawnGroupMinimumSpawns(const
FSpawnGroup& SpawnGroup)
const {
return (uint32)SpawnGroup.SpawnMinMax.X; }
87 FORCEINLINE
const uint32 GetSpawnGroupMaximumSpawns(
const FSpawnGroup& SpawnGroup)
const {
return (uint32)SpawnGroup.
SpawnMinMax.Y; }
88 FORCEINLINE
const uint32 GetItemMinimumSpawns(
const FSpawnableItem& SpawnableItem)
const {
return (uint32)SpawnableItem.
SpawnMinMax.X; }
89 FORCEINLINE
const uint32 GetItemMaximumSpawns(
const FSpawnableItem& SpawnableItem)
const {
return (uint32)SpawnableItem.
SpawnMinMax.Y; }
Definition: ItemSpawner.h:59
Definition: ItemSpawner.h:38
FVector2D SpawnMinMax
Definition: ItemSpawner.h:51
Definition: ItemSpawner.h:16
FVector2D SpawnMinMax
Definition: ItemSpawner.h:31