CARLA
 
载入中...
搜索中...
未找到
TriggerFactory.cpp
浏览该文件的文档.
1// Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#include "Carla.h"
9
11#include "Carla/Game/CarlaGameInstance.h" // 引入Game包中的相关功能
13#include "Carla/Actor/ActorBlueprintFunctionLibrary.h" // 引入参与者Actor包中的相关功能
16
17// =============================================================================
18// -- 触发器工厂 ATriggerFactory ------------------------------------------------
19// =============================================================================
20
21// 检索在SensorRegistry中注册的所有传感器的定义。
22TArray<FActorDefinition> ATriggerFactory::GetDefinitions()
23{
24 FActorDefinition TriggerDefinition = FActorDefinition();
25 TriggerDefinition.Class = AFrictionTrigger::StaticClass();
26
27 TArray<FActorDefinition> TriggerDefinitions;
28
29 bool Success;
30 UActorBlueprintFunctionLibrary::MakeTriggerDefinition(TEXT("friction"), Success, TriggerDefinition);
31 check(Success);
32 TriggerDefinitions.Add(TriggerDefinition);
33
34 return TriggerDefinitions;
35}
36
37// 生成参与者
39 const FTransform &Transform,
40 const FActorDescription &Description)
41{
42 auto *World = GetWorld();
43 if (World == nullptr)
44 {
45 UE_LOG(LogCarla, Error, TEXT("ATriggerFactory: cannot spawn trigger into an empty world."));
46 return {};
47 }
48
50 if (GameInstance == nullptr)
51 {
52 UE_LOG(LogCarla, Error, TEXT("ATriggerFactory:: cannot spawn trigger, incompatible game instance."));
53 return {};
54 }
55
56 auto *Trigger = World->SpawnActorDeferred<AFrictionTrigger>(
57 Description.Class,
58 Transform,
59 this,
60 nullptr,
61 ESpawnActorCollisionHandlingMethod::AlwaysSpawn);
62
63 if (Trigger == nullptr)
64 {
65 UE_LOG(LogCarla, Error, TEXT("ATriggerFactory:: spawn trigger failed."));
66 }
67 else
68 {
69 // 获取关卡
70 auto *Episode = GameInstance->GetCarlaEpisode();
71 check(Episode != nullptr);
72 Trigger->SetEpisode(*Episode);
73
74 // 获取摩擦力
76 Description.Variations,
77 3.5f);
78 Trigger->SetFriction(Friction);
79
80 // 获取范围
81 FVector Extent {100.0f, 100.0f, 100.0f};
82
84 Description.Variations,
85 Extent.X);
87 Description.Variations,
88 Extent.Y);
90 Description.Variations,
91 Extent.Z);
92
93 Trigger->SetBoxExtent(Extent);
94 }
95 UGameplayStatics::FinishSpawningActor(Trigger, Transform);
96 return FActorSpawnResult{Trigger};
97}
UE_LOG(LogCarla, Log, TEXT("UActorDispatcher::Destroying actor: '%s' %x"), *Id, Actor)
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld * World
TArray< FActorDefinition > GetDefinitions() final
FActorSpawnResult SpawnActor(const FTransform &SpawnAtTransform, const FActorDescription &ActorDescription) final
static void MakeTriggerDefinition(const FString &Id, bool &Success, FActorDefinition &Definition)
根据ID创建触发器参与者定义,并返回操作是否成功。
static float RetrieveActorAttributeToFloat(const FString &Id, const TMap< FString, FActorAttribute > &Attributes, float Default)
UCarlaEpisode * GetCarlaEpisode()
static UCarlaGameInstance * GetGameInstance(const UObject *WorldContextObject)
TSubclassOf< AActor > Class
要生成的参与者类(可选)
TMap< FString, FActorAttribute > Variations
用户选择了参与者的变化版本。请注意,此时是 由不可修改的属性表示