Add road intersection class
This commit is contained in:
parent
8132b5fdb1
commit
a9f0049e03
|
@ -0,0 +1,61 @@
|
|||
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
|
||||
|
||||
#include "Carla.h"
|
||||
#include "RoadIntersection.h"
|
||||
|
||||
ARoadIntersection::ARoadIntersection(const FObjectInitializer& ObjectInitializer) :
|
||||
Super(ObjectInitializer)
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = false;
|
||||
|
||||
RootComponent =
|
||||
ObjectInitializer.CreateDefaultSubobject<USceneComponent>(this, TEXT("RootComponent"));
|
||||
RootComponent->SetMobility(EComponentMobility::Static);
|
||||
|
||||
#define CARLA_CREATE_STATIC_MESH_COMPONENT(Mesh) \
|
||||
{ \
|
||||
auto Component = CreateDefaultSubobject<UStaticMeshComponent>(TEXT(#Mesh) TEXT("Component")); \
|
||||
Component->SetMobility(EComponentMobility::Static); \
|
||||
Component->SetupAttachment(RootComponent); \
|
||||
StaticMeshComponents.Add(Component); \
|
||||
StaticMeshes.Add(ERoadIntersectionItem:: Mesh, nullptr); \
|
||||
}
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(Lane0)
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(Lane1)
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(Lane2)
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(Lane3)
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(Sidewalk0)
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(Sidewalk1)
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(Sidewalk2)
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(Sidewalk3)
|
||||
CARLA_CREATE_STATIC_MESH_COMPONENT(LaneMarking)
|
||||
#undef CARLA_CREATE_STATIC_MESH_COMPONENT
|
||||
}
|
||||
|
||||
#if WITH_EDITOR
|
||||
void ARoadIntersection::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
|
||||
{
|
||||
Super::PostEditChangeProperty(PropertyChangedEvent);
|
||||
if (PropertyChangedEvent.Property) {
|
||||
UpdateMeshes();
|
||||
}
|
||||
}
|
||||
#endif // WITH_EDITOR
|
||||
|
||||
void ARoadIntersection::SetStaticMesh(ERoadIntersectionItem Item, UStaticMesh *StaticMesh)
|
||||
{
|
||||
if (static_cast<uint8>(Item) < StaticMeshes.Num()) {
|
||||
StaticMeshes[Item] = StaticMesh;
|
||||
}
|
||||
}
|
||||
|
||||
void ARoadIntersection::UpdateMeshes()
|
||||
{
|
||||
check(StaticMeshes.Num() == StaticMeshComponents.Num());
|
||||
int32 i = 0;
|
||||
for (auto Item : StaticMeshes) {
|
||||
check(StaticMeshComponents[i] != nullptr);
|
||||
StaticMeshComponents[i]->SetStaticMesh(Item.Value);
|
||||
++i;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "Components/StaticMeshComponent.h"
|
||||
#include "RoadIntersection.generated.h"
|
||||
|
||||
UENUM(BlueprintType)
|
||||
enum class ERoadIntersectionItem : uint8
|
||||
{
|
||||
Lane0 UMETA(DisplayName = "Lane 1"),
|
||||
Lane1 UMETA(DisplayName = "Lane 2"),
|
||||
Lane2 UMETA(DisplayName = "Lane 3"),
|
||||
Lane3 UMETA(DisplayName = "Lane 4"),
|
||||
Sidewalk0 UMETA(DisplayName = "Sidewalk 1"),
|
||||
Sidewalk1 UMETA(DisplayName = "Sidewalk 2"),
|
||||
Sidewalk2 UMETA(DisplayName = "Sidewalk 3"),
|
||||
Sidewalk3 UMETA(DisplayName = "Sidewalk 4"),
|
||||
LaneMarking UMETA(DisplayName = "LaneMarking"),
|
||||
};
|
||||
|
||||
/// A road intersection.
|
||||
UCLASS()
|
||||
class CARLA_API ARoadIntersection : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
ARoadIntersection(const FObjectInitializer& ObjectInitializer);
|
||||
|
||||
#if WITH_EDITOR
|
||||
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
|
||||
#endif // WITH_EDITOR
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void SetStaticMesh(ERoadIntersectionItem Item, UStaticMesh *StaticMesh);
|
||||
|
||||
private:
|
||||
|
||||
void UpdateMeshes();
|
||||
|
||||
UPROPERTY()
|
||||
TArray<UStaticMeshComponent *> StaticMeshComponents;
|
||||
|
||||
UPROPERTY(Category = "Meshes", EditAnywhere)
|
||||
TMap<ERoadIntersectionItem, UStaticMesh *> StaticMeshes;
|
||||
};
|
Loading…
Reference in New Issue