98 lines
2.3 KiB
C++
98 lines
2.3 KiB
C++
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||
|
|
||
|
#include "LyraEquipmentInstance.h"
|
||
|
#include "LyraEquipmentDefinition.h"
|
||
|
#include "GameFramework/Character.h"
|
||
|
#include "Components/SkeletalMeshComponent.h"
|
||
|
#include "Net/UnrealNetwork.h"
|
||
|
|
||
|
ULyraEquipmentInstance::ULyraEquipmentInstance(const FObjectInitializer& ObjectInitializer)
|
||
|
: Super(ObjectInitializer)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
UWorld* ULyraEquipmentInstance::GetWorld() const
|
||
|
{
|
||
|
if (APawn* OwningPawn = GetPawn())
|
||
|
{
|
||
|
return OwningPawn->GetWorld();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return nullptr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ULyraEquipmentInstance::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
|
||
|
{
|
||
|
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
|
||
|
|
||
|
DOREPLIFETIME(ThisClass, Instigator);
|
||
|
DOREPLIFETIME(ThisClass, SpawnedActors);
|
||
|
}
|
||
|
|
||
|
APawn* ULyraEquipmentInstance::GetPawn() const
|
||
|
{
|
||
|
return Cast<APawn>(GetOuter());
|
||
|
}
|
||
|
|
||
|
APawn* ULyraEquipmentInstance::GetTypedPawn(TSubclassOf<APawn> PawnType) const
|
||
|
{
|
||
|
APawn* Result = nullptr;
|
||
|
if (UClass* ActualPawnType = PawnType)
|
||
|
{
|
||
|
if (GetOuter()->IsA(ActualPawnType))
|
||
|
{
|
||
|
Result = Cast<APawn>(GetOuter());
|
||
|
}
|
||
|
}
|
||
|
return Result;
|
||
|
}
|
||
|
|
||
|
void ULyraEquipmentInstance::SpawnEquipmentActors(const TArray<FLyraEquipmentActorToSpawn>& ActorsToSpawn)
|
||
|
{
|
||
|
if (APawn* OwningPawn = GetPawn())
|
||
|
{
|
||
|
USceneComponent* AttachTarget = OwningPawn->GetRootComponent();
|
||
|
if (ACharacter* Char = Cast<ACharacter>(OwningPawn))
|
||
|
{
|
||
|
AttachTarget = Char->GetMesh();
|
||
|
}
|
||
|
|
||
|
for (const FLyraEquipmentActorToSpawn& SpawnInfo : ActorsToSpawn)
|
||
|
{
|
||
|
AActor* NewActor = GetWorld()->SpawnActorDeferred<AActor>(SpawnInfo.ActorToSpawn, FTransform::Identity, OwningPawn);
|
||
|
NewActor->FinishSpawning(FTransform::Identity, /*bIsDefaultTransform=*/ true);
|
||
|
NewActor->SetActorRelativeTransform(SpawnInfo.AttachTransform);
|
||
|
NewActor->AttachToComponent(AttachTarget, FAttachmentTransformRules::KeepRelativeTransform, SpawnInfo.AttachSocket);
|
||
|
|
||
|
SpawnedActors.Add(NewActor);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ULyraEquipmentInstance::DestroyEquipmentActors()
|
||
|
{
|
||
|
for (AActor* Actor : SpawnedActors)
|
||
|
{
|
||
|
if (Actor)
|
||
|
{
|
||
|
Actor->Destroy();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ULyraEquipmentInstance::OnEquipped()
|
||
|
{
|
||
|
K2_OnEquipped();
|
||
|
}
|
||
|
|
||
|
void ULyraEquipmentInstance::OnUnequipped()
|
||
|
{
|
||
|
K2_OnUnequipped();
|
||
|
}
|
||
|
|
||
|
void ULyraEquipmentInstance::OnRep_Instigator()
|
||
|
{
|
||
|
}
|