void UParticleModuleLocationBoneSocket::AutoPopulateInstanceProperties(UParticleSystemComponent* PSysComp)
{
check(IsInGameThread());
bool bFound = false;
for (int32 ParamIdx = 0; ParamIdx < PSysComp->InstanceParameters.Num(); ParamIdx++)
{
FParticleSysParam* Param = &(PSysComp->InstanceParameters[ParamIdx]);
if (Param->Name == SkelMeshActorParamName)
{
bFound = true;
break;
}
}
if (bFound == false)
{
int32 NewParamIndex = PSysComp->InstanceParameters.AddZeroed();
PSysComp->InstanceParameters[NewParamIndex].Name = SkelMeshActorParamName;
PSysComp->InstanceParameters[NewParamIndex].ParamType = PSPT_Actor;
PSysComp->InstanceParameters[NewParamIndex].Actor = NULL;
}
}
USkeletalMeshComponent* UParticleModuleLocationSkelVertSurface::GetSkeletalMeshComponentSource(FParticleEmitterInstance* Owner)
{
if (Owner == NULL)
{
return NULL;
}
UParticleSystemComponent* PSysComp = Owner->Component;
if (PSysComp == NULL)
{
return NULL;
}
AActor* Actor;
if (PSysComp->GetActorParameter(SkelMeshActorParamName, Actor) == true)
{
if(Actor == NULL)
{
return NULL;
}
ASkeletalMeshActor* SkelMeshActor = Cast<ASkeletalMeshActor>(Actor);
if (SkelMeshActor != NULL)
{
return SkelMeshActor->GetSkeletalMeshComponent();
}
else
{
USkeletalMeshComponent* SkeletalMeshComponent = Actor->FindComponentByClass<USkeletalMeshComponent>();
if (SkeletalMeshComponent)
{
return SkeletalMeshComponent;
}
//@todo. Warn about this...
}
}
return NULL;
}