Add road intersection class

This commit is contained in:
nsubiron 2017-04-28 15:00:37 +01:00
parent 8132b5fdb1
commit a9f0049e03
2 changed files with 110 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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;
};