carla/Source/Carla/RoadSegment.h

137 lines
3.3 KiB
C++

// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
#pragma once
#include "MapGen/StaticMeshCollection.h"
#include "RoadSegment.generated.h"
UENUM(BlueprintType)
enum class ELaneMarkingType : uint8
{
None UMETA(DisplayName = "None"),
Solid UMETA(DisplayName = "Solid Lane Marking"),
Broken UMETA(DisplayName = "Broken Lane Marking")
};
/// Description of a road segment piece.
USTRUCT(BlueprintType)
struct FRoadSegmentPiece
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bHasLeftSidewalk = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bHasRightSidewalk = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
ELaneMarkingType LaneMarking = ELaneMarkingType::Solid;
};
/// A straight segment of road.
///
/// Please call GenerateRoad after modifying it.
UCLASS()
class CARLA_API ARoadSegment : public AStaticMeshCollection
{
GENERATED_BODY()
public:
ARoadSegment(const FObjectInitializer& ObjectInitializer);
virtual void OnConstruction(const FTransform &Transform) override;
#if WITH_EDITOR
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
#endif // WITH_EDITOR
UFUNCTION(BlueprintCallable, Category="Road Description")
void GenerateRoad();
UFUNCTION(BlueprintCallable, Category="Road Description")
int32 GetNumberOfPieces() const
{
return RoadDescription.Num();
}
UFUNCTION(BlueprintCallable, Category="Road Description")
void AppendPiece(const FRoadSegmentPiece &RoadSegmentPiece)
{
RoadDescription.Add(RoadSegmentPiece);
}
UFUNCTION(BlueprintCallable, Category="Road Description")
void RemoveAllPieces()
{
RoadDescription.Empty();
}
UFUNCTION(BlueprintCallable, Category="Set Static Mesh")
void SetStaticMesh_LaneLeft(UStaticMesh *StaticMesh)
{
LaneLeft = StaticMesh;
}
UFUNCTION(BlueprintCallable, Category="Set Static Mesh")
void SetStaticMesh_LaneRight(UStaticMesh *StaticMesh)
{
LaneRight = StaticMesh;
}
UFUNCTION(BlueprintCallable, Category="Set Static Mesh")
void SetStaticMesh_SidewalkLeft(UStaticMesh *StaticMesh)
{
SidewalkLeft = StaticMesh;
}
UFUNCTION(BlueprintCallable, Category="Set Static Mesh")
void SetStaticMesh_SidewalkRight(UStaticMesh *StaticMesh)
{
SidewalkRight = StaticMesh;
}
UFUNCTION(BlueprintCallable, Category="Set Static Mesh")
void SetStaticMesh_LaneMarkingSolid(UStaticMesh *StaticMesh)
{
LaneMarkingSolid = StaticMesh;
}
UFUNCTION(BlueprintCallable, Category="Set Static Mesh")
void SetStaticMesh_LaneMarkingBroken(UStaticMesh *StaticMesh)
{
LaneMarkingBroken = StaticMesh;
}
private:
void UpdateMeshes();
void UpdateRoad();
UPROPERTY(Category = "Road Description", EditAnywhere)
TArray<FRoadSegmentPiece> RoadDescription;
UPROPERTY(Category = "Road Description", AdvancedDisplay, EditAnywhere)
float Scale = 1.0f;
UPROPERTY(Category = "Meshes", EditAnywhere)
UStaticMesh *LaneLeft;
UPROPERTY(Category = "Meshes", EditAnywhere)
UStaticMesh *LaneRight;
UPROPERTY(Category = "Meshes", EditAnywhere)
UStaticMesh *SidewalkLeft;
UPROPERTY(Category = "Meshes", EditAnywhere)
UStaticMesh *SidewalkRight;
UPROPERTY(Category = "Meshes", EditAnywhere)
UStaticMesh *LaneMarkingSolid;
UPROPERTY(Category = "Meshes", EditAnywhere)
UStaticMesh *LaneMarkingBroken;
};