本文整理汇总了C++中TArray::Last方法的典型用法代码示例。如果您正苦于以下问题:C++ TArray::Last方法的具体用法?C++ TArray::Last怎么用?C++ TArray::Last使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TArray
的用法示例。
在下文中一共展示了TArray::Last方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LoadWeatherDescriptionsFromFile
void ADynamicWeather::LoadWeatherDescriptionsFromFile(
const FString &MapName,
TArray<FWeatherDescription> &Descriptions)
{
// Try to load config file.
FString DefaultFilePath;
if (GetWeatherIniFilePath(GetIniFileName(), DefaultFilePath)) {
UE_LOG(LogCarla, Log, TEXT("Loading weather description from %s"), *DefaultFilePath);
FIniFile ConfigFile(DefaultFilePath);
{ // Override map specific presets.
FString MapOverridesFilePath;
if (GetWeatherIniFilePath(GetIniFileName(MapName), MapOverridesFilePath)) {
UE_LOG(LogCarla, Log, TEXT("Loading weather description from %s"), *MapOverridesFilePath);
ConfigFile.Combine(MapOverridesFilePath);
}
}
// For every section in the config file add a weather description.
for (auto &Item : ConfigFile.GetFConfigFile()) {
Descriptions.AddDefaulted(1u);
Descriptions.Last().ReadFromConfigFile(ConfigFile, Item.Key);
}
}
// If no description was found, append a defaulted one.
if (Descriptions.Num() == 0) {
UE_LOG(LogCarla, Warning, TEXT("No weather description found"));
Descriptions.AddDefaulted(1u);
Descriptions.Last().Name = TEXT("Default");
}
}
示例2: BuildAssetList
/**
* Returns a list of all assets referenced by the specified UObject.
*/
void FFindReferencedAssets::BuildAssetList(UObject *Object, const TArray<UClass*>& IgnoreClasses, const TArray<UObject*>& IgnorePackages, TSet<UObject*>& ReferencedAssets, bool bIncludeDefaultRefs)
{
TArray<FReferencedAssets> LocalReferencers;
// Create a new entry for this actor.
new( LocalReferencers ) FReferencedAssets( Object );
for (FObjectIterator It; It; ++It)
{
// Skip the level, world, and any packages that should be ignored
if ( ShouldSearchForAssets(*It, IgnoreClasses, IgnorePackages, bIncludeDefaultRefs) )
{
It->Mark(OBJECTMARK_TagExp);
}
else
{
It->UnMark(OBJECTMARK_TagExp);
}
}
// Add to the list of referenced assets.
FFindAssetsArchive( Object, LocalReferencers.Last().AssetList, NULL, /*MaxRecursion=*/0, /*bIncludeClasses=*/true, bIncludeDefaultRefs );
ReferencedAssets = LocalReferencers.Last().AssetList;
}
示例3: DrawPath
void UPathFindingComponent::DrawPath(FVector start, TArray<FVector>& route, FColor color, float duration, float thickness)
{
if (duration <= 0.0f)
{
DrawDebugLine(GetWorld(), start, route.Last(), color, true, -1.0f, (uint8)'\000', thickness);
for (auto index = 0; index < route.Num() - 1; index++)
DrawDebugLine(GetWorld(), route[index], route[index + 1], color, true, -1.0f, (uint8)'\000', thickness);
}
else
{
DrawDebugLine(GetWorld(), start, route.Last(), color, false, duration, (uint8)'\000', thickness);
for (auto index = 0; index < route.Num() - 1; index++)
DrawDebugLine(GetWorld(), route[index], route[index + 1], color, false, duration, (uint8)'\000', thickness);
}
}
示例4: GetParameterData
void UMaterialParameterCollectionInstance::GetParameterData(TArray<FVector4>& ParameterData) const
{
// The memory layout created here must match the index assignment in UMaterialParameterCollection::GetParameterIndex
if (Collection)
{
ParameterData.Empty(FMath::DivideAndRoundUp(Collection->ScalarParameters.Num(), 4) + Collection->VectorParameters.Num());
for (int32 ParameterIndex = 0; ParameterIndex < Collection->ScalarParameters.Num(); ParameterIndex++)
{
const FCollectionScalarParameter& Parameter = Collection->ScalarParameters[ParameterIndex];
// Add a new vector for each packed vector
if (ParameterIndex % 4 == 0)
{
ParameterData.Add(FVector4(0, 0, 0, 0));
}
FVector4& CurrentVector = ParameterData.Last();
const float* InstanceData = ScalarParameterValues.Find(Parameter.ParameterName);
// Pack into the appropriate component of this packed vector
CurrentVector[ParameterIndex % 4] = InstanceData ? *InstanceData : Parameter.DefaultValue;
}
for (int32 ParameterIndex = 0; ParameterIndex < Collection->VectorParameters.Num(); ParameterIndex++)
{
const FCollectionVectorParameter& Parameter = Collection->VectorParameters[ParameterIndex];
const FLinearColor* InstanceData = VectorParameterValues.Find(Parameter.ParameterName);
ParameterData.Add(InstanceData ? *InstanceData : Parameter.DefaultValue);
}
}
}
示例5: ReloadLabelList
void SSequencerLabelBrowser::ReloadLabelList(bool FullyReload)
{
LabelList.Reset();
LabelList.Add(MakeShareable(new FSequencerLabelTreeNode(FString(), FText::GetEmpty())));
TArray<FString> AllLabels;
if (Sequencer.IsValid() && Sequencer.Pin()->GetLabelManager().GetAllLabels(AllLabels) > 0)
{
for (const auto& Label : AllLabels)
{
// create new leaf node
TArray<FString> Strings;
Label.ParseIntoArray(Strings, TEXT("."), true);
TSharedRef<FSequencerLabelTreeNode> NewNode = MakeShareable(
new FSequencerLabelTreeNode(Label, FText::FromString(Strings.Last())));
// insert node into tree
TArray<TSharedPtr<FSequencerLabelTreeNode>>* ParentNodes = &LabelList;
int32 Index = 0;
while (Index < Strings.Num() - 1)
{
TSharedPtr<FSequencerLabelTreeNode> Parent;
for (const auto& Node : *ParentNodes)
{
if (Node->Label == Strings[Index])
{
Parent = Node;
break;
}
}
// create interior node if needed
if (!Parent.IsValid())
{
FString ParentLabel = Strings[0];
for (int32 SubIndex = 1; SubIndex <= Index; ++SubIndex)
{
ParentLabel += TEXT(".") + Strings[SubIndex];
}
Parent = MakeShareable(new FSequencerLabelTreeNode(ParentLabel, FText::FromString(Strings[Index])));
ParentNodes->Add(Parent);
}
ParentNodes = &Parent->Children;
++Index;
}
// insert node into tree
ParentNodes->Add(NewNode);
}
}
LabelTreeView->RequestTreeRefresh();
}
示例6: GetWidgetLocation
FVector FSCSEditorViewportClient::GetWidgetLocation() const
{
FVector Location = FVector::ZeroVector;
AActor* PreviewActor = GetPreviewActor();
if(PreviewActor)
{
TArray<FSCSEditorTreeNodePtrType> SelectedNodes = BlueprintEditorPtr.Pin()->GetSelectedSCSEditorTreeNodes();
if(SelectedNodes.Num() > 0)
{
// Use the last selected item for the widget location
USceneComponent* SceneComp = Cast<USceneComponent>(SelectedNodes.Last().Get()->FindComponentInstanceInActor(PreviewActor));
if( SceneComp )
{
TSharedPtr<ISCSEditorCustomization> Customization = BlueprintEditorPtr.Pin()->CustomizeSCSEditor(SceneComp);
FVector CustomLocation;
if(Customization.IsValid() && Customization->HandleGetWidgetLocation(SceneComp, CustomLocation))
{
Location = CustomLocation;
}
else
{
Location = SceneComp->GetComponentLocation();
}
}
}
}
return Location;
}
示例7: BuildDependencyMapAndCompile
static void BuildDependencyMapAndCompile(const TArray<UUserDefinedStruct*>& ChangedStructs, FCompilerResultsLog& MessageLog)
{
struct FDependencyMapEntry
{
UUserDefinedStruct* Struct;
TSet<UUserDefinedStruct*> StructuresToWaitFor;
FDependencyMapEntry() : Struct(NULL) {}
void Initialize(UUserDefinedStruct* ChangedStruct, const TArray<UUserDefinedStruct*>& AllChangedStructs)
{
Struct = ChangedStruct;
check(Struct);
auto Schema = GetDefault<UEdGraphSchema_K2>();
for (auto& VarDesc : FStructureEditorUtils::GetVarDesc(Struct))
{
auto StructType = Cast<UUserDefinedStruct>(VarDesc.SubCategoryObject.Get());
if (StructType && (VarDesc.Category == Schema->PC_Struct) && AllChangedStructs.Contains(StructType))
{
StructuresToWaitFor.Add(StructType);
}
}
}
};
TArray<FDependencyMapEntry> DependencyMap;
for (auto Iter = ChangedStructs.CreateConstIterator(); Iter; ++Iter)
{
DependencyMap.Add(FDependencyMapEntry());
DependencyMap.Last().Initialize(*Iter, ChangedStructs);
}
while (DependencyMap.Num())
{
int32 StructureToCompileIndex = INDEX_NONE;
for (int32 EntryIndex = 0; EntryIndex < DependencyMap.Num(); ++EntryIndex)
{
if(0 == DependencyMap[EntryIndex].StructuresToWaitFor.Num())
{
StructureToCompileIndex = EntryIndex;
break;
}
}
check(INDEX_NONE != StructureToCompileIndex);
UUserDefinedStruct* Struct = DependencyMap[StructureToCompileIndex].Struct;
check(Struct);
FUserDefinedStructureCompilerInner::CleanAndSanitizeStruct(Struct);
FUserDefinedStructureCompilerInner::InnerCompileStruct(Struct, GetDefault<UEdGraphSchema_K2>(), MessageLog);
DependencyMap.RemoveAtSwap(StructureToCompileIndex);
for (auto EntryIter = DependencyMap.CreateIterator(); EntryIter; ++EntryIter)
{
(*EntryIter).StructuresToWaitFor.Remove(Struct);
}
}
}
示例8: Sample1dCDF
/** Generates a Sample from the given step 1D probability distribution function. */
void Sample1dCDF(const TArray<float>& PDFArray, const TArray<float>& CDFArray, float UnnormalizedIntegral, FLMRandomStream& RandomStream, float& PDF, float& Sample)
{
checkSlow(PDFArray.Num() > 0);
checkSlow(PDFArray.Num() == CDFArray.Num());
// See pages 641-644 of the "Physically Based Rendering" book for an excellent description of
// How to sample from a piecewise-constant 1d function, which this implementation is based on.
if (PDFArray.Num() > 1)
{
// Get a uniformly distributed pseudo-random number
const float RandomFraction = RandomStream.GetFraction();
int32 GreaterElementIndex = -1;
// Find the index of where the step function becomes greater or equal to the generated number
//@todo - CDFArray is monotonically increasing so we can do better than a linear time search
for (int32 i = 1; i < CDFArray.Num(); i++)
{
if (CDFArray[i] >= RandomFraction)
{
GreaterElementIndex = i;
break;
}
}
if (GreaterElementIndex >= 0)
{
check(GreaterElementIndex >= 1 && GreaterElementIndex < CDFArray.Num());
// Find the fraction that the generated number is from the element before the greater or equal element.
const float OffsetAlongCDFSegment = (RandomFraction - CDFArray[GreaterElementIndex - 1]) / (CDFArray[GreaterElementIndex] - CDFArray[GreaterElementIndex - 1]);
// Access the probability that this element was selected and normalize it
PDF = PDFArray[GreaterElementIndex - 1] / UnnormalizedIntegral;
Sample = (GreaterElementIndex - 1 + OffsetAlongCDFSegment) / (float)CDFArray.Num();
}
else
{
// The last element in the 1d CDF was selected
const float OffsetAlongCDFSegment = (RandomFraction - CDFArray.Last()) / (1.0f - CDFArray.Last());
PDF = PDFArray.Last() / UnnormalizedIntegral;
Sample = FMath::Clamp((CDFArray.Num() - 1 + OffsetAlongCDFSegment) / (float)CDFArray.Num(), 0.0f, 1.0f - DELTA);
}
}
else
{
PDF = 1.0f;
Sample = 0;
}
}
示例9: DuplicateCurveDataImpl
bool FRawCurveTracks::DuplicateCurveDataImpl(TArray<DataType> & Curves, USkeleton::AnimCurveUID ToCopyUid, USkeleton::AnimCurveUID NewUid)
{
DataType* ExistingCurve = GetCurveDataImpl<DataType>(Curves, ToCopyUid);
if(ExistingCurve && GetCurveDataImpl<DataType>(Curves, NewUid) == NULL)
{
// Add the curve to the track and set its data to the existing curve
Curves.Add(DataType(NewUid, ExistingCurve->GetCurveTypeFlags()));
Curves.Last().CopyCurve(*ExistingCurve);
return true;
}
return false;
}
示例10: TEXT
TArray<FString> USkeleUtilityFunctionLibrary::GetDefaultPlayerNamesFromFile() {
FString filePath = FPaths::GameDir() + "Config/DefaultPlayerNames.ini";
FString fileContents = "";
FFileHelper::LoadFileToString(fileContents, *filePath);
TArray<FString> items;
int32 itemCount = fileContents.ParseIntoArray(items, TEXT(","), true);
if (items.Last().Contains(TEXT("\n"))) {
items.Pop();
}
return items;
}
示例11: ResolvePlaceholderPropertyValues
//------------------------------------------------------------------------------
int32 FLinkerPlaceholderBase::ResolvePlaceholderPropertyValues(UObject* NewObjectValue)
{
int32 ResolvedTotal = 0;
UObject* ThisAsUObject = GetPlaceholderAsUObject();
for (auto& ReferencingPair : ReferencingContainers)
{
TWeakObjectPtr<UObject> ContainerPtr = ReferencingPair.Key;
if (!ContainerPtr.IsValid())
{
continue;
}
UObject* Container = ContainerPtr.Get();
for (const UObjectProperty* Property : ReferencingPair.Value)
{
#if USE_DEFERRED_DEPENDENCY_CHECK_VERIFICATION_TESTS
check(Property->GetOwnerClass() == Container->GetClass());
#endif // USE_DEFERRED_DEPENDENCY_CHECK_VERIFICATION_TESTS
TArray<const UProperty*> PropertyChain;
LinkerPlaceholderObjectImpl::BuildPropertyChain(Property, PropertyChain);
const UProperty* OutermostProperty = PropertyChain.Last();
uint8* OutermostAddress = OutermostProperty->ContainerPtrToValuePtr<uint8>((uint8*)Container, /*ArrayIndex =*/0);
int32 ResolvedCount = LinkerPlaceholderObjectImpl::ResolvePlaceholderValues(PropertyChain, PropertyChain.Num() - 1, OutermostAddress, ThisAsUObject, NewObjectValue);
ResolvedTotal += ResolvedCount;
#if USE_DEFERRED_DEPENDENCY_CHECK_VERIFICATION_TESTS
// we expect that (because we have had ReferencingProperties added)
// there should be at least one reference that is resolved... if
// there were none, then a property could have changed its value
// after it was set to this
//
// NOTE: this may seem it can be resolved by properties removing
// themselves from ReferencingProperties, but certain
// properties may be the inner of a UArrayProperty (meaning
// there could be multiple references per property)... we'd
// have to inc/decrement a property ref-count to resolve that
// scenario
check(ResolvedCount > 0);
#endif // USE_DEFERRED_DEPENDENCY_CHECK_VERIFICATION_TESTS
}
}
return ResolvedTotal;
}
示例12: GetLastObstaclePosition
bool UAirBlueprintLib::GetLastObstaclePosition(const AActor* actor, const FVector& start, const FVector& end,
FHitResult& hit, const AActor* ignore_actor, ECollisionChannel collision_channel)
{
TArray<FHitResult> hits;
FCollisionQueryParams trace_params;
trace_params.AddIgnoredActor(actor);
if (ignore_actor != nullptr)
trace_params.AddIgnoredActor(ignore_actor);
bool has_hit = actor->GetWorld()->LineTraceMultiByChannel(hits, start, end, collision_channel, trace_params);
if (hits.Num())
hit = hits.Last(0);
return has_hit;
}
示例13: ParseString
void ParseString(const FString& StringToParse)
{
DataIndex = 0;
DataString = StringToParse;
if (DataIndex >= DataString.Len())
{
return;
}
const FString TabString(TEXT(" "));
FColor TagColor;
FNode CurrentNode(DefaultColor);
for (EStringParserToken Token = ReadToken(); Token != EStringParserToken::EndOfString; Token = ReadToken())
{
switch (Token)
{
case EStringParserToken::RegularChar:
CurrentNode.String.AppendChar(DataString[DataIndex]);
break;
case EStringParserToken::NewLine:
NodeList.Add(CurrentNode);
CurrentNode = FNode(NodeList.Last().Color);
CurrentNode.bNewLine = true;
break;
case EStringParserToken::Tab:
CurrentNode.String.Append(TabString);
break;
case EStringParserToken::OpenTag:
if (ParseTag(TagColor))
{
NodeList.Add(CurrentNode);
CurrentNode = FNode(TagColor);
}
break;
}
DataIndex++;
}
NodeList.Add(CurrentNode);
}
示例14: SetAgentMovePath
bool UCrowdManager::SetAgentMovePath(const UCrowdFollowingComponent* AgentComponent, const FNavMeshPath* Path,
int32 PathSectionStart, int32 PathSectionEnd, const FVector& PathSectionEndLocation) const
{
SCOPE_CYCLE_COUNTER(STAT_AI_Crowd_AgentUpdateTime);
bool bSuccess = false;
#if WITH_RECAST
const FCrowdAgentData* AgentData = ActiveAgents.Find(AgentComponent);
ARecastNavMesh* RecastNavData = Cast<ARecastNavMesh>(MyNavData);
if (AgentData && AgentData->bIsSimulated && AgentData->IsValid() &&
DetourCrowd && RecastNavData &&
Path && (Path->GetPathPoints().Num() > 1) &&
Path->PathCorridor.IsValidIndex(PathSectionStart) && Path->PathCorridor.IsValidIndex(PathSectionEnd))
{
FVector TargetPos = PathSectionEndLocation;
if (PathSectionEnd < (Path->PathCorridor.Num() - 1))
{
RecastNavData->GetPolyCenter(Path->PathCorridor[PathSectionEnd], TargetPos);
}
TArray<dtPolyRef> PathRefs;
for (int32 Idx = PathSectionStart; Idx <= PathSectionEnd; Idx++)
{
PathRefs.Add(Path->PathCorridor[Idx]);
}
const INavigationQueryFilterInterface* NavFilter = Path->GetFilter().IsValid() ? Path->GetFilter()->GetImplementation() : MyNavData->GetDefaultQueryFilterImpl();
const dtQueryFilter* DetourFilter = ((const FRecastQueryFilter*)NavFilter)->GetAsDetourQueryFilter();
DetourCrowd->updateAgentFilter(AgentData->AgentIndex, DetourFilter);
DetourCrowd->updateAgentState(AgentData->AgentIndex, false);
const FVector RcTargetPos = Unreal2RecastPoint(TargetPos);
bSuccess = DetourCrowd->requestMoveTarget(AgentData->AgentIndex, PathRefs.Last(), &RcTargetPos.X);
if (bSuccess)
{
bSuccess = DetourCrowd->setAgentCorridor(AgentData->AgentIndex, PathRefs.GetData(), PathRefs.Num());
}
}
#endif
return bSuccess;
}
示例15: CalculateStep1dCDF
/** Calculates the step 1D cumulative distribution function for the given unnormalized probability distribution function. */
void CalculateStep1dCDF(const TArray<float>& PDF, TArray<float>& CDF, float& UnnormalizedIntegral)
{
CDF.Empty(PDF.Num());
float RunningUnnormalizedIntegral = 0;
CDF.Add(0.0f);
for (int32 i = 1; i < PDF.Num(); i++)
{
RunningUnnormalizedIntegral += PDF[i - 1];
CDF.Add(RunningUnnormalizedIntegral);
}
UnnormalizedIntegral = RunningUnnormalizedIntegral + PDF.Last();
if (UnnormalizedIntegral > 0.0f)
{
// Normalize the CDF
for (int32 i = 1; i < CDF.Num(); i++)
{
CDF[i] /= UnnormalizedIntegral;
}
}
check(CDF.Num() == PDF.Num());
}