// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "System/GameplayTagStack.h" #include "GameFramework/Pawn.h" #include "LyraEquipmentInstance.generated.h" struct FLyraEquipmentActorToSpawn; /** * ULyraEquipmentInstance * * A piece of equipment spawned and applied to a pawn */ UCLASS(BlueprintType, Blueprintable) class ULyraEquipmentInstance : public UObject { GENERATED_BODY() public: ULyraEquipmentInstance(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); //~UObject interface virtual bool IsSupportedForNetworking() const override { return true; } virtual UWorld* GetWorld() const override final; //~End of UObject interface UFUNCTION(BlueprintPure, Category=Equipment) UObject* GetInstigator() const { return Instigator; } void SetInstigator(UObject* InInstigator) { Instigator = InInstigator; } UFUNCTION(BlueprintPure, Category=Equipment) APawn* GetPawn() const; UFUNCTION(BlueprintPure, Category=Equipment, meta=(DeterminesOutputType=PawnType)) APawn* GetTypedPawn(TSubclassOf PawnType) const; UFUNCTION(BlueprintPure, Category=Equipment) TArray GetSpawnedActors() const { return SpawnedActors; } virtual void SpawnEquipmentActors(const TArray& ActorsToSpawn); virtual void DestroyEquipmentActors(); virtual void OnEquipped(); virtual void OnUnequipped(); protected: UFUNCTION(BlueprintImplementableEvent, Category=Equipment, meta=(DisplayName="OnEquipped")) void K2_OnEquipped(); UFUNCTION(BlueprintImplementableEvent, Category=Equipment, meta=(DisplayName="OnUnequipped")) void K2_OnUnequipped(); private: UFUNCTION() void OnRep_Instigator(); private: UPROPERTY(ReplicatedUsing=OnRep_Instigator) UObject* Instigator; UPROPERTY(Replicated) TArray SpawnedActors; };