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>
107 lines
3.3 KiB
C++
107 lines
3.3 KiB
C++
// Copyright ExByte Studios. Item Interaction Ecosystem.
|
|
|
|
#include "WorldInteractionActions.h"
|
|
#include "ItemInteractionComponent.h"
|
|
#include "ItemNativeTags.h"
|
|
#include "GameFramework/Character.h"
|
|
|
|
namespace
|
|
{
|
|
bool RouteToComponent(const FInteractionContext& Context, EItemInteractionMode Mode, const FGameplayTag& ActionTag)
|
|
{
|
|
if (!Context.Character)
|
|
{
|
|
return false;
|
|
}
|
|
if (UItemInteractionComponent* Comp = Context.Character->FindComponentByClass<UItemInteractionComponent>())
|
|
{
|
|
return Comp->ServerExecuteMode(Context, Mode, ActionTag);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
UInteractionAction_CarryAttached::UInteractionAction_CarryAttached()
|
|
{
|
|
ActionTag = ItemEcosystemTags::Action_Carry;
|
|
Mode = EItemInteractionMode::CarryAttached;
|
|
Priority = 500;
|
|
DisplayText = NSLOCTEXT("ItemWorld", "Carry", "Carry");
|
|
}
|
|
void UInteractionAction_CarryAttached::Execute_Implementation(const FInteractionContext& Context)
|
|
{
|
|
RouteToComponent(Context, Mode, ActionTag);
|
|
}
|
|
|
|
UInteractionAction_CarryPhysics::UInteractionAction_CarryPhysics()
|
|
{
|
|
ActionTag = ItemEcosystemTags::Action_Carry;
|
|
Mode = EItemInteractionMode::CarryPhysicsHandle;
|
|
Priority = 500;
|
|
DisplayText = NSLOCTEXT("ItemWorld", "CarryPhysics", "Pick Up");
|
|
}
|
|
void UInteractionAction_CarryPhysics::Execute_Implementation(const FInteractionContext& Context)
|
|
{
|
|
RouteToComponent(Context, Mode, ActionTag);
|
|
}
|
|
|
|
UInteractionAction_Equip::UInteractionAction_Equip()
|
|
{
|
|
ActionTag = ItemEcosystemTags::Action_Equip;
|
|
Mode = EItemInteractionMode::EquipFromInventory;
|
|
Priority = 800;
|
|
DisplayText = NSLOCTEXT("ItemWorld", "Equip", "Equip");
|
|
}
|
|
void UInteractionAction_Equip::Execute_Implementation(const FInteractionContext& Context)
|
|
{
|
|
RouteToComponent(Context, Mode, ActionTag);
|
|
}
|
|
|
|
UInteractionAction_DropHeldItem::UInteractionAction_DropHeldItem()
|
|
{
|
|
ActionTag = ItemEcosystemTags::Action_Drop;
|
|
Mode = EItemInteractionMode::DropHeldItem;
|
|
Priority = 300;
|
|
DisplayText = NSLOCTEXT("ItemWorld", "Drop", "Drop");
|
|
}
|
|
void UInteractionAction_DropHeldItem::Execute_Implementation(const FInteractionContext& Context)
|
|
{
|
|
RouteToComponent(Context, Mode, ActionTag);
|
|
}
|
|
|
|
UInteractionAction_InstallIntoWorldSlot::UInteractionAction_InstallIntoWorldSlot()
|
|
{
|
|
ActionTag = ItemEcosystemTags::Action_Install;
|
|
Mode = EItemInteractionMode::InstallIntoWorldSlot;
|
|
Priority = 900;
|
|
DisplayText = NSLOCTEXT("ItemWorld", "Install", "Install");
|
|
}
|
|
void UInteractionAction_InstallIntoWorldSlot::Execute_Implementation(const FInteractionContext& Context)
|
|
{
|
|
RouteToComponent(Context, Mode, ActionTag);
|
|
}
|
|
|
|
UInteractionAction_RemoveFromWorldSlot::UInteractionAction_RemoveFromWorldSlot()
|
|
{
|
|
ActionTag = ItemEcosystemTags::Action_Remove;
|
|
Mode = EItemInteractionMode::RemoveFromWorldSlot;
|
|
Priority = 400;
|
|
DisplayText = NSLOCTEXT("ItemWorld", "Remove", "Remove");
|
|
}
|
|
void UInteractionAction_RemoveFromWorldSlot::Execute_Implementation(const FInteractionContext& Context)
|
|
{
|
|
RouteToComponent(Context, Mode, ActionTag);
|
|
}
|
|
|
|
UInteractionAction_UseHeldOnTarget::UInteractionAction_UseHeldOnTarget()
|
|
{
|
|
ActionTag = ItemEcosystemTags::Action_UseHeldOnTarget;
|
|
Mode = EItemInteractionMode::UseHeldOnTarget;
|
|
Priority = 800;
|
|
DisplayText = NSLOCTEXT("ItemWorld", "Use", "Use");
|
|
}
|
|
void UInteractionAction_UseHeldOnTarget::Execute_Implementation(const FInteractionContext& Context)
|
|
{
|
|
RouteToComponent(Context, Mode, ActionTag);
|
|
}
|