Initial commit: Item Interaction Ecosystem plugin (UE5.7)

Server-authoritative, data-driven item/inventory/interaction/carry/equipment/
world-slot/placement/crafting framework. 8 modules, compiles against UE 5.7.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Bonchellon
2026-06-22 20:49:56 +03:00
commit 7f7e043a88
98 changed files with 9328 additions and 0 deletions

View File

@ -0,0 +1,69 @@
// Copyright ExByte Studios. Item Interaction Ecosystem.
#pragma once
#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "ItemPlacementRules.generated.h"
/** How a placeable item snaps when previewed/placed (section 13.3). */
UENUM(BlueprintType)
enum class EItemPlacementMode : uint8
{
FreeSurface,
SnapToGrid,
SnapToSocket
};
/**
* Static placement constraints for a placeable item (section 13.3).
* Evaluated locally for the ghost preview and re-validated on the server.
*/
USTRUCT(BlueprintType)
struct ITEMDATABASE_API FItemPlacementRules
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
EItemPlacementMode PlacementMode = EItemPlacementMode::FreeSurface;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
float MaxDistance = 400.f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
bool bRequiresFlatSurface = false;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement", meta = (ClampMin = "0", ClampMax = "90"))
float MaxSlopeAngle = 35.f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
FName CollisionProfile = FName("BlockAll");
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
FGameplayTagContainer AllowedSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
FGameplayTagContainer BlockedSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
float SnapToGrid = 0.f;
/** When PlacementMode == SnapToSocket, only sockets carrying this tag accept the item. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
FGameplayTag SnapToSocketTag;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
float MinDistanceFromOtherSameItems = 0.f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
bool bCanPlaceInWater = false;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
bool bCanPlaceOnVehicle = false;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
bool bCanPlaceOnWall = false;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Placement")
bool bCanPlaceOnGround = true;
};