Files
inventory-system-plugin/Source/ItemPlacement/Private/PlacementInteractionActions.cpp
Bonchellon 7f7e043a88 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>
2026-06-22 20:49:56 +03:00

54 lines
1.8 KiB
C++

// Copyright ExByte Studios. Item Interaction Ecosystem.
#include "PlacementInteractionActions.h"
#include "PlacementPreviewComponent.h"
#include "ItemNativeTags.h"
#include "GameFramework/Character.h"
namespace
{
UPlacementPreviewComponent* GetPlacement(const FInteractionContext& Context)
{
return Context.Character ? Context.Character->FindComponentByClass<UPlacementPreviewComponent>() : nullptr;
}
}
UInteractionAction_StartPlacement::UInteractionAction_StartPlacement()
{
ActionTag = ItemEcosystemTags::Action_Place;
Mode = EItemInteractionMode::StartPlacement;
Priority = 300;
DisplayText = NSLOCTEXT("ItemPlacement", "Place", "Place");
}
void UInteractionAction_StartPlacement::Execute_Implementation(const FInteractionContext& Context)
{
if (UPlacementPreviewComponent* P = GetPlacement(Context))
{
const FGuid Id = Context.bHasTargetItem ? Context.TargetItem.InstanceId
: (Context.bHasHeldItem ? Context.HeldItem.InstanceId : FGuid());
if (Id.IsValid()) { P->StartPlacement(Id); }
}
}
UInteractionAction_ConfirmPlacement::UInteractionAction_ConfirmPlacement()
{
Mode = EItemInteractionMode::ConfirmPlacement;
Priority = 1000;
DisplayText = NSLOCTEXT("ItemPlacement", "Confirm", "Confirm");
}
void UInteractionAction_ConfirmPlacement::Execute_Implementation(const FInteractionContext& Context)
{
if (UPlacementPreviewComponent* P = GetPlacement(Context)) { P->ConfirmPlacement(); }
}
UInteractionAction_CancelPlacement::UInteractionAction_CancelPlacement()
{
Mode = EItemInteractionMode::CancelPlacement;
Priority = 1000;
DisplayText = NSLOCTEXT("ItemPlacement", "Cancel", "Cancel");
}
void UInteractionAction_CancelPlacement::Execute_Implementation(const FInteractionContext& Context)
{
if (UPlacementPreviewComponent* P = GetPlacement(Context)) { P->CancelPlacement(); }
}