Skip to main content

OnEquipmentChanged

Fired when any equipment slot changes: Blueprint:
Event On Equipment Changed
   Slot Index:       [int32]
   New Item:         [FItemInstance]
   Old Item:         [FItemInstance]
   Slot Definition:  [FEquipmentSlotDefinition]

   [Update UI slot]
3ef4b82eccce849222fbabe9e358c1a1.png C++:
EquipmentComponent->OnEquipmentChanged.AddDynamic(this, &AMyClass::HandleEquipmentChanged);

void AMyClass::HandleEquipmentChanged(
    int32 SlotIndex,
    const FItemInstance& NewItem,
    const FItemInstance& OldItem,
    const FEquipmentSlotDefinition& SlotDefinition)
{
    // Update equipment UI
    EquipmentUI->UpdateSlot(SlotIndex, NewItem);

    // OldItem is valid if something was previously equipped
    if (!OldItem.IsEmpty())
    {
        UE_LOG(LogTemp, Log, TEXT("Replaced %s in slot %s"),
               *OldItem.ItemID.ToString(), *SlotDefinition.SlotName.ToString());
    }
}

OnEquipmentVisualUpdate

Fired when visuals are updated: C++:
EquipmentComponent->OnEquipmentVisualUpdate.AddDynamic(this, &AMyClass::HandleVisualUpdate);

void AMyClass::HandleVisualUpdate(
    int32 SlotIndex,
    USkeletalMesh* NewMesh,
    const FEquipmentSlotDefinition& SlotDefinition)
{
    // NewMesh is null when the slot was cleared
}

OnEquippedItemChargesChanged

C++:
EquipmentComponent->OnEquippedItemChargesChanged.AddDynamic(this, &AMyClass::HandleChargesChanged);

void AMyClass::HandleChargesChanged(int32 SlotIndex, int32 OldCharges, int32 NewCharges)
{
    // Refresh ammo counter in HUD
    HUD->SetAmmoCount(NewCharges);
}