From fce4d1a9f8e46e16dd1a2ccf6993d5ceed2ccce6 Mon Sep 17 00:00:00 2001 From: nsubiron Date: Mon, 8 Apr 2019 14:41:24 +0200 Subject: [PATCH] Remove deprecated code from Carla plugin --- .../CarlaUE4/Config/CarlaWeather.Town01.ini | 421 ------------------ Unreal/CarlaUE4/Config/CarlaWeather.ini | 418 ----------------- .../Source/Carla/Agent/AgentComponent.cpp | 92 ---- .../Carla/Source/Carla/Agent/AgentComponent.h | 51 --- .../Carla/Agent/AgentComponentVisitor.h | 23 - .../Carla/Agent/TrafficSignAgentComponent.cpp | 23 - .../Carla/Agent/TrafficSignAgentComponent.h | 43 -- .../Carla/Agent/VehicleAgentComponent.cpp | 30 -- .../Carla/Agent/VehicleAgentComponent.h | 58 --- .../Carla/Agent/WalkerAgentComponent.cpp | 21 - .../Source/Carla/Agent/WalkerAgentComponent.h | 61 --- .../Carla/Source/Carla/DynamicWeather.cpp | 217 --------- .../Carla/Source/Carla/DynamicWeather.h | 116 ----- .../Carla/Source/Carla/Game/CarlaEngine.cpp | 4 +- .../Carla/Game/CarlaGameControllerBase.h | 38 -- .../Source/Carla/Game/CarlaGameInstance.cpp | 19 +- .../Source/Carla/Game/CarlaGameInstance.h | 21 - .../Source/Carla/Game/CarlaGameModeBase.cpp | 336 -------------- .../Source/Carla/Game/CarlaGameModeBase.h | 113 ----- .../Carla/Source/Carla/Game/CarlaHUD.cpp | 146 ------ .../Carla/Source/Carla/Game/CarlaHUD.h | 49 -- .../Source/Carla/Game/CarlaPlayerState.cpp | 84 ---- .../Source/Carla/Game/CarlaPlayerState.h | 290 ------------ .../Carla/Source/Carla/Game/DataRouter.cpp | 21 - .../Carla/Source/Carla/Game/DataRouter.h | 62 --- .../Source/Carla/Game/MockGameController.cpp | 65 --- .../Source/Carla/Game/MockGameController.h | 33 -- .../Carla/Game/MockGameControllerSettings.h | 50 --- .../Carla/Source/Carla/MapGen/GraphTypes.h | 3 +- .../Carla/Recorder/CarlaReplayerHelper.cpp | 5 +- .../Carla/Source/Carla/RoadIntersection.cpp | 65 --- .../Carla/Source/Carla/RoadIntersection.h | 53 --- .../Carla/Source/Carla/RoadSegment.cpp | 88 ---- .../Plugins/Carla/Source/Carla/RoadSegment.h | 140 ------ .../Source/Carla/Server/CarlaEncoder.cpp | 210 --------- .../Carla/Source/Carla/Server/CarlaEncoder.h | 75 ---- .../Carla/Source/Carla/Server/CarlaServer.cpp | 213 --------- .../Carla/Source/Carla/Server/CarlaServer.h | 60 --- .../Carla/Server/ServerGameController.cpp | 149 ------- .../Carla/Server/ServerGameController.h | 39 -- .../Settings/CameraPostProcessParameters.h | 52 --- .../Source/Carla/Settings/CarlaSettings.cpp | 137 +----- .../Source/Carla/Settings/CarlaSettings.h | 100 +---- .../Carla/Settings/CarlaSettingsDelegate.cpp | 22 +- .../Carla/Settings/WeatherDescription.cpp | 146 ------ .../Carla/Settings/WeatherDescription.h | 162 ------- .../Source/Carla/Traffic/TrafficSignBase.cpp | 5 - .../Source/Carla/Traffic/TrafficSignBase.h | 5 - .../Carla/Vehicle/CarlaVehicleController.cpp | 125 ------ .../Carla/Vehicle/CarlaVehicleController.h | 116 ----- .../Carla/Vehicle/CarlaWheeledVehicle.cpp | 12 +- .../Carla/Vehicle/CarlaWheeledVehicle.h | 4 - .../Carla/Vehicle/VehicleSpawnerBase.cpp | 212 --------- .../Source/Carla/Vehicle/VehicleSpawnerBase.h | 102 ----- .../Vehicle/WheeledVehicleController.cpp | 203 --------- .../Carla/Vehicle/WheeledVehicleController.h | 126 ------ .../Carla/Walker/WalkerAIController.cpp | 300 ------------- .../Source/Carla/Walker/WalkerAIController.h | 85 ---- .../Source/Carla/Walker/WalkerSpawnerBase.cpp | 339 -------------- .../Source/Carla/Walker/WalkerSpawnerBase.h | 124 ------ .../Source/CarlaUE4/CarlaUE4GameModeBase.cpp | 8 - .../Source/CarlaUE4/CarlaUE4GameModeBase.h | 19 - 62 files changed, 41 insertions(+), 6368 deletions(-) delete mode 100644 Unreal/CarlaUE4/Config/CarlaWeather.Town01.ini delete mode 100644 Unreal/CarlaUE4/Config/CarlaWeather.ini delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponentVisitor.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/TrafficSignAgentComponent.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/TrafficSignAgentComponent.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/WalkerAgentComponent.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/WalkerAgentComponent.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/DynamicWeather.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/DynamicWeather.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameControllerBase.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaHUD.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaHUD.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaPlayerState.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaPlayerState.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/DataRouter.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/DataRouter.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameController.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameController.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameControllerSettings.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadIntersection.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadIntersection.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadSegment.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadSegment.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaEncoder.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaEncoder.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/ServerGameController.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/ServerGameController.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CameraPostProcessParameters.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/WeatherDescription.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/WeatherDescription.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaVehicleController.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaVehicleController.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/VehicleSpawnerBase.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/VehicleSpawnerBase.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/WheeledVehicleController.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/WheeledVehicleController.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerAIController.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerAIController.h delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerSpawnerBase.cpp delete mode 100644 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerSpawnerBase.h delete mode 100644 Unreal/CarlaUE4/Source/CarlaUE4/CarlaUE4GameModeBase.cpp delete mode 100644 Unreal/CarlaUE4/Source/CarlaUE4/CarlaUE4GameModeBase.h diff --git a/Unreal/CarlaUE4/Config/CarlaWeather.Town01.ini b/Unreal/CarlaUE4/Config/CarlaWeather.Town01.ini deleted file mode 100644 index ae9438afb..000000000 --- a/Unreal/CarlaUE4/Config/CarlaWeather.Town01.ini +++ /dev/null @@ -1,421 +0,0 @@ -[Default] -SunPolarAngle=44.586 -SunAzimuthAngle=-179 -SunBrightness=50 -SunDirectionalLightIntensity=15.092 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=16.296 -HorizontFalloff=3 -ZenithColor=(R=0.034046,G=0.109247,B=0.295000,A=1.000000) -HorizonColor=(R=0.659853,G=0.862215,B=1.000000,A=1.000000) -CloudColor=(R=0.855778,G=0.919005,B=1.000000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=5.505 -SkyLightColor=(R=0.149650,G=0.161819,B=0.205000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=40 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[ClearNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=-179 -SunBrightness=50 -SunDirectionalLightIntensity=15.092 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=16.296 -HorizontFalloff=3 -ZenithColor=(R=0.034046,G=0.109247,B=0.295000,A=1.000000) -HorizonColor=(R=0.659853,G=0.862215,B=1.000000,A=1.000000) -CloudColor=(R=0.855778,G=0.919005,B=1.000000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=5.505 -SkyLightColor=(R=0.179300,G=0.188248,B=0.220000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=40 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[CloudyNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=-179 -SunBrightness=0 -SunDirectionalLightIntensity=1.835 -SunDirectionalLightColor=(R=1.000000,G=0.862295,B=0.475000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -HorizonColor=(R=0.169000,G=0.187443,B=0.200000,A=1.000000) -CloudColor=(R=0.143627,G=0.159235,B=0.190000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=36 -SkyLightColor=(R=0.166985,G=0.176777,B=0.240000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[WetNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=-179 -SunBrightness=3.67 -SunDirectionalLightIntensity=20.184 -SunDirectionalLightColor=(R=1.000000,G=0.862295,B=0.475000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=17.431 -HorizontFalloff=5.752 -ZenithColor=(R=0.000000,G=0.085618,B=0.715000,A=1.000000) -HorizonColor=(R=0.532350,G=0.590445,B=0.630000,A=1.000000) -CloudColor=(R=0.143627,G=0.159235,B=0.190000,A=1.000000) -OverallSkyColor=(R=0.660000,G=0.630413,B=0.518100,A=1.000000) -SkyLightIntensity=14.679 -SkyLightColor=(R=0.135000,G=0.120150,B=0.075600,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=54.128 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[WetCloudyNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=-179 -SunBrightness=0 -SunDirectionalLightIntensity=1.835 -SunDirectionalLightColor=(R=1.000000,G=0.862295,B=0.475000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -HorizonColor=(R=0.000000,G=0.000000,B=0.000000,A=1.000000) -CloudColor=(R=0.230559,G=0.255614,B=0.305000,A=1.000000) -OverallSkyColor=(R=0.660000,G=0.630413,B=0.518100,A=1.000000) -SkyLightIntensity=60 -SkyLightColor=(R=0.230000,G=0.204700,B=0.128800,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=47.706 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[MidRainyNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=-179 -SunBrightness=0 -SunDirectionalLightIntensity=1.33 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=14.761 -HorizontFalloff=3 -ZenithColor=(R=0.370000,G=0.370000,B=0.370000,A=1.000000) -HorizonColor=(R=0.169000,G=0.187443,B=0.200000,A=1.000000) -CloudColor=(R=0.042789,G=0.045950,B=0.050000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=70 -SkyLightColor=(R=0.119882,G=0.121557,B=0.170000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=40 -PrecipitationAccumulation=50 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[HardRainNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=-179 -SunBrightness=0 -SunDirectionalLightIntensity=1.33 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=0.580000,G=0.580000,B=0.580000,A=1.000000) -HorizonColor=(R=0.169000,G=0.187443,B=0.200000,A=1.000000) -CloudColor=(R=0.089857,G=0.096495,B=0.105000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=37.66 -SkyLightColor=(R=0.190125,G=0.191290,B=0.225000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=70.826 -PrecipitationAccumulation=87.248 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[SoftRainNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=-179 -SunBrightness=0 -SunDirectionalLightIntensity=1.33 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -HorizonColor=(R=0.169000,G=0.187443,B=0.200000,A=1.000000) -CloudColor=(R=0.440725,G=0.473285,B=0.515000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=3 -SkyLightColor=(R=0.525365,G=0.532706,B=0.745000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=10.55 -PrecipitationAccumulation=61.927 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[ClearSunset] -SunPolarAngle=86 -SunAzimuthAngle=-179 -SunBrightness=1.835 -SunDirectionalLightIntensity=50 -SunDirectionalLightColor=(R=0.810000,G=0.347470,B=0.170100,A=1.000000) -SunIndirectLightIntensity=73.394 -CloudOpacity=13.344 -HorizontFalloff=0.917 -ZenithColor=(R=0.046375,G=0.044100,B=0.105000,A=1.000000) -HorizonColor=(R=0.745000,G=0.219006,B=0.046649,A=1.000000) -CloudColor=(R=1.000000,G=0.561587,B=0.189305,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=14 -SkyLightColor=(R=0.181188,G=0.177630,B=0.260000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[CloudySunset] -SunPolarAngle=86 -SunAzimuthAngle=-179 -SunBrightness=67.89 -SunDirectionalLightIntensity=6.422 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=35.78 -HorizontFalloff=1.835 -ZenithColor=(R=0.192397,G=0.130043,B=0.245000,A=1.000000) -HorizonColor=(R=1.000000,G=0.007579,B=0.000000,A=1.000000) -CloudColor=(R=1.000000,G=0.518982,B=0.175000,A=1.000000) -OverallSkyColor=(R=0.288600,G=0.306730,B=0.370000,A=1.000000) -SkyLightIntensity=46.331 -SkyLightColor=(R=0.193050,G=0.195113,B=0.270000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[WetSunset] -SunPolarAngle=86 -SunAzimuthAngle=-179 -SunBrightness=0 -SunDirectionalLightIntensity=25.688 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=17.596 -HorizontFalloff=1.165 -ZenithColor=(R=0.046375,G=0.044100,B=0.105000,A=1.000000) -HorizonColor=(R=0.695000,G=0.379445,B=0.150922,A=1.000000) -CloudColor=(R=1.000000,G=0.561587,B=0.189305,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=82.568 -SkyLightColor=(R=0.269874,G=0.264000,B=0.400000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=65.046 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[WetCloudySunset] -SunPolarAngle=86 -SunAzimuthAngle=-179 -SunBrightness=67.89 -SunDirectionalLightIntensity=25.688 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=31.514 -HorizontFalloff=1.165 -ZenithColor=(R=0.046375,G=0.044100,B=0.105000,A=1.000000) -HorizonColor=(R=0.695000,G=0.379445,B=0.150922,A=1.000000) -CloudColor=(R=1.000000,G=0.561587,B=0.189305,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=50 -SkyLightColor=(R=0.083625,G=0.081983,B=0.120000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=50 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 -bWind=False -WindIntensity=20 -WindAngle=0 - -[MidRainSunset] -SunPolarAngle=86 -SunAzimuthAngle=-179 -SunBrightness=13.761 -SunDirectionalLightIntensity=12.587 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=44.037 -HorizontFalloff=1.835 -ZenithColor=(R=0.154038,G=0.101968,B=0.295000,A=1.000000) -HorizonColor=(R=1.000000,G=0.655600,B=0.160000,A=1.000000) -CloudColor=(R=0.555000,G=0.314891,B=0.111000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=40 -SkyLightColor=(R=0.203500,G=0.211373,B=0.275000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=37.156 -PrecipitationAccumulation=88.073 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[HardRainSunset] -SunPolarAngle=86 -SunAzimuthAngle=-179 -SunBrightness=13.761 -SunDirectionalLightIntensity=12.587 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=44.037 -HorizontFalloff=1.835 -ZenithColor=(R=0.360000,G=0.000000,B=0.025421,A=1.000000) -HorizonColor=(R=1.000000,G=0.590000,B=0.000000,A=1.000000) -CloudColor=(R=0.555000,G=0.290880,B=0.066600,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=40 -SkyLightColor=(R=0.255300,G=0.265177,B=0.345000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=84.862 -PrecipitationAccumulation=100 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[SoftRainSunset] -SunPolarAngle=86 -SunAzimuthAngle=-179 -SunBrightness=13.761 -SunDirectionalLightIntensity=12.587 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=24.771 -HorizontFalloff=1.835 -ZenithColor=(R=1.000000,G=0.627121,B=0.480000,A=1.000000) -HorizonColor=(R=0.980000,G=0.807226,B=0.558600,A=1.000000) -CloudColor=(R=1.000000,G=0.561963,B=0.190000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=14.679 -SkyLightColor=(R=0.255300,G=0.265177,B=0.345000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=30 -PrecipitationAccumulation=53.211 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - - diff --git a/Unreal/CarlaUE4/Config/CarlaWeather.ini b/Unreal/CarlaUE4/Config/CarlaWeather.ini deleted file mode 100644 index c874e2bfa..000000000 --- a/Unreal/CarlaUE4/Config/CarlaWeather.ini +++ /dev/null @@ -1,418 +0,0 @@ -[Default] -SunPolarAngle=44.586 -SunAzimuthAngle=174 -SunBrightness=50 -SunDirectionalLightIntensity=15.092 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=16.296 -HorizontFalloff=3 -ZenithColor=(R=0.034046,G=0.109247,B=0.295000,A=1.000000) -HorizonColor=(R=0.659853,G=0.862215,B=1.000000,A=1.000000) -CloudColor=(R=0.855778,G=0.919005,B=1.000000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=5.505 -SkyLightColor=(R=0.149650,G=0.161819,B=0.205000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[ClearNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=174 -SunBrightness=50 -SunDirectionalLightIntensity=34.286 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=16.296 -HorizontFalloff=3 -ZenithColor=(R=0.034046,G=0.109247,B=0.295000,A=1.000000) -HorizonColor=(R=0.659853,G=0.862215,B=1.000000,A=1.000000) -CloudColor=(R=0.855778,G=0.919005,B=1.000000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=10 -SkyLightColor=(R=0.195000,G=0.193979,B=0.152151,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[CloudyNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=174 -SunBrightness=0 -SunDirectionalLightIntensity=1.835 -SunDirectionalLightColor=(R=1.000000,G=0.862295,B=0.475000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -HorizonColor=(R=0.169000,G=0.187443,B=0.200000,A=1.000000) -CloudColor=(R=0.143627,G=0.159235,B=0.190000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=16.514 -SkyLightColor=(R=0.100887,G=0.106803,B=0.145000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[WetNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=174 -SunBrightness=3.67 -SunDirectionalLightIntensity=20.184 -SunDirectionalLightColor=(R=1.000000,G=0.862295,B=0.475000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=17.431 -HorizontFalloff=5.752 -ZenithColor=(R=0.000000,G=0.085618,B=0.715000,A=1.000000) -HorizonColor=(R=0.532350,G=0.590445,B=0.630000,A=1.000000) -CloudColor=(R=0.143627,G=0.159235,B=0.190000,A=1.000000) -OverallSkyColor=(R=0.660000,G=0.630413,B=0.518100,A=1.000000) -SkyLightIntensity=14.679 -SkyLightColor=(R=0.135000,G=0.120150,B=0.075600,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=54.128 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[WetCloudyNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=174 -SunBrightness=0 -SunDirectionalLightIntensity=1.835 -SunDirectionalLightColor=(R=1.000000,G=0.862295,B=0.475000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -HorizonColor=(R=0.000000,G=0.000000,B=0.000000,A=1.000000) -CloudColor=(R=0.230559,G=0.255614,B=0.305000,A=1.000000) -OverallSkyColor=(R=0.660000,G=0.630413,B=0.518100,A=1.000000) -SkyLightIntensity=25.688 -SkyLightColor=(R=0.135000,G=0.120150,B=0.075600,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=47.706 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[MidRainyNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=174 -SunBrightness=0 -SunDirectionalLightIntensity=1.33 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=0.370000,G=0.370000,B=0.370000,A=1.000000) -HorizonColor=(R=0.169000,G=0.187443,B=0.200000,A=1.000000) -CloudColor=(R=0.042789,G=0.045950,B=0.050000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=21.147 -SkyLightColor=(R=0.119882,G=0.121557,B=0.170000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=40 -PrecipitationAccumulation=50 -bWind=False -WindIntensity=40 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[HardRainNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=174 -SunBrightness=0 -SunDirectionalLightIntensity=1.33 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=0.580000,G=0.580000,B=0.580000,A=1.000000) -HorizonColor=(R=0.169000,G=0.187443,B=0.200000,A=1.000000) -CloudColor=(R=0.089857,G=0.096495,B=0.105000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=37.66 -SkyLightColor=(R=0.126934,G=0.128707,B=0.180000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=80 -PrecipitationAccumulation=87.248 -bWind=False -WindIntensity=40 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[SoftRainNoon] -SunPolarAngle=44.586 -SunAzimuthAngle=174 -SunBrightness=0 -SunDirectionalLightIntensity=1.33 -SunDirectionalLightColor=(R=255.000000,G=239.000000,B=194.000000,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=18.431 -HorizontFalloff=3 -ZenithColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -HorizonColor=(R=0.169000,G=0.187443,B=0.200000,A=1.000000) -CloudColor=(R=0.440725,G=0.473285,B=0.515000,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=3 -SkyLightColor=(R=0.525365,G=0.532706,B=0.745000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=10.55 -PrecipitationAccumulation=61.927 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[ClearSunset] -SunPolarAngle=86 -SunAzimuthAngle=174 -SunBrightness=1.835 -SunDirectionalLightIntensity=50 -SunDirectionalLightColor=(R=0.810000,G=0.347470,B=0.170100,A=1.000000) -SunIndirectLightIntensity=73.394 -CloudOpacity=27.63 -HorizontFalloff=0.917 -ZenithColor=(R=0.046375,G=0.044100,B=0.105000,A=1.000000) -HorizonColor=(R=0.745000,G=0.219006,B=0.046649,A=1.000000) -CloudColor=(R=1.000000,G=0.561587,B=0.189305,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=14 -SkyLightColor=(R=0.076220,G=0.074724,B=0.109375,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[CloudySunset] -SunPolarAngle=86 -SunAzimuthAngle=174 -SunBrightness=67.89 -SunDirectionalLightIntensity=6.422 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=28.869 -HorizontFalloff=1.165 -ZenithColor=(R=0.046375,G=0.044100,B=0.105000,A=1.000000) -HorizonColor=(R=1.000000,G=0.007579,B=0.000000,A=1.000000) -CloudColor=(R=1.000000,G=0.518982,B=0.175000,A=1.000000) -OverallSkyColor=(R=0.410000,G=0.410000,B=0.410000,A=1.000000) -SkyLightIntensity=36.239 -SkyLightColor=(R=0.193050,G=0.195113,B=0.270000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[WetSunset] -SunPolarAngle=86 -SunAzimuthAngle=174 -SunBrightness=0 -SunDirectionalLightIntensity=25.688 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=17.596 -HorizontFalloff=1.165 -ZenithColor=(R=0.046375,G=0.044100,B=0.105000,A=1.000000) -HorizonColor=(R=0.695000,G=0.379445,B=0.150922,A=1.000000) -CloudColor=(R=1.000000,G=0.561587,B=0.189305,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=66.972 -SkyLightColor=(R=0.113887,G=0.110000,B=0.200000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=65.046 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[WetCloudySunset] -SunPolarAngle=86 -SunAzimuthAngle=174 -SunBrightness=67.89 -SunDirectionalLightIntensity=25.688 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=15 -HorizontFalloff=1.165 -ZenithColor=(R=0.046375,G=0.044100,B=0.105000,A=1.000000) -HorizonColor=(R=0.695000,G=0.379445,B=0.150922,A=1.000000) -CloudColor=(R=1.000000,G=0.561587,B=0.189305,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=50 -SkyLightColor=(R=0.083625,G=0.081983,B=0.120000,A=0.000000) -bPrecipitation=False -PrecipitationType=Rain -PrecipitationAmount=0 -PrecipitationAccumulation=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[MidRainSunset] -SunPolarAngle=86 -SunAzimuthAngle=174 -SunBrightness=12.381 -SunDirectionalLightIntensity=5.714 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=17.143 -HorizontFalloff=1.835 -ZenithColor=(R=0.317708,G=0.208096,B=0.260868,A=1.000000) -HorizonColor=(R=1.000000,G=0.590000,B=0.000000,A=1.000000) -CloudColor=(R=0.555000,G=0.290880,B=0.066600,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=6.667 -SkyLightColor=(R=0.214844,G=0.273773,B=0.750000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=37.156 -PrecipitationAccumulation=88.073 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[HardRainSunset] -SunPolarAngle=86 -SunAzimuthAngle=174 -SunBrightness=0.952 -SunDirectionalLightIntensity=3.063 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=17.37 -HorizontFalloff=1.835 -ZenithColor=(R=0.307292,G=0.161669,B=0.123237,A=1.000000) -HorizonColor=(R=0.453125,G=0.297809,B=0.228923,A=1.000000) -CloudColor=(R=0.416667,G=0.288257,B=0.189558,A=1.000000) -OverallSkyColor=(R=1.000000,G=0.736403,B=0.487039,A=1.000000) -SkyLightIntensity=5.81 -SkyLightColor=(R=0.500000,G=0.383356,B=0.250000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=84.862 -PrecipitationAccumulation=100 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - -[SoftRainSunset] -SunPolarAngle=86 -SunAzimuthAngle=174 -SunBrightness=13.761 -SunDirectionalLightIntensity=12.587 -SunDirectionalLightColor=(R=0.810000,G=0.347162,B=0.083003,A=1.000000) -SunIndirectLightIntensity=6 -CloudOpacity=34.513 -HorizontFalloff=1.835 -ZenithColor=(R=0.360000,G=0.125625,B=0.142175,A=1.000000) -HorizonColor=(R=1.000000,G=0.590000,B=0.000000,A=1.000000) -CloudColor=(R=0.296875,G=0.169776,B=0.061849,A=1.000000) -OverallSkyColor=(R=1.000000,G=1.000000,B=1.000000,A=1.000000) -SkyLightIntensity=7.339 -SkyLightColor=(R=0.458070,G=0.394209,B=0.750000,A=0.000000) -bPrecipitation=True -PrecipitationType=Rain -PrecipitationAmount=8.716 -PrecipitationAccumulation=53.211 -bWind=False -WindIntensity=20 -WindAngle=0 -bOverrideCameraPostProcessParameters=True -CameraPostProcessParameters.AutoExposureMethod=Histogram -CameraPostProcessParameters.AutoExposureMinBrightness=0.27 -CameraPostProcessParameters.AutoExposureMaxBrightness=5 -CameraPostProcessParameters.AutoExposureBias=-3.5 - - diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.cpp deleted file mode 100644 index d31d83560..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.cpp +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Carla.h" -#include "AgentComponent.h" -#include "Engine/World.h" -#include "Game/CarlaGameModeBase.h" -#include "Game/DataRouter.h" -#include "Engine/Engine.h" -#include "Kismet/GameplayStatics.h" - -static FDataRouter *GetDataRouter(UWorld *World) -{ - check(World != nullptr); - ACarlaGameModeBase *GameMode = Cast(World->GetAuthGameMode()); - return GameMode != nullptr ? &GameMode->GetDataRouter() : nullptr; -} - -UAgentComponent::UAgentComponent(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - bVisible = false; - bHiddenInGame = true; - SetShouldUpdatePhysicsVolume(false); - PrimaryComponentTick.bCanEverTick = false; -} - -void UAgentComponent::AcceptVisitor(IAgentComponentVisitor &Visitor) const -{ - unimplemented(); -} - -void UAgentComponent::BeginPlay() -{ - Super::BeginPlay(); - - if (bRegisterAgentComponent) - { - /** - * This only returns true if the current game mode is not null - * because you can only access a game mode if you are the host - * @param oftheworld UWorld is needed to access the game mode - * @return true if there is a game mode and it is not null - */ - if(UGameplayStatics::GetGameMode(GetWorld())!=nullptr) - { - auto *DataRouter = GetDataRouter(GetWorld()); - if (DataRouter != nullptr) - { - DataRouter->RegisterAgent(this); - } - } else - { - UCarlaGameInstance* GameInstance = Cast(UGameplayStatics::GetGameInstance(GetWorld())); - if(GameInstance) GameInstance->GetDataRouter().RegisterAgent(this); - } - bAgentComponentIsRegistered = true; - } -} - -void UAgentComponent::EndPlay(const EEndPlayReason::Type EndPlayReason) -{ - if (bAgentComponentIsRegistered) - { - FDataRouter *DataRouter = nullptr; - if(UGameplayStatics::GetGameMode(GetWorld())!=nullptr) - { - DataRouter = GetDataRouter(GetWorld()); - } - else - { - UCarlaGameInstance *GameInstance = Cast(UGameplayStatics::GetGameInstance(GetWorld())); - if(GameInstance) - { - DataRouter = &GameInstance->GetDataRouter(); - } - } - if (DataRouter != nullptr) - { - DataRouter->DeregisterAgent(this); - } - bAgentComponentIsRegistered = false; - } - - Super::EndPlay(EndPlayReason); -} - diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.h deleted file mode 100644 index c9b241ec8..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Agent/AgentComponentVisitor.h" - -#include "Components/SceneComponent.h" -#include "Templates/SharedPointer.h" - -#include "AgentComponent.generated.h" - -/// Actors with an UAgentComponent are registered as agents in the scene and -/// their status is sent to the client each frame (if requested by the client). -UCLASS(Abstract) -class CARLA_API UAgentComponent : public USceneComponent -{ - GENERATED_BODY() - -public: - - UAgentComponent(const FObjectInitializer& ObjectInitializer); - - uint32 GetId() const - { - return GetTypeHash(this); - } - - virtual void AcceptVisitor(IAgentComponentVisitor &Visitor) const; - -protected: - - virtual void BeginPlay() override; - - virtual void EndPlay(EEndPlayReason::Type EndPlayReason) override; - -protected: - - /** If true, this component will be registered at BeginPlay. */ - UPROPERTY(Category = "Agent Component", EditAnywhere) - bool bRegisterAgentComponent = true; - -private: - - /** Whether this component has been registered. */ - UPROPERTY(Category = "Agent Component", VisibleAnywhere, AdvancedDisplay) - bool bAgentComponentIsRegistered = false; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponentVisitor.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponentVisitor.h deleted file mode 100644 index 9229e7170..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponentVisitor.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -class UAgentComponent; -class UTrafficSignAgentComponent; -class UVehicleAgentComponent; -class UWalkerAgentComponent; - -class IAgentComponentVisitor -{ -public: - - virtual void Visit(const UTrafficSignAgentComponent &) = 0; - - virtual void Visit(const UVehicleAgentComponent &) = 0; - - virtual void Visit(const UWalkerAgentComponent &) = 0; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/TrafficSignAgentComponent.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/TrafficSignAgentComponent.cpp deleted file mode 100644 index e3aaa63a5..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/TrafficSignAgentComponent.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Carla.h" -#include "TrafficSignAgentComponent.h" - -#include "Traffic/TrafficSignBase.h" - -UTrafficSignAgentComponent::UTrafficSignAgentComponent(const FObjectInitializer &ObjectInitializer) - : Super(ObjectInitializer) {} - -void UTrafficSignAgentComponent::BeginPlay() -{ - TrafficSign = Cast(GetOwner()); - checkf(TrafficSign != nullptr, TEXT("UTrafficSignAgentComponent can only be attached to ATrafficSignBase")); - - Super::BeginPlay(); -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/TrafficSignAgentComponent.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/TrafficSignAgentComponent.h deleted file mode 100644 index 5c60eb0ab..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/TrafficSignAgentComponent.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Agent/AgentComponent.h" - -#include "TrafficSignAgentComponent.generated.h" - -class ATrafficSignBase; - -UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent)) -class CARLA_API UTrafficSignAgentComponent : public UAgentComponent -{ - GENERATED_BODY() - -public: - - UTrafficSignAgentComponent(const FObjectInitializer &ObjectInitializer); - - const ATrafficSignBase &GetTrafficSign() const - { - check(TrafficSign != nullptr); - return *TrafficSign; - } - -protected: - - virtual void BeginPlay() override; - - virtual void AcceptVisitor(IAgentComponentVisitor &Visitor) const final - { - Visitor.Visit(*this); - } - -private: - - UPROPERTY() - ATrafficSignBase *TrafficSign = nullptr; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.cpp deleted file mode 100644 index edce600ba..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Carla.h" -#include "VehicleAgentComponent.h" - -static bool IsPlayer(const ACarlaWheeledVehicle &InVehicle) -{ - auto *Controller = Cast(InVehicle.GetController()); - return (Controller != nullptr) && Controller->IsPossessingThePlayer(); -} - -UVehicleAgentComponent::UVehicleAgentComponent(const FObjectInitializer &ObjectInitializer) - : Super(ObjectInitializer) {} - -void UVehicleAgentComponent::BeginPlay() -{ - Vehicle = Cast(GetOwner()); - checkf(Vehicle != nullptr, TEXT("UVehicleAgentComponent can only be attached to ACarlaWheeledVehicle")); - - // We only want to register non-player agents. - bRegisterAgentComponent = !IsPlayer(*Vehicle); - - Super::BeginPlay(); -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.h deleted file mode 100644 index 0acc92a83..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Agent/AgentComponent.h" - -#include "Vehicle/CarlaWheeledVehicle.h" - -#include "VehicleAgentComponent.generated.h" - -UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent)) -class CARLA_API UVehicleAgentComponent : public UAgentComponent -{ - GENERATED_BODY() - -public: - - UVehicleAgentComponent(const FObjectInitializer &ObjectInitializer); - - /// Return forward speed in cm/s. - float GetForwardSpeed() const - { - return Vehicle->GetVehicleForwardSpeed(); - } - - FTransform GetTransform() const - { - return Vehicle->GetVehicleTransform(); - } - - FTransform GetBoundingBoxTransform() const - { - return Vehicle->GetVehicleBoundingBoxTransform(); - } - - FVector GetBoundingBoxExtent() const - { - return Vehicle->GetVehicleBoundingBoxExtent(); - } - -protected: - - virtual void BeginPlay() override; - - virtual void AcceptVisitor(IAgentComponentVisitor &Visitor) const final - { - Visitor.Visit(*this); - } - -private: - - UPROPERTY() - ACarlaWheeledVehicle *Vehicle = nullptr; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/WalkerAgentComponent.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/WalkerAgentComponent.cpp deleted file mode 100644 index ad85de085..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/WalkerAgentComponent.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Carla.h" -#include "WalkerAgentComponent.h" - -UWalkerAgentComponent::UWalkerAgentComponent(const FObjectInitializer &ObjectInitializer) - : Super(ObjectInitializer) {} - -void UWalkerAgentComponent::BeginPlay() -{ - Walker = Cast(GetOwner()); - checkf(Walker != nullptr, TEXT("UWalkerAgentComponent can only be attached to ACharacter")); - - Super::BeginPlay(); -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/WalkerAgentComponent.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/WalkerAgentComponent.h deleted file mode 100644 index 7bae45440..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/WalkerAgentComponent.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Agent/AgentComponent.h" - -#include "GameFramework/Character.h" - -#include "WalkerAgentComponent.generated.h" - -/// This component can be added to any ACharacter to be added as agent. -/// See UAgentComponent. -UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent)) -class CARLA_API UWalkerAgentComponent : public UAgentComponent -{ - GENERATED_BODY() - -public: - - UWalkerAgentComponent(const FObjectInitializer &ObjectInitializer); - - /// Return forward speed in cm/s. - float GetForwardSpeed() const - { - return FVector::DotProduct(Walker->GetVelocity(), Walker->GetActorRotation().Vector()); - } - - FTransform GetTransform() const - { - return Walker->GetActorTransform(); - } - - FTransform GetBoundingBoxTransform() const - { - return FTransform(); - } - - FVector GetBoundingBoxExtent() const - { - /// @todo Perhaps the box it is not the same for every walker... - return {45.0f, 35.0f, 100.0f}; - } - -protected: - - virtual void BeginPlay() override; - - virtual void AcceptVisitor(IAgentComponentVisitor &Visitor) const final - { - Visitor.Visit(*this); - } - -private: - - UPROPERTY() - ACharacter *Walker = nullptr; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/DynamicWeather.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/DynamicWeather.cpp deleted file mode 100644 index 15c0348d6..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/DynamicWeather.cpp +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "DynamicWeather.h" - -#include "Util/IniFile.h" - -#include "Components/ArrowComponent.h" - -static FString GetIniFileName(const FString &MapName = TEXT("")) -{ - const FString BaseName = TEXT("CarlaWeather"); - constexpr auto Sep = TEXT("."); - constexpr auto Ext = TEXT(".ini"); - return (MapName.IsEmpty() ? (BaseName + Ext) : (BaseName + Sep + MapName + Ext)); -} - -static bool GetWeatherIniFilePath(const FString &FileName, FString &FilePath) -{ - FilePath = FPaths::Combine(FPaths::ProjectConfigDir(), FileName); - const bool bFileExists = FPaths::FileExists(FilePath); - if (!bFileExists) { - UE_LOG(LogCarla, Warning, TEXT("\"%s\" not found"), *FilePath); - } - return bFileExists; -} - -static bool CheckWeatherValidity(const FWeatherDescription &Weather) -{ - if (Weather.Name.IsEmpty()) { - UE_LOG(LogCarla, Error, TEXT("Weather doesn't have a name, please provide one")); - return false; - } - return true; -} - -void ADynamicWeather::LoadWeatherDescriptionsFromFile( - const FString &MapName, - TArray &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"); - } -} - -ADynamicWeather::ADynamicWeather(const FObjectInitializer& ObjectInitializer) : - Super(ObjectInitializer) -#if WITH_EDITORONLY_DATA - , FileName(GetIniFileName()) -#endif // WITH_EDITORONLY_DATA -{ - PrimaryActorTick.bCanEverTick = false; - - RootComponent = ObjectInitializer.CreateDefaultSubobject(this, TEXT("SceneComponent0")); - -#if WITH_EDITORONLY_DATA - ArrowComponent = CreateEditorOnlyDefaultSubobject(TEXT("ArrowComponent0")); - if (ArrowComponent) { - ArrowComponent->ArrowColor = FColor(150, 200, 255); - ArrowComponent->bTreatAsASprite = true; - ArrowComponent->SpriteInfo.Category = TEXT("Lighting"); - ArrowComponent->SpriteInfo.DisplayName = NSLOCTEXT( "SpriteCategory", "Lighting", "Lighting" ); - ArrowComponent->SetupAttachment(RootComponent); - ArrowComponent->bLightAttachment = true; - ArrowComponent->bIsScreenSizeScaled = true; - } -#endif // WITH_EDITORONLY_DATA -} - -void ADynamicWeather::OnConstruction(const FTransform &Transform) -{ - Super::OnConstruction(Transform); -#if WITH_EDITOR - Update(); -#endif // WITH_EDITOR -} - -void ADynamicWeather::BeginPlay() -{ - Super::BeginPlay(); -#if WITH_EDITOR - Update(); -#endif // WITH_EDITOR -} - -#if WITH_EDITOR - -void ADynamicWeather::PostEditChangeProperty(FPropertyChangedEvent &Event) -{ - Super::PostEditChangeProperty(Event); - const FName PropertyName = (Event.Property != NULL ? Event.Property->GetFName() : NAME_None); - if (PropertyName == GET_MEMBER_NAME_CHECKED(ADynamicWeather, Weather)) { - Update(); - } else if ((PropertyName == GET_MEMBER_NAME_CHECKED(ADynamicWeather, bSaveToConfigFile)) || - (PropertyName == GET_MEMBER_NAME_CHECKED(ADynamicWeather, bLoadFromConfigFile))) { - // Do nothing. - } else { - AdjustSunPositionBasedOnActorRotation(); - } - if (bSaveToConfigFile) { - bSaveToConfigFile = false; - if (SaveToConfigFile()) { - UE_LOG(LogCarla, Log, TEXT("Weather \"%s\" saved to config file"), *Weather.Name); - } else { - UE_LOG(LogCarla, Error, TEXT("Error saving weather to config file")); - } - } - if (bLoadFromConfigFile) { - bLoadFromConfigFile = false; - if (LoadFromConfigFile()) { - UE_LOG(LogCarla, Log, TEXT("Weather \"%s\" loaded from config file"), *Weather.Name); - Update(); - } else { - UE_LOG(LogCarla, Error, TEXT("Error loading weather from config file")); - } - } -} - -void ADynamicWeather::EditorApplyRotation( - const FRotator &DeltaRotation, - bool bAltDown, - bool bShiftDown, - bool bCtrlDown) -{ - Super::EditorApplyRotation(DeltaRotation, bAltDown, bShiftDown, bCtrlDown); - AdjustSunPositionBasedOnActorRotation(); -} - -#endif // WITH_EDITOR - -FVector ADynamicWeather::GetSunDirection() const -{ - const FVector2D SphericalCoords( - FMath::DegreesToRadians(Weather.SunPolarAngle), - FMath::DegreesToRadians(Weather.SunAzimuthAngle)); - return - SphericalCoords.SphericalToUnitCartesian(); -} - -void ADynamicWeather::AdjustSunPositionBasedOnActorRotation() -{ - const FVector Direction = - GetActorQuat().GetForwardVector(); - const FVector2D SphericalCoords = Direction.UnitCartesianToSpherical(); - Weather.SunPolarAngle = FMath::RadiansToDegrees(SphericalCoords.X); - Weather.SunAzimuthAngle = FMath::RadiansToDegrees(SphericalCoords.Y); -} - -#if WITH_EDITOR - -void ADynamicWeather::Update() -{ - // Modify this actor's rotation according to Sun position. - if (!SetActorRotation(FQuat(GetSunDirection().Rotation()), ETeleportType::None)) { - UE_LOG(LogCarla, Warning, TEXT("Unable to rotate actor")); - } - - if (bRefreshAutomatically) { - RefreshWeather(); - } -} - -bool ADynamicWeather::LoadFromConfigFile() -{ - FString FilePath; - if (GetWeatherIniFilePath(FileName, FilePath) && CheckWeatherValidity(Weather)) { - FIniFile ConfigFile(FilePath); - if (!ConfigFile.HasSection(Weather.Name)) { - UE_LOG(LogCarla, Error, TEXT("Weather \"%s\" is not present in config file"), *Weather.Name); - return false; - } - Weather.ReadFromConfigFile(ConfigFile, Weather.Name); - return true; - } else { - return false; - } -} - -bool ADynamicWeather::SaveToConfigFile() const -{ - FString FilePath; - if (GetWeatherIniFilePath(FileName, FilePath) && CheckWeatherValidity(Weather)) { - FIniFile ConfigFile(FilePath); - Weather.WriteToConfigFile(ConfigFile); - return ConfigFile.Write(FilePath); - } else { - return false; - } -} - -#endif // WITH_EDITOR diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/DynamicWeather.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/DynamicWeather.h deleted file mode 100644 index c28cf13c7..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/DynamicWeather.h +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "GameFramework/Actor.h" - -#include "Settings/WeatherDescription.h" - -#include "DynamicWeather.generated.h" - -class UArrowComponent; - -UCLASS(Abstract) -class CARLA_API ADynamicWeather : public AActor -{ - GENERATED_BODY() - -public: - - /// Load weather descriptions from config file. - /// - /// Settings are loaded in order from the following file list, with values - /// later in the list overriding earlier values - /// - /// * Config/CarlaWeather.ini - /// * Config/.CarlaWeather.ini - /// - /// If no description is found, the default one is added. - static void LoadWeatherDescriptionsFromFile( - const FString &MapName, - TArray &Descriptions); - - ADynamicWeather(const FObjectInitializer& ObjectInitializer); - - virtual void OnConstruction(const FTransform &Transform) override; - - virtual void BeginPlay() override; - -#if WITH_EDITOR - - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; - - virtual void EditorApplyRotation(const FRotator & DeltaRotation, bool bAltDown, bool bShiftDown, bool bCtrlDown) override; - -#endif // WITH_EDITOR - - void SetWeatherDescription(const FWeatherDescription &WeatherDescription) - { - Weather = WeatherDescription; - } - - UFUNCTION(BlueprintCallable) - const FWeatherDescription &GetWeatherDescription() const - { - return Weather; - } - - UFUNCTION(BlueprintCallable) - void ActivateWeatherDescription(const FWeatherDescription &WeatherDescription) - { - SetWeatherDescription(WeatherDescription); - RefreshWeather(); - } - - UFUNCTION(BlueprintImplementableEvent) - void RefreshWeather(); - - UFUNCTION(BlueprintCallable) - FVector GetSunDirection() const; - -private: - - void AdjustSunPositionBasedOnActorRotation(); - -#if WITH_EDITOR - - void Update(); - - bool LoadFromConfigFile(); - - bool SaveToConfigFile() const; - -#endif // WITH_EDITOR - -#if WITH_EDITORONLY_DATA - - UPROPERTY() - UArrowComponent *ArrowComponent; - - /** If true, the weather is refreshed on construction and at begin play. - * Useful for editing the weather (Editor only). - */ - UPROPERTY(Category = "Weather Description", EditAnywhere) - bool bRefreshAutomatically = false; - - /** Load the section with the currently set name. */ - UPROPERTY(Category = "Weather Description", EditAnywhere) - bool bLoadFromConfigFile = false; - - /** Save current settings to disk. */ - UPROPERTY(Category = "Weather Description", EditAnywhere) - bool bSaveToConfigFile = false; - - /** Name of the file to load and save. File must exist in Config folder. */ - UPROPERTY(Category = "Weather Description", EditAnywhere) - FString FileName; - -#endif // WITH_EDITORONLY_DATA - - UPROPERTY(Category = "Weather Description", EditAnywhere) - FWeatherDescription Weather; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaEngine.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaEngine.cpp index 0704f8851..60a21e352 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaEngine.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaEngine.cpp @@ -33,8 +33,8 @@ void FCarlaEngine::NotifyInitGame(const UCarlaSettings &Settings) { if (!bIsRunning) { - const auto StreamingPort = Settings.StreamingPort.Get(Settings.WorldPort + 1u); - auto BroadcastStream = Server.Start(Settings.WorldPort, StreamingPort); + const auto StreamingPort = Settings.StreamingPort.Get(Settings.RPCPort + 1u); + auto BroadcastStream = Server.Start(Settings.RPCPort, StreamingPort); Server.AsyncRun(GetNumberOfThreadsForRPCServer()); WorldObserver.SetStream(BroadcastStream); diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameControllerBase.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameControllerBase.h deleted file mode 100644 index 50d4c9c2b..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameControllerBase.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Containers/Array.h" - -class AController; -class APlayerStart; -class FDataRouter; -class UCarlaSettings; - -/// Base class for a CARLA game controller. -class ICarlaGameControllerBase -{ -public: - - ICarlaGameControllerBase(FDataRouter &DataRouter) : DataRouter(DataRouter) {} - - virtual ~ICarlaGameControllerBase() {} - - virtual void Initialize(UCarlaSettings &CarlaSettings) = 0; - - virtual APlayerStart *ChoosePlayerStart(const TArray &AvailableStartSpots) = 0; - - virtual void RegisterPlayer(AController &NewPlayer) = 0; - - virtual void BeginPlay() = 0; - - virtual void Tick(float DeltaSeconds) = 0; - -protected: - - FDataRouter &DataRouter; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.cpp index 6333b65fd..0c03ada25 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.cpp @@ -5,11 +5,9 @@ // For a copy, see . #include "Carla.h" -#include "CarlaGameInstance.h" +#include "Carla/Game/CarlaGameInstance.h" -#include "Game/MockGameController.h" -#include "Server/ServerGameController.h" -#include "Settings/CarlaSettings.h" +#include "Carla/Settings/CarlaSettings.h" UCarlaGameInstance::UCarlaGameInstance() { CarlaSettings = CreateDefaultSubobject(TEXT("CarlaSettings")); @@ -19,16 +17,3 @@ UCarlaGameInstance::UCarlaGameInstance() { } UCarlaGameInstance::~UCarlaGameInstance() = default; - -void UCarlaGameInstance::InitializeGameControllerIfNotPresent( - const FMockGameControllerSettings &MockControllerSettings) -{ - if (GameController == nullptr) { - if (CarlaSettings->bUseNetworking) { - GameController = MakeUnique(DataRouter); - } else { - GameController = MakeUnique(DataRouter, MockControllerSettings); - UE_LOG(LogCarla, Log, TEXT("Using mock CARLA controller")); - } - } -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.h index 2bb4e44c2..805770e4d 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.h @@ -9,14 +9,11 @@ #include "Engine/GameInstance.h" #include "Carla/Game/CarlaEngine.h" -#include "Carla/Game/CarlaGameControllerBase.h" -#include "Carla/Game/DataRouter.h" #include "Carla/Server/TheNewCarlaServer.h" #include "CarlaGameInstance.generated.h" class UCarlaSettings; -struct FMockGameControllerSettings; /// The game instance contains elements that must be kept alive in between /// levels. It is instantiate once per game. @@ -31,15 +28,6 @@ public: ~UCarlaGameInstance(); - void InitializeGameControllerIfNotPresent( - const FMockGameControllerSettings &MockControllerSettings); - - ICarlaGameControllerBase &GetGameController() - { - check(GameController != nullptr); - return *GameController; - } - UCarlaSettings &GetCarlaSettings() { check(CarlaSettings != nullptr); @@ -65,11 +53,6 @@ public: return CarlaEngine.GetCurrentEpisode(); } - FDataRouter &GetDataRouter() - { - return DataRouter; - } - void NotifyInitGame() { CarlaEngine.NotifyInitGame(GetCarlaSettings()); @@ -95,9 +78,5 @@ private: UPROPERTY(Category = "CARLA Settings", EditAnywhere) UCarlaSettings *CarlaSettings = nullptr; - FDataRouter DataRouter; - - TUniquePtr GameController; - FCarlaEngine CarlaEngine; }; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp deleted file mode 100644 index be0492895..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp +++ /dev/null @@ -1,336 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "Carla/Game/CarlaGameModeBase.h" - -#include "Carla/Game/CarlaGameInstance.h" -#include "Carla/Game/CarlaHUD.h" -#include "Carla/Game/CarlaPlayerState.h" -#include "Carla/Game/Tagger.h" -#include "Carla/Game/TaggerDelegate.h" -#include "Carla/Settings/CarlaSettings.h" -#include "Carla/Settings/CarlaSettingsDelegate.h" -#include "Carla/Util/RandomEngine.h" -#include "Carla/Vehicle/CarlaVehicleController.h" - -#include "ConstructorHelpers.h" -#include "Engine/PlayerStartPIE.h" -#include "EngineUtils.h" -#include "GameFramework/PlayerStart.h" -#include "SceneViewport.h" - -ACarlaGameModeBase::ACarlaGameModeBase(const FObjectInitializer& ObjectInitializer) : - Super(ObjectInitializer), - GameController(nullptr), - PlayerController(nullptr) -{ - PrimaryActorTick.bCanEverTick = true; - PrimaryActorTick.TickGroup = TG_PrePhysics; - bAllowTickBeforeBeginPlay = false; - - PlayerControllerClass = ACarlaVehicleController::StaticClass(); - PlayerStateClass = ACarlaPlayerState::StaticClass(); - HUDClass = ACarlaHUD::StaticClass(); - - TaggerDelegate = CreateDefaultSubobject(TEXT("TaggerDelegate")); - CarlaSettingsDelegate = CreateDefaultSubobject(TEXT("CarlaSettingsDelegate")); -} - -void ACarlaGameModeBase::InitGame( - const FString &MapName, - const FString &Options, - FString &ErrorMessage) -{ - Super::InitGame(MapName, Options, ErrorMessage); - - GameInstance = Cast(GetGameInstance()); - checkf( - GameInstance != nullptr, - TEXT("GameInstance is not a UCarlaGameInstance, did you forget to set it in the project settings?")); - - GameInstance->InitializeGameControllerIfNotPresent(MockGameControllerSettings); - GameController = &GameInstance->GetGameController(); - auto &CarlaSettings = GameInstance->GetCarlaSettings(); - UWorld *world = GetWorld(); - { // Load weather descriptions and initialize game controller. -#if WITH_EDITOR - { - // Hack to be able to test level-specific weather descriptions in editor. - // When playing in editor the map name gets an extra prefix, here we - // remove it. - FString CorrectedMapName = MapName; - constexpr auto PIEPrefix = TEXT("UEDPIE_0_"); - CorrectedMapName.RemoveFromStart(PIEPrefix); - UE_LOG(LogCarla, Log, TEXT("Corrected map name from %s to %s"), *MapName, *CorrectedMapName); - CarlaSettings.MapName = CorrectedMapName; - CarlaSettings.LoadWeatherDescriptions(); - } -#else - CarlaSettings.MapName = MapName; - CarlaSettings.LoadWeatherDescriptions(); -#endif // WITH_EDITOR - GameController->Initialize(CarlaSettings); - CarlaSettings.ValidateWeatherId(); - CarlaSettings.LogSettings(); - } - - // Set default pawn class. - if (!CarlaSettings.PlayerVehicle.IsEmpty()) - { - auto Class = FindObject(ANY_PACKAGE, *CarlaSettings.PlayerVehicle); - if (Class) - { - DefaultPawnClass = Class; - } - else - { - UE_LOG(LogCarla, Error, TEXT("Failed to load player pawn class \"%s\""), *CarlaSettings.PlayerVehicle) - } - } - - if (TaggerDelegate != nullptr) - { - TaggerDelegate->RegisterSpawnHandler(world); - } - else - { - UE_LOG(LogCarla, Error, TEXT("Missing TaggerDelegate!")); - } - - if(CarlaSettingsDelegate!=nullptr) - { - //apply quality settings - CarlaSettingsDelegate->ApplyQualityLevelPostRestart(); - //assign settings delegate for every new actor from now on - CarlaSettingsDelegate->RegisterSpawnHandler(world); - - } - else - { - UE_LOG(LogCarla, Error, TEXT("Missing CarlaSettingsDelegate!")); - } - - if (DynamicWeatherClass != nullptr) - { - DynamicWeather = world->SpawnActor(DynamicWeatherClass); - } - - if (VehicleSpawnerClass != nullptr) - { - VehicleSpawner = world->SpawnActor(VehicleSpawnerClass); - } - - if (WalkerSpawnerClass != nullptr) - { - WalkerSpawner = world->SpawnActor(WalkerSpawnerClass); - } -} - -void ACarlaGameModeBase::RestartPlayer(AController* NewPlayer) -{ - check(NewPlayer != nullptr); - TArray UnOccupiedStartPoints; - APlayerStart *PlayFromHere = FindUnOccupiedStartPoints(NewPlayer, UnOccupiedStartPoints); - bool bStartSpotFound = false; - if (PlayFromHere != nullptr) - { - RestartPlayerAtPlayerStart(NewPlayer, PlayFromHere); - RegisterPlayer(*NewPlayer); - bStartSpotFound = true; - } - else if (UnOccupiedStartPoints.Num() > 0u) - { - check(GameController != nullptr); - APlayerStart *StartSpot = GameController->ChoosePlayerStart(UnOccupiedStartPoints); - if (StartSpot != nullptr) - { - RestartPlayerAtPlayerStart(NewPlayer, StartSpot); - RegisterPlayer(*NewPlayer); - bStartSpotFound = true; - } - } - if(!bStartSpotFound) - { - UE_LOG(LogCarla, Error, TEXT("No start spot found!")); - } - if(CarlaSettingsDelegate != nullptr) - { - CarlaSettingsDelegate->ApplyQualityLevelPreRestart(); - } -} - -void ACarlaGameModeBase::BeginPlay() -{ - Super::BeginPlay(); - - const auto &CarlaSettings = GameInstance->GetCarlaSettings(); - - // Setup semantic segmentation if necessary. - if (CarlaSettings.bSemanticSegmentationEnabled) - { - TagActorsForSemanticSegmentation(); - TaggerDelegate->SetSemanticSegmentationEnabled(); - } - - // Change weather. - if (DynamicWeather != nullptr) - { - const auto *Weather = CarlaSettings.GetActiveWeatherDescription(); - if (Weather != nullptr) - { - UE_LOG(LogCarla, Log, TEXT("Changing weather settings to \"%s\""), *Weather->Name); - DynamicWeather->SetWeatherDescription(*Weather); - DynamicWeather->RefreshWeather(); - } - } - else - { - UE_LOG(LogCarla, Error, TEXT("Missing dynamic weather actor!")); - } - - // Find road map. - TActorIterator It(GetWorld()); - URoadMap *RoadMap = (It ? It->GetRoadMap() : nullptr); - - if (PlayerController != nullptr) - { - PlayerController->SetRoadMap(RoadMap); - } - else - { - UE_LOG(LogCarla, Error, TEXT("Player controller is not a AWheeledVehicleAIController!")); - } - - // Setup other vehicles. - if (VehicleSpawner != nullptr) - { - VehicleSpawner->SetNumberOfVehicles(CarlaSettings.NumberOfVehicles); - VehicleSpawner->SetSeed(CarlaSettings.SeedVehicles); - VehicleSpawner->SetRoadMap(RoadMap); - if (PlayerController != nullptr) - { - PlayerController->GetRandomEngine()->Seed( - VehicleSpawner->GetRandomEngine()->GenerateSeed()); - } - } - else - { - UE_LOG(LogCarla, Error, TEXT("Missing vehicle spawner actor!")); - } - - // Setup walkers. - if (WalkerSpawner != nullptr) - { - WalkerSpawner->SetNumberOfWalkers(CarlaSettings.NumberOfPedestrians); - WalkerSpawner->SetSeed(CarlaSettings.SeedPedestrians); - } - else - { - UE_LOG(LogCarla, Error, TEXT("Missing walker spawner actor!")); - } - - GameController->BeginPlay(); -} - -void ACarlaGameModeBase::EndPlay(const EEndPlayReason::Type EndPlayReason) -{ - Super::EndPlay(EndPlayReason); - if (CarlaSettingsDelegate != nullptr && EndPlayReason!=EEndPlayReason::EndPlayInEditor) - { - CarlaSettingsDelegate->Reset(); - } -} - -void ACarlaGameModeBase::Tick(float DeltaSeconds) -{ - Super::Tick(DeltaSeconds); - GameController->Tick(DeltaSeconds); -} - -void ACarlaGameModeBase::RegisterPlayer(AController &NewPlayer) -{ - check(GameController != nullptr); - AddTickPrerequisiteActor(&NewPlayer); - PlayerController = Cast(&NewPlayer); - if (PlayerController != nullptr) - { - GetDataRouter().RegisterPlayer(*PlayerController); - GameController->RegisterPlayer(*PlayerController); - AttachSensorsToPlayer(); - } - else - { - UE_LOG(LogCarla, Error, TEXT("ACarlaGameModeBase: Player is not a ACarlaVehicleController")); - } -} - -void ACarlaGameModeBase::AttachSensorsToPlayer() -{ - check(PlayerController != nullptr); - UE_LOG(LogCarla, Error, TEXT("Sensors are no longer available in this game mode.")); - // const auto &Settings = GameInstance->GetCarlaSettings(); - // const auto *Weather = Settings.GetActiveWeatherDescription(); - - // for (auto &Item : Settings.SensorDescriptions) - // { - // check(Item.Value != nullptr); - // auto &SensorDescription = *Item.Value; - // if (Weather != nullptr) - // { - // SensorDescription.AdjustToWeather(*Weather); - // } - // auto *Sensor = FSensorFactory::Make(SensorDescription, *GetWorld()); - // check(Sensor != nullptr); - // Sensor->AttachToActor(PlayerController->GetPawn()); - // GetDataRouter().RegisterSensor(*Sensor); - // } -} - -void ACarlaGameModeBase::TagActorsForSemanticSegmentation() -{ - check(GetWorld() != nullptr); - ATagger::TagActorsInLevel(*GetWorld(), true); -} - -APlayerStart *ACarlaGameModeBase::FindUnOccupiedStartPoints( - AController *Player, - TArray &UnOccupiedStartPoints) -{ - APlayerStart* FoundPlayerStart = nullptr; - UClass* PawnClass = GetDefaultPawnClassForController(Player); - APawn* PawnToFit = PawnClass ? PawnClass->GetDefaultObject() : nullptr; - for (TActorIterator It(GetWorld()); It; ++It) - { - APlayerStart* PlayerStart = *It; - - if (PlayerStart->IsA()) - { - FoundPlayerStart = PlayerStart; - break; - } - else - { - FVector ActorLocation = PlayerStart->GetActorLocation(); - const FRotator ActorRotation = PlayerStart->GetActorRotation(); - if (!GetWorld()->EncroachingBlockingGeometry(PawnToFit, ActorLocation, ActorRotation)) - { - UnOccupiedStartPoints.Add(PlayerStart); - } -#if WITH_EDITOR - else if (GetWorld()->FindTeleportSpot(PawnToFit, ActorLocation, ActorRotation)) - { - UE_LOG( - LogCarla, - Warning, - TEXT("Player start cannot be used, occupied location: %s"), - *PlayerStart->GetActorLocation().ToString()); - } -#endif // WITH_EDITOR - } - } - return FoundPlayerStart; -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.h deleted file mode 100644 index 41ce8a73b..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.h +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "GameFramework/GameModeBase.h" - -#include "DynamicWeather.h" -#include "Game/CarlaGameControllerBase.h" -#include "Game/CarlaGameInstance.h" -#include "Game/MockGameControllerSettings.h" -#include "Vehicle/VehicleSpawnerBase.h" -#include "Walker/WalkerSpawnerBase.h" - -#include "CarlaGameModeBase.generated.h" - -class ACarlaVehicleController; -class APlayerStart; -class ASceneCaptureCamera; -class UCarlaGameInstance; -class UTaggerDelegate; -class UCarlaSettingsDelegate; -UCLASS(HideCategories=(ActorTick)) -class CARLA_API ACarlaGameModeBase : public AGameModeBase -{ - GENERATED_BODY() - -public: - - ACarlaGameModeBase(const FObjectInitializer& ObjectInitializer); - - virtual void InitGame(const FString &MapName, const FString &Options, FString &ErrorMessage) override; - - virtual void RestartPlayer(AController *NewPlayer) override; - - virtual void BeginPlay() override; - - virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; - - virtual void Tick(float DeltaSeconds) override; - - FDataRouter &GetDataRouter() - { - check(GameInstance != nullptr); - return GameInstance->GetDataRouter(); - } - - UFUNCTION(BlueprintPure, Category="CARLA Settings") - UCarlaSettingsDelegate *GetCARLASettingsDelegate() - { - return CarlaSettingsDelegate; - } - -protected: - - /** Used only when networking is disabled. */ - UPROPERTY(Category = "Mock CARLA Controller", EditAnywhere, BlueprintReadOnly, meta = (ExposeFunctionCategories = "Mock CARLA Controller")) - FMockGameControllerSettings MockGameControllerSettings; - - /** The class of DynamicWeather to spawn. */ - UPROPERTY(Category = "CARLA Classes", EditAnywhere, BlueprintReadOnly) - TSubclassOf DynamicWeatherClass; - - /** The class of VehicleSpawner to spawn. */ - UPROPERTY(Category = "CARLA Classes", EditAnywhere, BlueprintReadOnly) - TSubclassOf VehicleSpawnerClass; - - /** The class of WalkerSpawner to spawn. */ - UPROPERTY(Category = "CARLA Classes", EditAnywhere, BlueprintReadOnly) - TSubclassOf WalkerSpawnerClass; - -private: - - void RegisterPlayer(AController &NewPlayer); - - void AttachSensorsToPlayer(); - - void TagActorsForSemanticSegmentation(); - - /// Iterate all the APlayerStart present in the world and add the ones with - /// unoccupied locations to @a UnOccupiedStartPoints. - /// - /// @return APlayerStart if "Play from Here" was used while in PIE mode. - APlayerStart *FindUnOccupiedStartPoints( - AController *Player, - TArray &UnOccupiedStartPoints); - - ICarlaGameControllerBase *GameController; - - UPROPERTY() - UCarlaGameInstance *GameInstance; - - UPROPERTY() - ACarlaVehicleController *PlayerController; - - UPROPERTY() - UTaggerDelegate *TaggerDelegate; - - UPROPERTY() - UCarlaSettingsDelegate* CarlaSettingsDelegate; - - UPROPERTY() - ADynamicWeather *DynamicWeather; - - UPROPERTY() - AVehicleSpawnerBase *VehicleSpawner; - - UPROPERTY() - AWalkerSpawnerBase *WalkerSpawner; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaHUD.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaHUD.cpp deleted file mode 100644 index f05cdb01b..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaHUD.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "CarlaHUD.h" - -#include "Vehicle/CarlaVehicleController.h" - -#include "CommandLine.h" -#include "ConstructorHelpers.h" -#include "Engine/Canvas.h" -#include "Engine/Font.h" - -#define LOCTEXT_NAMESPACE "CarlaHUD" - -static bool GetDefaultHUDVisibility() { - return !FParse::Param(FCommandLine::Get(), TEXT("carla-no-hud")); -} - -static FText RoundedFloatAsText(float Value) -{ - return FText::AsNumber(FMath::RoundHalfFromZero(Value)); -} - -static FText GetVectorAsText(const FVector &Vector) -{ - return FText::Format( - LOCTEXT("FVectorFormat", "({0}, {1}, {2})"), - RoundedFloatAsText(Vector.X), - RoundedFloatAsText(Vector.Y), - RoundedFloatAsText(Vector.Z)); -} - -static FText GetVectorAsText(const FVector &Vector, const FNumberFormattingOptions &FormatOpt) -{ - return FText::Format( - LOCTEXT("FVectorFormat", "({0}, {1}, {2})"), - FText::AsNumber(Vector.X, &FormatOpt), - FText::AsNumber(Vector.Y, &FormatOpt), - FText::AsNumber(Vector.Z, &FormatOpt)); -} - -static FText GetGearAsText(int32 Gear) -{ - if (Gear < 0) { - return FText(LOCTEXT("ReverseGear", "R")); - } else { - return (Gear == 0 ? LOCTEXT("NeutralGear", "N") : FText::AsNumber(Gear)); - } -} - -static FText GetTrafficLightAsText(ETrafficLightState State) -{ - switch (State) { - case ETrafficLightState::Green: return FText(LOCTEXT("GreenTrafficLight", "Green")); - case ETrafficLightState::Yellow: return FText(LOCTEXT("YellowTrafficLight", "Yellow")); - case ETrafficLightState::Red: return FText(LOCTEXT("RedTrafficLight", "Red")); - default: return FText(LOCTEXT("InvalidTrafficLight", "INVALID")); - } -} - -static FText GetHUDText(const ACarlaPlayerState &Vehicle) -{ - // Set number precision. - FNumberFormattingOptions HighPrecision; - HighPrecision.MinimumFractionalDigits = 2u; - HighPrecision.MaximumFractionalDigits = 2u; - - constexpr float TO_MILLISECONDS = 1e3; - constexpr float TO_METERS = 1e-2; - constexpr float TO_KMPH = 0.036f; - - FFormatNamedArguments Args; - Args.Add("SimStep", RoundedFloatAsText(Vehicle.GetSimulationStepInSeconds() * TO_MILLISECONDS)); - Args.Add("Location", GetVectorAsText(Vehicle.GetLocation() * TO_METERS)); - Args.Add("Acceleration", GetVectorAsText(Vehicle.GetAcceleration() * TO_METERS, HighPrecision)); - Args.Add("Orientation", GetVectorAsText(Vehicle.GetOrientation(), HighPrecision)); - Args.Add("Speed", RoundedFloatAsText(Vehicle.GetForwardSpeed() * TO_KMPH)); - Args.Add("Gear", GetGearAsText(Vehicle.GetCurrentGear())); - Args.Add("SpeedLimit", RoundedFloatAsText(Vehicle.GetSpeedLimit())); - Args.Add("TrafficLightState", GetTrafficLightAsText(Vehicle.GetTrafficLightState())); - Args.Add("CollisionCars", RoundedFloatAsText(Vehicle.GetCollisionIntensityCars() * TO_METERS)); - Args.Add("CollisionPedestrians", RoundedFloatAsText(Vehicle.GetCollisionIntensityPedestrians() * TO_METERS)); - Args.Add("CollisionOther", RoundedFloatAsText(Vehicle.GetCollisionIntensityOther() * TO_METERS)); - Args.Add("IntersectionOtherLane", RoundedFloatAsText(100.0f * Vehicle.GetOtherLaneIntersectionFactor())); - Args.Add("IntersectionOffRoad", RoundedFloatAsText(100.0f * Vehicle.GetOffRoadIntersectionFactor())); - return FText::Format( - LOCTEXT("HUDTextFormat", - "Simulation Step: {SimStep} ms\n" - "\n" - "Speed: {Speed} km/h\n" - "Gear: {Gear}\n" - "\n" - "Speed Limit: {SpeedLimit} km/h\n" - "Traffic Light: {TrafficLightState}\n" - "\n" - "Location: {Location}\n" - "Orientation: {Orientation}\n" - "Acceleration: {Acceleration}\n" - "\n" - "Collision (Cars): {CollisionCars}\n" - "Collision (Pedestrian): {CollisionPedestrians}\n" - "Collision (Other): {CollisionOther}\n" - "\n" - "Intersection (Lane): {IntersectionOtherLane}%\n" - "Intersection (OffRoad): {IntersectionOffRoad}%") - , - Args); -} - -ACarlaHUD::ACarlaHUD() : - bIsVisible(GetDefaultHUDVisibility()) -{ - static ConstructorHelpers::FObjectFinder Font(TEXT("/Engine/EngineFonts/DroidSansMono")); - HUDFont = Font.Object; -} - -void ACarlaHUD::DrawHUD() -{ - Super::DrawHUD(); - - if (!bIsVisible) - return; - - // Calculate ratio from 720p - const float HUDXRatio = Canvas->SizeX / 1280.f; - const float HUDYRatio = Canvas->SizeY / 720.f; - - ACarlaVehicleController *Vehicle = Cast( - GetOwningPawn() == nullptr ? nullptr : GetOwningPawn()->GetController()); - - if (Vehicle != nullptr) - { - FVector2D ScaleVec(HUDYRatio * 1.4f, HUDYRatio * 1.4f); - - auto Text = GetHUDText(Vehicle->GetPlayerState()); - FCanvasTextItem HUDTextItem(FVector2D(HUDXRatio * 50.0f, HUDYRatio * 330.0f), Text, HUDFont, FLinearColor::White); - HUDTextItem.Scale = ScaleVec; - Canvas->DrawItem(HUDTextItem); - } -} - -#undef LOCTEXT_NAMESPACE diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaHUD.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaHUD.h deleted file mode 100644 index 3b5c932e5..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaHUD.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "GameFramework/HUD.h" -#include "CarlaHUD.generated.h" - -class FTexture; - -UCLASS() -class CARLA_API ACarlaHUD : public AHUD -{ - GENERATED_BODY() - -public: - - ACarlaHUD(); - - UPROPERTY(EditAnywhere) - UFont* HUDFont; - - virtual void DrawHUD() override; - - UFUNCTION(BlueprintCallable) - bool IsVisible() const - { - return bIsVisible; - } - - UFUNCTION(BlueprintCallable) - void SetVisible(bool bInIsVisible) - { - bIsVisible = bInIsVisible; - } - - UFUNCTION(BlueprintCallable) - void ToggleHUDView() - { - SetVisible(!bIsVisible); - } - -private: - - bool bIsVisible; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaPlayerState.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaPlayerState.cpp deleted file mode 100644 index 42be43b28..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaPlayerState.cpp +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "CarlaPlayerState.h" - -#include "CoreGlobals.h" - -void ACarlaPlayerState::Reset() -{ - Super::Reset(); - // Reset incremental values. - GameTimeStamp = 0.0f; - CollisionIntensityCars = 0.0f; - CollisionIntensityPedestrians = 0.0f; - CollisionIntensityOther = 0.0f; -} - -void ACarlaPlayerState::CopyProperties(APlayerState *PlayerState) -{ - Super::CopyProperties(PlayerState); - if ((PlayerState != nullptr) && (this != PlayerState)) - { - ACarlaPlayerState *Other = Cast(PlayerState); - if (Other != nullptr) - { - FrameNumber = Other->FrameNumber; - SimulationStepInSeconds = Other->SimulationStepInSeconds; - PlatformTimeStamp = Other->PlatformTimeStamp; - GameTimeStamp = Other->GameTimeStamp; - Transform = Other->Transform; - ForwardSpeed = Other->ForwardSpeed; - Acceleration = Other->Acceleration; - Throttle = Other->Throttle; - Steer = Other->Steer; - Brake = Other->Brake; - bHandBrake = Other->bHandBrake; - CurrentGear = Other->CurrentGear; - SpeedLimit = Other->SpeedLimit; - TrafficLightState = Other->TrafficLightState; - CollisionIntensityCars = Other->CollisionIntensityCars; - CollisionIntensityPedestrians = Other->CollisionIntensityPedestrians; - CollisionIntensityOther = Other->CollisionIntensityOther; - OtherLaneIntersectionFactor = Other->OtherLaneIntersectionFactor; - OffRoadIntersectionFactor = Other->OffRoadIntersectionFactor; - UE_LOG(LogCarla, Log, TEXT("Copied properties of ACarlaPlayerState")); - } - } -} - -void ACarlaPlayerState::RegisterCollision( - AActor * /*Actor*/, - AActor * /*OtherActor*/, - const FVector &NormalImpulse, - const FHitResult &Hit) -{ - switch (ATagger::GetTagOfTaggedComponent(*Hit.Component)) { - case ECityObjectLabel::Vehicles: - CollisionIntensityCars += NormalImpulse.Size(); - break; - case ECityObjectLabel::Pedestrians: - CollisionIntensityPedestrians += NormalImpulse.Size(); - break; - default: - CollisionIntensityOther += NormalImpulse.Size(); - break; - } -} - -static int32 RoundToMilliseconds(float Seconds) -{ - return FMath::RoundHalfToZero(1000.0 * Seconds); -} - -void ACarlaPlayerState::UpdateTimeStamp(float DeltaSeconds) -{ - FrameNumber = GFrameCounter; - SimulationStepInSeconds = DeltaSeconds; - PlatformTimeStamp = RoundToMilliseconds(FPlatformTime::Seconds()); - GameTimeStamp += RoundToMilliseconds(DeltaSeconds); -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaPlayerState.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaPlayerState.h deleted file mode 100644 index 4d049c703..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaPlayerState.h +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "GameFramework/PlayerState.h" - -#include "Traffic/TrafficLightState.h" - -#include "CarlaPlayerState.generated.h" - -/// Current state of the player, updated every frame by ACarlaVehicleController. -/// -/// This class matches the reward that it is sent to the client over the -/// network. -UCLASS() -class CARLA_API ACarlaPlayerState : public APlayerState -{ - GENERATED_BODY() - - // =========================================================================== - // -- APlayerState ----------------------------------------------------------- - // =========================================================================== -public: - - virtual void Reset() override; - - virtual void CopyProperties(APlayerState *PlayerState) override; - - // =========================================================================== - // -- Getters ---------------------------------------------------------------- - // =========================================================================== -public: - - // =========================================================================== - /// @name Timing - // =========================================================================== - /// @{ - - uint64 GetFrameNumber() const - { - return FrameNumber; - } - - UFUNCTION(BlueprintCallable) - float GetSimulationStepInSeconds() const - { - return SimulationStepInSeconds; - } - - UFUNCTION(BlueprintCallable) - int32 GetPlatformTimeStamp() const - { - return PlatformTimeStamp; - } - - UFUNCTION(BlueprintCallable) - int32 GetGameTimeStamp() const - { - return GameTimeStamp; - } - - /// @} - // =========================================================================== - /// @name Transform and dynamics - // =========================================================================== - /// @{ - - UFUNCTION(BlueprintCallable) - const FTransform &GetPlayerTransform() const - { - return Transform; - } - - UFUNCTION(BlueprintCallable) - FVector GetLocation() const - { - return Transform.GetLocation(); - } - - UFUNCTION(BlueprintCallable) - FVector GetOrientation() const - { - return Transform.GetRotation().GetForwardVector(); - } - - UFUNCTION(BlueprintCallable) - FTransform GetBoundingBoxTransform() const - { - return BoundingBoxTransform; - } - - UFUNCTION(BlueprintCallable) - FVector GetBoundingBoxExtent() const - { - return BoundingBoxExtent; - } - - UFUNCTION(BlueprintCallable) - float GetForwardSpeed() const - { - return ForwardSpeed; - } - - UFUNCTION(BlueprintCallable) - const FVector &GetAcceleration() const - { - return Acceleration; - } - - /// @} - // =========================================================================== - /// @name Vehicle control - // =========================================================================== - /// @{ - - UFUNCTION(BlueprintCallable) - float GetThrottle() const - { - return Throttle; - } - - UFUNCTION(BlueprintCallable) - float GetSteer() const - { - return Steer; - } - - UFUNCTION(BlueprintCallable) - float GetBrake() const - { - return Brake; - } - - UFUNCTION(BlueprintCallable) - bool GetHandBrake() const - { - return bHandBrake; - } - - UFUNCTION(BlueprintCallable) - int32 GetCurrentGear() const - { - return CurrentGear; - } - - UFUNCTION(BlueprintCallable) - float GetSpeedLimit() const - { - return SpeedLimit; - } - - UFUNCTION(BlueprintCallable) - ETrafficLightState GetTrafficLightState() const - { - return TrafficLightState; - } - - /// @} - // =========================================================================== - /// @name Collision - // =========================================================================== - /// @{ - - UFUNCTION(BlueprintCallable) - float GetCollisionIntensityCars() const - { - return CollisionIntensityCars; - } - - UFUNCTION(BlueprintCallable) - float GetCollisionIntensityPedestrians() const - { - return CollisionIntensityPedestrians; - } - - UFUNCTION(BlueprintCallable) - float GetCollisionIntensityOther() const - { - return CollisionIntensityOther; - } - - /// @} - // =========================================================================== - /// @name Road intersection - // =========================================================================== - /// @{ - - UFUNCTION(BlueprintCallable) - float GetOtherLaneIntersectionFactor() const - { - return OtherLaneIntersectionFactor; - } - - UFUNCTION(BlueprintCallable) - float GetOffRoadIntersectionFactor() const - { - return OffRoadIntersectionFactor; - } - - /// @} - // =========================================================================== - // -- Modifiers -------------------------------------------------------------- - // =========================================================================== -private: - - void RegisterCollision( - AActor *Actor, - AActor *OtherActor, - const FVector &NormalImpulse, - const FHitResult &Hit); - - void UpdateTimeStamp(float DeltaSeconds); - - // =========================================================================== - // -- Private members -------------------------------------------------------- - // =========================================================================== -private: - - friend class ACarlaVehicleController; - - // If you add another variable here, don't forget to copy it inside - // CopyProperties if necessary. - - UPROPERTY(VisibleAnywhere) - uint64 FrameNumber; - - UPROPERTY(VisibleAnywhere) - float SimulationStepInSeconds; - - UPROPERTY(VisibleAnywhere) - int32 PlatformTimeStamp; - - UPROPERTY(VisibleAnywhere) - int32 GameTimeStamp = 0.0f; - - UPROPERTY(VisibleAnywhere) - FTransform Transform; - - UPROPERTY(VisibleAnywhere) - FTransform BoundingBoxTransform; - - UPROPERTY(VisibleAnywhere) - FVector BoundingBoxExtent; - - UPROPERTY(VisibleAnywhere) - float ForwardSpeed = 0.0f; - - UPROPERTY(VisibleAnywhere) - FVector Acceleration; - - UPROPERTY(VisibleAnywhere) - float Throttle = 0.0f; - - UPROPERTY(VisibleAnywhere) - float Steer = 0.0f; - - UPROPERTY(VisibleAnywhere) - float Brake = 0.0f; - - UPROPERTY(VisibleAnywhere) - bool bHandBrake = false; - - UPROPERTY(VisibleAnywhere) - int32 CurrentGear; - - UPROPERTY(VisibleAnywhere) - float SpeedLimit = -1.0f; - - UPROPERTY(VisibleAnywhere) - ETrafficLightState TrafficLightState = ETrafficLightState::Green; - - UPROPERTY(VisibleAnywhere) - float CollisionIntensityCars = 0.0f; - - UPROPERTY(VisibleAnywhere) - float CollisionIntensityPedestrians = 0.0f; - - UPROPERTY(VisibleAnywhere) - float CollisionIntensityOther = 0.0f; - - UPROPERTY(VisibleAnywhere) - float OtherLaneIntersectionFactor = 0.0f; - - UPROPERTY(VisibleAnywhere) - float OffRoadIntersectionFactor = 0.0f; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/DataRouter.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/DataRouter.cpp deleted file mode 100644 index 123e3dfe9..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/DataRouter.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "Carla/Game/DataRouter.h" - -void FDataRouter::RestartLevel() -{ - if (Player != nullptr) { - Player->RestartLevel(); - Player = nullptr; - } else { - UE_LOG( - LogCarla, - Error, - TEXT("FDataRouter: Trying to restart level but I don't have any player registered")); - } -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/DataRouter.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/DataRouter.h deleted file mode 100644 index 68c01be50..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/DataRouter.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Carla/Util/NonCopyable.h" -#include "Carla/Vehicle/CarlaVehicleController.h" -#include "Carla/Vehicle/CarlaWheeledVehicle.h" - -class ACarlaPlayerState; -class UAgentComponent; -struct FVehicleControl; - -class FDataRouter : private NonCopyable -{ -public: - - void RegisterPlayer(ACarlaVehicleController &InPlayer) - { - Player = &InPlayer; - } - - void RegisterAgent(const UAgentComponent *Agent) - { - check(Agent != nullptr); - Agents.Emplace(Agent); - } - - void DeregisterAgent(const UAgentComponent *Agent) - { - check(Agent != nullptr); - Agents.RemoveSwap(Agent); - } - - const ACarlaPlayerState &GetPlayerState() const - { - check(Player != nullptr); - return Player->GetPlayerState(); - } - - const TArray &GetAgents() const - { - return Agents; - } - - void ApplyVehicleControl(const FVehicleControl &VehicleControl, EVehicleInputPriority Priority) - { - check((Player != nullptr) && (Player->IsPossessingAVehicle())); - Player->GetPossessedVehicle()->ApplyVehicleControl(VehicleControl, Priority); - } - - void RestartLevel(); - -private: - - TArray Agents; - - ACarlaVehicleController *Player = nullptr; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameController.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameController.cpp deleted file mode 100644 index 10efc8026..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameController.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "MockGameController.h" - -#include "Game/DataRouter.h" - -MockGameController::MockGameController( - FDataRouter &InDataRouter, - const FMockGameControllerSettings &InSettings) - : ICarlaGameControllerBase(InDataRouter), - Settings(InSettings) {} - -void MockGameController::Initialize(UCarlaSettings &CarlaSettings) -{ -#if WITH_EDITOR - if (Settings.bOverrideCarlaSettings) { - CarlaSettings.NumberOfVehicles = Settings.NumberOfVehicles; - CarlaSettings.NumberOfPedestrians = Settings.NumberOfPedestrians; - CarlaSettings.WeatherId = Settings.WeatherId; - } -#endif // WITH_EDITOR - - if (Settings.bChangeWeatherOnBeginPlay && (CarlaSettings.WeatherDescriptions.Num() > 0)) { - static uint32 StaticIndex = 0u; - CarlaSettings.WeatherId = StaticIndex % CarlaSettings.WeatherDescriptions.Num(); - ++StaticIndex; - } -} - -APlayerStart *MockGameController::ChoosePlayerStart( - const TArray &AvailableStartSpots) -{ - check(AvailableStartSpots.Num() > 0); - const uint32 Index = - (Settings.bRandomPlayerStart ? - FMath::RandRange(0, AvailableStartSpots.Num() - 1) : - Settings.PlayerStartIndex % AvailableStartSpots.Num()); - UE_LOG(LogCarla, Log, TEXT("Spawning player at player start %d/%d"), Index, AvailableStartSpots.Num()); - return AvailableStartSpots[Index]; -} - -void MockGameController::RegisterPlayer(AController &NewPlayer) -{ - ACarlaVehicleController *VehicleController = Cast(&NewPlayer); - if (VehicleController != nullptr) { - VehicleController->EnableUserInput(true); - } else { - UE_LOG(LogCarla, Warning, TEXT("Player is not a ACarlaVehicleController")); - } -} - -void MockGameController::BeginPlay() -{ - -} - -void MockGameController::Tick(float /*DeltaSeconds*/) -{ - -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameController.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameController.h deleted file mode 100644 index ce4060ec2..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameController.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Game/CarlaGameControllerBase.h" - -#include "Game/MockGameControllerSettings.h" - -/// Mocks the CARLA game controller class for testing purposes. -class MockGameController : public ICarlaGameControllerBase -{ -public: - - explicit MockGameController(FDataRouter &DataRouter, const FMockGameControllerSettings &Settings); - - virtual void Initialize(UCarlaSettings &CarlaSettings) final; - - virtual APlayerStart *ChoosePlayerStart(const TArray &AvailableStartSpots) final; - - virtual void RegisterPlayer(AController &NewPlayer) final; - - virtual void BeginPlay() final; - - virtual void Tick(float DeltaSeconds) final; - -private: - - FMockGameControllerSettings Settings; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameControllerSettings.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameControllerSettings.h deleted file mode 100644 index e2bb1c57e..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/MockGameControllerSettings.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "MockGameControllerSettings.generated.h" - -USTRUCT(BlueprintType) -struct CARLA_API FMockGameControllerSettings -{ - GENERATED_USTRUCT_BODY() - - /** If true, weather will be changed every time we start the level. - * - * Has precedence over options in "Override CARLA Settings". - */ - UPROPERTY(EditAnywhere, Category = "Mock CARLA Controller") - bool bChangeWeatherOnBeginPlay = false; - - /** If true, a random player start position will be chosen every time we start the level. */ - UPROPERTY(EditAnywhere, Category = "Mock CARLA Controller") - bool bRandomPlayerStart = false; - - /** Index of the player start position. */ - UPROPERTY(EditAnywhere, Category = "Mock CARLA Controller", meta = (EditCondition = "!bRandomPlayerStart", ClampMin = 0)) - int32 PlayerStartIndex = 0; - -#if WITH_EDITORONLY_DATA - - /** Override available settings in CARLA Settings (Editor only). */ - UPROPERTY(EditAnywhere, Category = "Mock CARLA Controller", meta = (DisplayName = "Override CARLA Settings")) - bool bOverrideCarlaSettings = false; - - /** Number of NPC vehicles to be spawned into the level. */ - UPROPERTY(EditAnywhere, Category = "Mock CARLA Controller", meta = (EditCondition = "bOverrideCarlaSettings", ClampMin = 0)) - int32 NumberOfVehicles = 5; - - /** Number of NPC pedestrians to be spawned into the level. */ - UPROPERTY(EditAnywhere, Category = "Mock CARLA Controller", meta = (EditCondition = "bOverrideCarlaSettings", ClampMin = 0)) - int32 NumberOfPedestrians = 15; - - /** Index of the weather setting to use. If negative, weather won't be changed. */ - UPROPERTY(EditAnywhere, Category = "Mock CARLA Controller", meta = (EditCondition = "bOverrideCarlaSettings")) - int32 WeatherId = -1; - -#endif // WITH_EDITORONLY_DATA -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/MapGen/GraphTypes.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/MapGen/GraphTypes.h index 41d3662a4..ae1e86113 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/MapGen/GraphTypes.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/MapGen/GraphTypes.h @@ -6,7 +6,8 @@ #pragma once -#include "CityMapDefinitions.h" +#include "Carla/MapGen/CityMapDefinitions.h" +#include "Carla/Util/NonCopyable.h" #include diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Recorder/CarlaReplayerHelper.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Recorder/CarlaReplayerHelper.cpp index 03bbf6b15..7dc1b0dab 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Recorder/CarlaReplayerHelper.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Recorder/CarlaReplayerHelper.cpp @@ -4,11 +4,14 @@ // This work is licensed under the terms of the MIT license. // For a copy, see . +#include "Carla.h" +#include "Carla/Recorder/CarlaReplayerHelper.h" + #include "Carla/Actor/ActorDescription.h" #include "Carla/Actor/ActorView.h" +#include "Carla/Vehicle/WheeledVehicleAIController.h" #include "Carla/Walker/WalkerControl.h" #include "Carla/Walker/WalkerController.h" -#include "CarlaReplayerHelper.h" // create or reuse an actor for replaying std::pairCarlaReplayerHelper::TryToCreateReplayerActor( diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadIntersection.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadIntersection.cpp deleted file mode 100644 index d05354c9f..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadIntersection.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "RoadIntersection.h" - -ARoadIntersection::ARoadIntersection(const FObjectInitializer& ObjectInitializer) : - Super(ObjectInitializer) -{ - PrimaryActorTick.bCanEverTick = false; - - RootComponent = - ObjectInitializer.CreateDefaultSubobject(this, TEXT("RootComponent")); - RootComponent->SetMobility(EComponentMobility::Static); - -#define CARLA_CREATE_STATIC_MESH_COMPONENT(Mesh) \ - { \ - auto Component = CreateDefaultSubobject(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(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; - } -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadIntersection.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadIntersection.h deleted file mode 100644 index ddfb852eb..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadIntersection.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#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 StaticMeshComponents; - - UPROPERTY(Category = "Meshes", EditAnywhere) - TMap StaticMeshes; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadSegment.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadSegment.cpp deleted file mode 100644 index f564996ea..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadSegment.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "RoadSegment.h" - -#include "Engine/StaticMesh.h" - -enum RoadSegmentItems { - ELaneLeft, - ELaneRight, - ESidewalkLeft, - ESidewalkRight, - ELaneMarkingSolid, - ELaneMarkingBroken, - NUMBER_OF_ITEMS -}; - -ARoadSegment::ARoadSegment(const FObjectInitializer& ObjectInitializer) : - Super(ObjectInitializer) -{ - PrimaryActorTick.bCanEverTick = false; -} - -void ARoadSegment::OnConstruction(const FTransform &Transform) -{ - Super::OnConstruction(Transform); - UpdateMeshes(); -} - -#if WITH_EDITOR -void ARoadSegment::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - if (PropertyChangedEvent.Property) { - GenerateRoad(); - } -} -#endif // WITH_EDITOR - -void ARoadSegment::GenerateRoad() -{ - UpdateMeshes(); - UpdateRoad(); -} - -void ARoadSegment::UpdateMeshes() -{ - if (GetNumberOfInstantiators() != NUMBER_OF_ITEMS) { - ClearInstantiators(); - for (auto i = 0u; i < NUMBER_OF_ITEMS; ++i) { - PushBackInstantiator(nullptr); - } - } - SetStaticMesh(ELaneLeft, LaneLeft); - SetStaticMesh(ELaneRight, LaneRight); - SetStaticMesh(ESidewalkLeft, SidewalkLeft); - SetStaticMesh(ESidewalkRight, SidewalkRight); - SetStaticMesh(ELaneMarkingSolid, LaneMarkingSolid); - SetStaticMesh(ELaneMarkingBroken, LaneMarkingBroken); -} - -void ARoadSegment::UpdateRoad() -{ - ClearInstances(); - Scale = (LaneLeft != nullptr ? LaneLeft->GetBoundingBox().GetSize().X : 1.0f); - FVector Translation(0.0f, 0.0f, 0.0f); - for (auto &Item : RoadDescription) { - FTransform Transform{Translation}; - AddInstance(ELaneLeft, Transform); - AddInstance(ELaneRight, Transform); - if (Item.bHasRightSidewalk) { - AddInstance(ESidewalkRight, Transform); - } - if (Item.bHasLeftSidewalk) { - AddInstance(ESidewalkLeft, Transform); - } - if (Item.LaneMarking == ELaneMarkingType::Solid) { - AddInstance(ELaneMarkingSolid, Transform); - } else if (Item.LaneMarking == ELaneMarkingType::Broken) { - AddInstance(ELaneMarkingBroken, Transform); - } - Translation.X += Scale; - } -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadSegment.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadSegment.h deleted file mode 100644 index c47e9fe35..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/RoadSegment.h +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#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 CARLA_API 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 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; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaEncoder.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaEncoder.cpp deleted file mode 100644 index ccaa62c0e..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaEncoder.cpp +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - -#include "Carla.h" -#include "CarlaEncoder.h" - -#include "Agent/TrafficSignAgentComponent.h" -#include "Agent/VehicleAgentComponent.h" -#include "Agent/WalkerAgentComponent.h" -#include "Game/CarlaPlayerState.h" -#include "Settings/SensorDescription.h" - -#include "GameFramework/PlayerStart.h" - -#include - -// Conversion from centimeters to meters. -static constexpr float TO_METERS = 1e-2; - -// ============================================================================= -// -- Static local methods ----------------------------------------------------- -// ============================================================================= - -static void Encode(const FVector &Vector, carla_vector3d &Data) -{ - Data = {Vector.X, Vector.Y, Vector.Z}; -} - -static void Encode(const FRotator &Rotator, carla_rotation3d &Data) -{ - Data.pitch = Rotator.Pitch; - Data.roll = Rotator.Roll; - Data.yaw = Rotator.Yaw; -} - -static void Encode(const FTransform &Transform, carla_transform &Data) -{ - Encode(Transform.GetLocation() * TO_METERS, Data.location); - Encode(Transform.GetRotation().GetForwardVector(), Data.orientation); - Encode(Transform.Rotator(), Data.rotation); -} - -// ============================================================================= -// -- FCarlaEncoder static methods --------------------------------------------- -// ============================================================================= - -TUniquePtr FCarlaEncoder::Encode(const FString &String) -{ - const char *Ptr = TCHAR_TO_UTF8(*String); - auto Buffer = MakeUnique(std::strlen(Ptr) + 1u); // + null terminator. -#if defined(_WIN32) - strcpy_s(Buffer.Get(),String.Len()+1, Ptr); -#else - std::strcpy(Buffer.Get(), Ptr); -#endif - return TUniquePtr(Buffer.Release()); -} - -void FCarlaEncoder::Encode( - const TArray &AvailableStartSpots, - TArray &Data) -{ - const int32 NumberOfStartSpots = AvailableStartSpots.Num(); - Data.AddUninitialized(NumberOfStartSpots); - for (auto i = 0; i < NumberOfStartSpots; ++i) { - check(AvailableStartSpots[i] != nullptr); - ::Encode(AvailableStartSpots[i]->GetActorTransform(), Data[i]); - } -} - -void FCarlaEncoder::Encode( - const TArray &SensorDescriptions, - TArray &Data, - TArray> &SensorNames) -{ - const int32 NumberOfSensors = SensorDescriptions.Num(); - Data.AddUninitialized(NumberOfSensors); - SensorNames.Reserve(NumberOfSensors); - for (auto i = 0; i < NumberOfSensors; ++i) { - check(SensorDescriptions[i] != nullptr); - SensorNames.Emplace(::Encode(*SensorDescriptions[i], Data[i])); - } -} - -void FCarlaEncoder::Encode( - const ACarlaPlayerState &PlayerState, - carla_measurements &Data) -{ - Data.frame_number = PlayerState.GetFrameNumber(); - Data.platform_timestamp = PlayerState.GetPlatformTimeStamp(); - Data.game_timestamp = PlayerState.GetGameTimeStamp(); - auto &Player = Data.player_measurements; - ::Encode(PlayerState.GetPlayerTransform(), Player.transform); - ::Encode(PlayerState.GetBoundingBoxTransform(), Player.bounding_box.transform); - ::Encode(PlayerState.GetBoundingBoxExtent() * TO_METERS, Player.bounding_box.extent); - ::Encode(PlayerState.GetAcceleration() * TO_METERS, Player.acceleration); - Player.forward_speed = PlayerState.GetForwardSpeed() * TO_METERS; - Player.collision_vehicles = PlayerState.GetCollisionIntensityCars() * TO_METERS; - Player.collision_pedestrians = PlayerState.GetCollisionIntensityPedestrians() * TO_METERS; - Player.collision_other = PlayerState.GetCollisionIntensityOther() * TO_METERS; - Player.intersection_otherlane = PlayerState.GetOtherLaneIntersectionFactor(); - Player.intersection_offroad = PlayerState.GetOffRoadIntersectionFactor(); - Player.autopilot_control.steer = PlayerState.GetSteer(); - Player.autopilot_control.throttle = PlayerState.GetThrottle(); - Player.autopilot_control.brake = PlayerState.GetBrake(); - Player.autopilot_control.hand_brake = PlayerState.GetHandBrake(); - Player.autopilot_control.reverse = PlayerState.GetCurrentGear() < 0; -} - -void FCarlaEncoder::Encode( - const TArray &Agents, - TArray &Data) -{ - const int32 NumberOfAgents = Agents.Num(); - Data.AddUninitialized(NumberOfAgents); - for (auto i = 0; i < NumberOfAgents; ++i) { - check(Agents[i] != nullptr); - Encode(*Agents[i], Data[i]); - } -} - -void FCarlaEncoder::Encode(const UAgentComponent &AgentComponent, carla_agent &AgentData) -{ - AgentData.id = AgentComponent.GetId(); - FCarlaEncoder Encoder(AgentData); - AgentComponent.AcceptVisitor(Encoder); -} - -// ============================================================================= -// -- FCarlaEncoder ------------------------------------------------------------ -// ============================================================================= - -FCarlaEncoder::FCarlaEncoder(carla_agent &InData) : Data(InData) {} - -void FCarlaEncoder::Visit(const UTrafficSignAgentComponent &Agent) -{ - constexpr float TO_METERS_PER_SECOND = 1.0f / 3.6f; - ::Encode(Agent.GetComponentTransform(), Data.transform); - auto &TrafficSign = Agent.GetTrafficSign(); - switch (TrafficSign.GetTrafficSignState()) { - case ETrafficSignState::TrafficLightRed: - Data.type = CARLA_SERVER_AGENT_TRAFFICLIGHT_RED; - break; - case ETrafficSignState::TrafficLightYellow: - Data.type = CARLA_SERVER_AGENT_TRAFFICLIGHT_YELLOW; - break; - case ETrafficSignState::TrafficLightGreen: - Data.type = CARLA_SERVER_AGENT_TRAFFICLIGHT_GREEN; - break; - case ETrafficSignState::SpeedLimit_30: - Data.type = CARLA_SERVER_AGENT_SPEEDLIMITSIGN; - Data.forward_speed = 30.0f * TO_METERS_PER_SECOND; - break; - case ETrafficSignState::SpeedLimit_40: - Data.type = CARLA_SERVER_AGENT_SPEEDLIMITSIGN; - Data.forward_speed = 40.0f * TO_METERS_PER_SECOND; - break; - case ETrafficSignState::SpeedLimit_50: - Data.type = CARLA_SERVER_AGENT_SPEEDLIMITSIGN; - Data.forward_speed = 50.0f * TO_METERS_PER_SECOND; - break; - case ETrafficSignState::SpeedLimit_60: - Data.type = CARLA_SERVER_AGENT_SPEEDLIMITSIGN; - Data.forward_speed = 60.0f * TO_METERS_PER_SECOND; - break; - case ETrafficSignState::SpeedLimit_90: - Data.type = CARLA_SERVER_AGENT_SPEEDLIMITSIGN; - Data.forward_speed = 90.0f * TO_METERS_PER_SECOND; - break; - case ETrafficSignState::SpeedLimit_100: - Data.type = CARLA_SERVER_AGENT_SPEEDLIMITSIGN; - Data.forward_speed = 100.0f * TO_METERS_PER_SECOND; - break; - case ETrafficSignState::SpeedLimit_120: - Data.type = CARLA_SERVER_AGENT_SPEEDLIMITSIGN; - Data.forward_speed = 120.0f * TO_METERS_PER_SECOND; - break; - case ETrafficSignState::SpeedLimit_130: - Data.type = CARLA_SERVER_AGENT_SPEEDLIMITSIGN; - Data.forward_speed = 130.0f * TO_METERS_PER_SECOND; - break; - default: - UE_LOG(LogCarla, Error, TEXT("Unknown traffic sign!")); - } -} - -void FCarlaEncoder::Visit(const UVehicleAgentComponent &Agent) -{ - ::Encode(Agent.GetTransform(), Data.transform); - Data.type = CARLA_SERVER_AGENT_VEHICLE; - Data.forward_speed = Agent.GetForwardSpeed() * TO_METERS; - ::Encode(Agent.GetBoundingBoxTransform(), Data.bounding_box.transform); - ::Encode(Agent.GetBoundingBoxExtent() * TO_METERS, Data.bounding_box.extent); -} - -void FCarlaEncoder::Visit(const UWalkerAgentComponent &Agent) -{ - ::Encode(Agent.GetTransform(), Data.transform); - Data.type = CARLA_SERVER_AGENT_PEDESTRIAN; - Data.forward_speed = Agent.GetForwardSpeed() * TO_METERS; - ::Encode(Agent.GetBoundingBoxTransform(), Data.bounding_box.transform); - ::Encode(Agent.GetBoundingBoxExtent() * TO_METERS, Data.bounding_box.extent); -} - -#endif // CARLA_COMPILE_CARLASERVER_LEGACY diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaEncoder.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaEncoder.h deleted file mode 100644 index f7cb13ce8..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaEncoder.h +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - -#include "Agent/AgentComponentVisitor.h" - -#include "Sensor/SensorDataView.h" -#include "Vehicle/VehicleControl.h" - -#include - -/// Encodes Unreal classes to CarlaServer API. To be used by FCarlaServer only. -class FCarlaEncoder : private IAgentComponentVisitor -{ -public: - - static TUniquePtr Encode(const FString &String); - - static void Encode( - const TArray &AvailableStartSpots, - TArray &Data); - - static void Encode( - const ACarlaPlayerState &PlayerState, - carla_measurements &Data); - - static void Encode( - const TArray &Agents, - TArray &Data); - - static void Encode(const FSensorDataView &SensorData, carla_sensor_data &Data) - { - Data.id = SensorData.GetSensorId(); - Data.header = SensorData.GetHeader().GetData(); - Data.header_size = SensorData.GetHeader().GetSize(); - Data.data = SensorData.GetData().GetData(); - Data.data_size = SensorData.GetData().GetSize(); - } - - static void Decode(const carla_request_new_episode &Data, FString &IniFile) - { - IniFile = FString(Data.ini_file_length, ANSI_TO_TCHAR(Data.ini_file)); - } - - static void Decode(const carla_control &Data, FVehicleControl &Control) - { - Control.Steer = Data.steer; - Control.Throttle = Data.throttle; - Control.Brake = Data.brake; - Control.bHandBrake = Data.hand_brake; - Control.bReverse = Data.reverse; - } - -private: - - static void Encode(const UAgentComponent &AgentComponent, carla_agent &Data); - - FCarlaEncoder(carla_agent &Data); - - virtual void Visit(const UTrafficSignAgentComponent &) override; - - virtual void Visit(const UVehicleAgentComponent &) override; - - virtual void Visit(const UWalkerAgentComponent &) override; - - carla_agent &Data; -}; - -#endif // CARLA_COMPILE_CARLASERVER_LEGACY diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.cpp deleted file mode 100644 index c00350c6a..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.cpp +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "CarlaServer.h" - -#include "Server/CarlaEncoder.h" - -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY -# include -#endif // CARLA_COMPILE_CARLASERVER_LEGACY - -// ============================================================================= -// -- Static local methods ----------------------------------------------------- -// ============================================================================= - -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY -static FCarlaServer::ErrorCode ParseErrorCode(const uint32 ErrorCode) -{ - if (ErrorCode == CARLA_SERVER_SUCCESS) { - return FCarlaServer::Success; - } else if (ErrorCode == CARLA_SERVER_TRY_AGAIN) { - return FCarlaServer::TryAgain; - } else { - return FCarlaServer::Error; - } -} -#endif // CARLA_COMPILE_CARLASERVER_LEGACY - -static int32 GetTimeOut(uint32 TimeOut, const bool bBlocking) -{ - return (bBlocking ? TimeOut : 0u); -} - -// ============================================================================= -// -- CarlaServer -------------------------------------------------------------- -// ============================================================================= - -FCarlaServer::FCarlaServer(const uint32 InWorldPort, const uint32 InTimeOut) : - WorldPort(InWorldPort), - TimeOut(InTimeOut), -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - Server(carla_make_server()) -#else - Server(nullptr) -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -{ - check(Server != nullptr); -} - -FCarlaServer::~FCarlaServer() -{ -#ifdef CARLA_SERVER_EXTRA_LOG - UE_LOG(LogCarlaServer, Warning, TEXT("Destroying CarlaServer")); -#endif // CARLA_SERVER_EXTRA_LOG -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - carla_free_server(Server); -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -} - -FCarlaServer::ErrorCode FCarlaServer::Connect() -{ -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - UE_LOG(LogCarlaServer, Log, TEXT("Waiting for the client to connect...")); - return ParseErrorCode(carla_server_connect(Server, WorldPort, TimeOut)); -#else - UE_LOG(LogCarlaServer, Error, TEXT("CarlaServer no longer supported!!")); - return ErrorCode::Error; -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -} - -FCarlaServer::ErrorCode FCarlaServer::ReadNewEpisode(FString &IniFile, const bool bBlocking) -{ -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - - carla_request_new_episode values; - auto ec = ParseErrorCode(carla_read_request_new_episode(Server, values, GetTimeOut(TimeOut, bBlocking))); - if (Success == ec) { - FCarlaEncoder::Decode(values, IniFile); - UE_LOG(LogCarlaServer, Log, TEXT("Received new episode")); -#ifdef CARLA_SERVER_EXTRA_LOG - UE_LOG(LogCarlaServer, Log, TEXT("Received CarlaSettings.ini:\n%s"), *IniFile); -#endif // CARLA_SERVER_EXTRA_LOG - } - return ec; - -#else - return ErrorCode::Error; -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -} - -FCarlaServer::ErrorCode FCarlaServer::SendSceneDescription( - const FString &MapName, - const TArray &AvailableStartSpots, - const bool bBlocking) -{ -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - - carla_scene_description scene; - // Encode map name. - const auto MapNameBuffer = FCarlaEncoder::Encode(MapName); - scene.map_name = MapNameBuffer.Get(); - // Encode start spots. - TArray Transforms; - FCarlaEncoder::Encode(AvailableStartSpots, Transforms); - scene.player_start_spots = (Transforms.Num() > 0 ? Transforms.GetData() : nullptr);; - scene.number_of_player_start_spots = Transforms.Num(); - // Encode sensors. - TArray> SensorNames; // This holds the memory while we send it. - TArray Sensors; - FCarlaEncoder::Encode(SensorDescriptions, Sensors, SensorNames); - scene.sensors = (Sensors.Num() > 0 ? Sensors.GetData() : nullptr);; - scene.number_of_sensors = Sensors.Num(); - // Send scene description. - UE_LOG(LogCarlaServer, Log, TEXT("Sending %d available start positions"), scene.number_of_player_start_spots); - UE_LOG(LogCarlaServer, Log, TEXT("Sending %d sensor descriptions"), scene.number_of_sensors); - return ParseErrorCode(carla_write_scene_description(Server, scene, GetTimeOut(TimeOut, bBlocking))); - -#else - return ErrorCode::Error; -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -} - -FCarlaServer::ErrorCode FCarlaServer::ReadEpisodeStart(uint32 &StartPositionIndex, const bool bBlocking) -{ -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - - carla_episode_start values; - auto ec = ParseErrorCode(carla_read_episode_start(Server, values, GetTimeOut(TimeOut, bBlocking))); - if (Success == ec) { - StartPositionIndex = values.player_start_spot_index; - UE_LOG(LogCarlaServer, Log, TEXT("Episode start received: { StartIndex = %d }"), StartPositionIndex); - } - return ec; - -#else - return ErrorCode::Error; -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -} - -FCarlaServer::ErrorCode FCarlaServer::SendEpisodeReady(const bool bBlocking) -{ -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - - UE_LOG(LogCarlaServer, Log, TEXT("Ready to play, notifying client")); - const carla_episode_ready values = {true}; - return ParseErrorCode(carla_write_episode_ready(Server, values, GetTimeOut(TimeOut, bBlocking))); - -#else - return ErrorCode::Error; -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -} - -FCarlaServer::ErrorCode FCarlaServer::ReadControl(FVehicleControl &Control, const bool bBlocking) -{ -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - - carla_control values; - auto ec = ParseErrorCode(carla_read_control(Server, values, GetTimeOut(TimeOut, bBlocking))); - if (Success == ec) { -#ifdef CARLA_SERVER_EXTRA_LOG - UE_LOG( - LogCarlaServer, - Log, - TEXT("Read control (%s): { Steer = %f, Throttle = %f, Brake = %f, Handbrake = %s, Reverse = %s }"), - (bBlocking ? TEXT("Sync") : TEXT("Async")), - values.steer, - values.throttle, - values.brake, - (values.hand_brake ? TEXT("True") : TEXT("False")), - (values.reverse ? TEXT("True") : TEXT("False"))); -#endif // CARLA_SERVER_EXTRA_LOG - FCarlaEncoder::Decode(values, Control); - } else if ((!bBlocking) && (TryAgain == ec)) { - UE_LOG(LogCarlaServer, Warning, TEXT("No control received from the client this frame!")); - } - return ec; - -#else - return ErrorCode::Error; -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -} - -FCarlaServer::ErrorCode FCarlaServer::SendMeasurements( - const ACarlaPlayerState &PlayerState, - const TArray &Agents, - const bool bSendNonPlayerAgentsInfo) -{ -#ifdef CARLA_COMPILE_CARLASERVER_LEGACY - - // Encode measurements. - carla_measurements values; - FCarlaEncoder::Encode(PlayerState, values); - // Encode agents. - TArray AgentsData; - if (bSendNonPlayerAgentsInfo) { - FCarlaEncoder::Encode(Agents, AgentsData); - } - values.non_player_agents = (AgentsData.Num() > 0 ? AgentsData.GetData() : nullptr);; - values.number_of_non_player_agents = AgentsData.Num(); - // Send measurements. -#ifdef CARLA_SERVER_EXTRA_LOG - UE_LOG(LogCarlaServer, Log, TEXT("Sending data of %d agents"), values.number_of_non_player_agents); -#endif // CARLA_SERVER_EXTRA_LOG - return ParseErrorCode(carla_write_measurements(Server, values)); - -#else - return ErrorCode::Error; -#endif // CARLA_COMPILE_CARLASERVER_LEGACY -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.h deleted file mode 100644 index dd2e4148f..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Containers/Array.h" - -class ACarlaPlayerState; -class APlayerStart; -class FString; -struct FVehicleControl; - -/// Wrapper around carla_server API. -class FCarlaServer -{ -public: - - enum ErrorCode { - Success, - TryAgain, - Error - }; - - explicit FCarlaServer(uint32 WorldPort, uint32 TimeOutInMilliseconds); - - ~FCarlaServer(); - - /// Connect with the client, block until the client connects or the time-out - /// is met. - ErrorCode Connect(); - - ErrorCode ReadNewEpisode(FString &IniFile, bool bBlocking); - - ErrorCode SendSceneDescription( - const FString &MapName, - const TArray &AvailableStartSpots, - bool bBlocking); - - ErrorCode ReadEpisodeStart(uint32 &StartPositionIndex, bool bBlocking); - - ErrorCode SendEpisodeReady(bool bBlocking); - - ErrorCode ReadControl(FVehicleControl &Control, bool bBlocking); - - ErrorCode SendMeasurements( - const ACarlaPlayerState &PlayerState, - const TArray &Agents, - bool bSendNonPlayerAgentsInfo); - -private: - - const uint32 WorldPort; - - const uint32 TimeOut; - - void* const Server; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/ServerGameController.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/ServerGameController.cpp deleted file mode 100644 index 2b920daf9..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/ServerGameController.cpp +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "ServerGameController.h" - -#include "Game/DataRouter.h" -#include "Server/CarlaServer.h" -#include "Settings/CarlaSettings.h" -#include "Private/RenderTargetTemp.h" - -using Errc = FCarlaServer::ErrorCode; - -static constexpr bool BLOCKING = true; -static constexpr bool NON_BLOCKING = false; - -FServerGameController::FServerGameController(FDataRouter &InDataRouter) - : ICarlaGameControllerBase(InDataRouter), - Server(nullptr) {} - -FServerGameController::~FServerGameController() {} - -void FServerGameController::Initialize(UCarlaSettings &InCarlaSettings) -{ - CarlaSettings = &InCarlaSettings; - - // Initialize server if missing. - if (!Server.IsValid()) { - Server = MakeShared(CarlaSettings->WorldPort, CarlaSettings->ServerTimeOut); - FString IniFile; - if ((Errc::Success == Server->Connect()) && - (Errc::Success == Server->ReadNewEpisode(IniFile, BLOCKING))) { - CarlaSettings->LoadSettingsFromString(IniFile); - } else { - UE_LOG(LogCarlaServer, Warning, TEXT("Failed to initialize, server needs restart")); - Server = nullptr; - } - } -} - -APlayerStart *FServerGameController::ChoosePlayerStart( - const TArray &AvailableStartSpots) -{ - check(AvailableStartSpots.Num() > 0); - // Send scene description. - if (Server.IsValid()) { - const auto &MapName = CarlaSettings->MapName; - if (Errc::Success != Server->SendSceneDescription(MapName, AvailableStartSpots, BLOCKING)) { - UE_LOG(LogCarlaServer, Warning, TEXT("Failed to send scene description, server needs restart")); - Server = nullptr; - } - } - - // Read episode start. - uint32 StartIndex = 0u; // default. - if (Server.IsValid()) { - if (Errc::Success != Server->ReadEpisodeStart(StartIndex, BLOCKING)) { - UE_LOG(LogCarlaServer, Warning, TEXT("Failed to read episode start, server needs restart")); - Server = nullptr; - } - } - - if (static_cast(StartIndex) >= AvailableStartSpots.Num()) { - UE_LOG(LogCarlaServer, Warning, TEXT("Client requested an invalid player start, using default one instead.")); - StartIndex = 0u; - } - - return AvailableStartSpots[StartIndex]; -} - -void FServerGameController::RegisterPlayer(AController &NewPlayer) -{ - -} - -void FServerGameController::BeginPlay() -{ - if (Server.IsValid()) { - if (Errc::Success != Server->SendEpisodeReady(BLOCKING)) { - UE_LOG(LogCarlaServer, Warning, TEXT("Failed to read episode start, server needs restart")); - Server = nullptr; - } - } -} - -void FServerGameController::Tick(float DeltaSeconds) -{ - check(CarlaSettings != nullptr); - - if (!Server.IsValid()) { - UE_LOG(LogCarlaServer, Warning, TEXT("Client disconnected, server needs restart")); - RestartLevel(); - return; - } - - // Check if the client requested a new episode. - { - FString IniFile; - auto ec = Server->ReadNewEpisode(IniFile, NON_BLOCKING); - switch (ec) { - case Errc::Success: - CarlaSettings->LoadSettingsFromString(IniFile); - RestartLevel(); - return; - case Errc::Error: - Server = nullptr; - return; - default: - break; // fallthrough... - } - } - - // Send measurements. - { - if (CarlaSettings->bSynchronousMode) - { - FlushRenderingCommands(); - } - - if (Errc::Error == Server->SendMeasurements( - DataRouter.GetPlayerState(), - DataRouter.GetAgents(), - CarlaSettings->bSendNonPlayerAgentsInfo)) - { - // The error here must be ignored, otherwise we can create a race - // condition between the different ports. - return; - } - } - - // Read control, block if the settings say so. - { - const bool bShouldBlock = CarlaSettings->bSynchronousMode; - FVehicleControl Control; - if (Errc::Error != Server->ReadControl(Control, bShouldBlock)) - { - DataRouter.ApplyVehicleControl(Control, EVehicleInputPriority::Client); - } // Here we ignore the error too. - } -} - -void FServerGameController::RestartLevel() -{ - UE_LOG(LogCarlaServer, Log, TEXT("Restarting the level...")); - DataRouter.RestartLevel(); -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/ServerGameController.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/ServerGameController.h deleted file mode 100644 index 9448d130a..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/ServerGameController.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Game/CarlaGameControllerBase.h" - -class FCarlaServer; - -/// Implements remote control of game and player. -class FServerGameController : public ICarlaGameControllerBase -{ -public: - - FServerGameController(FDataRouter &DataRouter); - - ~FServerGameController(); - - virtual void Initialize(UCarlaSettings &CarlaSettings) final; - - virtual APlayerStart *ChoosePlayerStart(const TArray &AvailableStartSpots) final; - - virtual void RegisterPlayer(AController &NewPlayer) final; - - virtual void BeginPlay() final; - - virtual void Tick(float DeltaSeconds) final; - -private: - - void RestartLevel(); - - TSharedPtr Server; - - UCarlaSettings *CarlaSettings = nullptr; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CameraPostProcessParameters.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CameraPostProcessParameters.h deleted file mode 100644 index 9d686dad1..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CameraPostProcessParameters.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Engine/Scene.h" - -#include "CameraPostProcessParameters.generated.h" - -/** - * Some post-process parameters that can be overriden per camera depending on - * the weather and lighting conditions. - */ -USTRUCT(BlueprintType) -struct CARLA_API FCameraPostProcessParameters -{ - GENERATED_USTRUCT_BODY() - - /** Luminance computation method */ - UPROPERTY(Category = "Camera Parameters", EditAnywhere, BlueprintReadWrite) - TEnumAsByte AutoExposureMethod = AEM_Histogram; - - /** - * A good value should be positive near 0. This is the minimum brightness the auto exposure can adapt to. - * It should be tweaked in a dark lighting situation (too small: image appears too bright, too large: image appears too dark). - * Note: Tweaking emissive materials and lights or tweaking auto exposure can look the same. Tweaking auto exposure has global - * effect and defined the HDR range - you don't want to change that late in the project development. - * Eye Adaptation is disabled if MinBrightness = MaxBrightness - */ - UPROPERTY(Category = "Camera Parameters", EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", UIMax = "10.0")) - float AutoExposureMinBrightness = 0.03f; - - /** - * A good value should be positive (2 is a good value). This is the maximum brightness the auto exposure can adapt to. - * It should be tweaked in a bright lighting situation (too small: image appears too bright, too large: image appears too dark). - * Note: Tweaking emissive materials and lights or tweaking auto exposure can look the same. Tweaking auto exposure has global - * effect and defined the HDR range - you don't want to change that late in the project development. - * Eye Adaptation is disabled if MinBrightness = MaxBrightness - */ - UPROPERTY(Category = "Camera Parameters", EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", UIMax = "10.0")) - float AutoExposureMaxBrightness = 2.0f; - - /** - * Logarithmic adjustment for the exposure. Only used if a tonemapper is specified. - * 0: no adjustment, -1:2x darker, -2:4x darker, 1:2x brighter, 2:4x brighter, ... - */ - UPROPERTY(Category = "Camera Parameters", EditAnywhere, BlueprintReadWrite, meta = (UIMin = "-8.0", UIMax = "8.0")) - float AutoExposureBias = 0.0f; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettings.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettings.cpp index 0edb3476e..dd4d24d92 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettings.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettings.cpp @@ -5,24 +5,23 @@ // For a copy, see . #include "Carla.h" -#include "CarlaSettings.h" -#include "DynamicWeather.h" -#include "Util/IniFile.h" -#include "Package.h" +#include "Carla/Settings/CarlaSettings.h" + +#include "Carla/Util/IniFile.h" + #include "CommandLine.h" -#include "UnrealMathUtility.h" -#include "Engine/Engine.h" -#include "Kismet/GameplayStatics.h" #include "Engine/DirectionalLight.h" +#include "Engine/Engine.h" #include "Engine/PointLight.h" -#include "Engine/StaticMesh.h" #include "Engine/PostProcessVolume.h" +#include "Engine/StaticMesh.h" +#include "Kismet/GameplayStatics.h" #include "Materials/MaterialInstance.h" +#include "Package.h" +#include "UnrealMathUtility.h" // INI file sections. #define S_CARLA_SERVER TEXT("CARLA/Server") -#define S_CARLA_LEVELSETTINGS TEXT("CARLA/LevelSettings") -#define S_CARLA_SENSOR TEXT("CARLA/Sensor") #define S_CARLA_QUALITYSETTINGS TEXT("CARLA/QualitySettings") // ============================================================================= @@ -36,33 +35,6 @@ const FName UCarlaSettings::CARLA_SKY_TAG = FName("CARLA_SKY"); // -- Static methods ----------------------------------------------------------- // ============================================================================= -template -static void ForEachSectionInName(const FString &SensorName, T &&Callback) -{ - TArray SubSections; - SensorName.ParseIntoArray(SubSections, TEXT("/"), true); - check(SubSections.Num() > 0); - FString Section = S_CARLA_SENSOR; - Callback(Section); - for (FString &SubSection : SubSections) - { - Section += TEXT("/"); - Section += SubSection; - Callback(Section); - } -} - -static FString GetSensorType( - const FIniFile &ConfigFile, - const FString &SensorName) -{ - FString SensorType; - ForEachSectionInName(SensorName, [&](const auto &Section) { - ConfigFile.GetString(*Section, TEXT("SensorType"), SensorType); - }); - return SensorType; -} - static EQualityLevel QualityLevelFromString( const FString &SQualitySettingsLevel, const EQualityLevel Default = EQualityLevel::INVALID) @@ -96,24 +68,12 @@ static void LoadSettingsFromConfig( // CarlaServer. if (bLoadCarlaServerSection) { - ConfigFile.GetBool(S_CARLA_SERVER, TEXT("UseNetworking"), Settings.bUseNetworking); - ConfigFile.GetInt(S_CARLA_SERVER, TEXT("WorldPort"), Settings.WorldPort); + ConfigFile.GetInt(S_CARLA_SERVER, TEXT("WorldPort"), Settings.RPCPort); + ConfigFile.GetInt(S_CARLA_SERVER, TEXT("RPCPort"), Settings.RPCPort); ConfigFile.GetInt(S_CARLA_SERVER, TEXT("ServerTimeOut"), Settings.ServerTimeOut); } ConfigFile.GetBool(S_CARLA_SERVER, TEXT("SynchronousMode"), Settings.bSynchronousMode); - ConfigFile.GetBool(S_CARLA_SERVER, TEXT("SendNonPlayerAgentsInfo"), Settings.bSendNonPlayerAgentsInfo); ConfigFile.GetBool(S_CARLA_SERVER, TEXT("DisableRendering"), Settings.bDisableRendering); - // LevelSettings. - ConfigFile.GetString(S_CARLA_LEVELSETTINGS, TEXT("PlayerVehicle"), Settings.PlayerVehicle); - ConfigFile.GetInt(S_CARLA_LEVELSETTINGS, TEXT("NumberOfVehicles"), Settings.NumberOfVehicles); - ConfigFile.GetInt(S_CARLA_LEVELSETTINGS, TEXT("NumberOfPedestrians"), Settings.NumberOfPedestrians); - ConfigFile.GetInt(S_CARLA_LEVELSETTINGS, TEXT("WeatherId"), Settings.WeatherId); - ConfigFile.GetInt(S_CARLA_LEVELSETTINGS, TEXT("SeedVehicles"), Settings.SeedVehicles); - ConfigFile.GetInt(S_CARLA_LEVELSETTINGS, TEXT("SeedPedestrians"), Settings.SeedPedestrians); - ConfigFile.GetBool(S_CARLA_LEVELSETTINGS, - TEXT("DisableTwoWheeledVehicles"), - Settings.bDisableTwoWheeledVehicles); - // QualitySettings. FString sQualityLevel; ConfigFile.GetString(S_CARLA_QUALITYSETTINGS, TEXT("QualityLevel"), sQualityLevel); @@ -152,27 +112,18 @@ void UCarlaSettings::LoadSettings() } // Override settings from command-line. { - if (FParse::Param(FCommandLine::Get(), TEXT("carla-server"))) - { - bUseNetworking = true; - } uint32 Value; if (FParse::Value(FCommandLine::Get(), TEXT("-world-port="), Value) || FParse::Value(FCommandLine::Get(), TEXT("-carla-port="), Value) || FParse::Value(FCommandLine::Get(), TEXT("-carla-rpc-port="), Value) || FParse::Value(FCommandLine::Get(), TEXT("-carla-world-port="), Value)) { - WorldPort = Value; - bUseNetworking = true; + RPCPort = Value; } if (FParse::Value(FCommandLine::Get(), TEXT("-carla-streaming-port="), Value)) { StreamingPort = Value; } - if (FParse::Param(FCommandLine::Get(), TEXT("carla-no-networking"))) - { - bUseNetworking = false; - } FString StringQualityLevel; if (FParse::Value(FCommandLine::Get(), TEXT("-quality-level="), StringQualityLevel)) { @@ -199,22 +150,6 @@ void UCarlaSettings::LoadSettingsFromString(const FString &INIFileContents) CurrentFileName = TEXT(""); } -void UCarlaSettings::LoadWeatherDescriptions() -{ - WeatherDescriptions.Empty(); - ADynamicWeather::LoadWeatherDescriptionsFromFile(MapName, WeatherDescriptions); - check(WeatherDescriptions.Num() > 0); -} - -void UCarlaSettings::ValidateWeatherId() -{ - if (WeatherId >= WeatherDescriptions.Num()) - { - UE_LOG(LogCarla, Error, TEXT("Provided weather id %d cannot be found"), WeatherId); - WeatherId = -1; - } -} - void UCarlaSettings::LogSettings() const { auto EnabledDisabled = [](bool bValue) { return (bValue ? TEXT("Enabled") : TEXT("Disabled")); }; @@ -222,61 +157,19 @@ void UCarlaSettings::LogSettings() const TEXT("== CARLA Settings ==============================================================")); UE_LOG(LogCarla, Log, TEXT("Last settings file loaded: %s"), *CurrentFileName); UE_LOG(LogCarla, Log, TEXT("[%s]"), S_CARLA_SERVER); - UE_LOG(LogCarla, Log, TEXT("Networking = %s"), EnabledDisabled(bUseNetworking)); - UE_LOG(LogCarla, Log, TEXT("World Port = %d"), WorldPort); + UE_LOG(LogCarla, Log, TEXT("RPC Port = %d"), RPCPort); + UE_LOG(LogCarla, Log, TEXT("Streaming Port = %d"), StreamingPort.Get(RPCPort + 1u)); UE_LOG(LogCarla, Log, TEXT("Server Time-out = %d ms"), ServerTimeOut); UE_LOG(LogCarla, Log, TEXT("Synchronous Mode = %s"), EnabledDisabled(bSynchronousMode)); - UE_LOG(LogCarla, Log, TEXT("Send Non-Player Agents Info = %s"), EnabledDisabled(bSendNonPlayerAgentsInfo)); UE_LOG(LogCarla, Log, TEXT("Rendering = %s"), EnabledDisabled(!bDisableRendering)); - UE_LOG(LogCarla, Log, TEXT("[%s]"), S_CARLA_LEVELSETTINGS); - UE_LOG(LogCarla, Log, TEXT("Player Vehicle = %s"), - (PlayerVehicle.IsEmpty() ? TEXT("Default") : *PlayerVehicle)); - UE_LOG(LogCarla, Log, TEXT("Number Of Vehicles = %d"), NumberOfVehicles); - UE_LOG(LogCarla, Log, TEXT("Number Of Pedestrians = %d"), NumberOfPedestrians); - UE_LOG(LogCarla, Log, TEXT("Weather Id = %d"), WeatherId); - UE_LOG(LogCarla, Log, TEXT("Seed Vehicle Spawner = %d"), SeedVehicles); - UE_LOG(LogCarla, Log, TEXT("Seed Pedestrian Spawner = %d"), SeedPedestrians); - UE_LOG(LogCarla, Log, TEXT("Two-Wheeled Vehicles = %s"), EnabledDisabled(!bDisableTwoWheeledVehicles)); - UE_LOG(LogCarla, Log, TEXT("Found %d available weather settings."), WeatherDescriptions.Num()); - for (auto i = 0; i < WeatherDescriptions.Num(); ++i) - { - UE_LOG(LogCarla, Log, TEXT(" * %d - %s"), i, *WeatherDescriptions[i].Name); - } UE_LOG(LogCarla, Log, TEXT("[%s]"), S_CARLA_QUALITYSETTINGS); UE_LOG(LogCarla, Log, TEXT("Quality Level = %s"), *QualityLevelToString(QualityLevel)); - - UE_LOG(LogCarla, Log, TEXT("[%s]"), S_CARLA_SENSOR); - UE_LOG(LogCarla, Log, TEXT("Semantic Segmentation = %s"), EnabledDisabled(bSemanticSegmentationEnabled)); UE_LOG(LogCarla, Log, TEXT("================================================================================")); } +#undef S_CARLA_QUALITYSETTINGS #undef S_CARLA_SERVER -#undef S_CARLA_LEVELSETTINGS -#undef S_CARLA_SENSOR - -void UCarlaSettings::GetActiveWeatherDescription( - bool &bWeatherWasChanged, - FWeatherDescription &WeatherDescription) const -{ - auto WeatherPtr = GetActiveWeatherDescription(); - if (WeatherPtr != nullptr) - { - WeatherDescription = *WeatherPtr; - bWeatherWasChanged = true; - } - else - { - bWeatherWasChanged = false; - } -} - -const FWeatherDescription &UCarlaSettings::GetWeatherDescriptionByIndex(int32 Index) -{ - check(WeatherDescriptions.Num() > 0); - FMath::Clamp(Index, 0, WeatherDescriptions.Num()); - return WeatherDescriptions[Index]; -} void UCarlaSettings::LoadSettingsFromFile(const FString &FilePath, const bool bLogOnFailure) { diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettings.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettings.h index 65dc490a6..dcf427923 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettings.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettings.h @@ -9,7 +9,6 @@ #include "Engine/StaticMesh.h" #include "Carla/Settings/QualityLevelUE.h" -#include "Carla/Settings/WeatherDescription.h" #include "CarlaSettings.generated.h" @@ -52,36 +51,9 @@ public: /// section is ignored. void LoadSettingsFromString(const FString &INIFileContents); - /// Load weather description from config files. (There may be overrides for - /// each map). - void LoadWeatherDescriptions(); - - /// Check if requested weather id is present in WeatherDescriptions. - void ValidateWeatherId(); - /// Log settings values. void LogSettings() const; - const FWeatherDescription *GetActiveWeatherDescription() const - { - if ((WeatherId >= 0) && (WeatherId < WeatherDescriptions.Num())) - { - return &WeatherDescriptions[WeatherId]; - } - return nullptr; - } - - // Special overload for blueprints. - UFUNCTION(BlueprintCallable, Category = "CARLA Settings") - void GetActiveWeatherDescription( - bool &bWeatherWasChanged, - FWeatherDescription &WeatherDescription) const; - - UFUNCTION(BlueprintCallable) - const FWeatherDescription &GetWeatherDescriptionByIndex(int32 Index); - - /// ----------- constants ------------------ - public: /// CARLA_ROAD name to tag road mesh actors. @@ -106,13 +78,9 @@ private: public: - /// If active, wait for the client to connect and control the pawn. - UPROPERTY(Category = "CARLA Server", VisibleAnywhere) - bool bUseNetworking = false; - /// World port to listen for client connections. UPROPERTY(Category = "CARLA Server", VisibleAnywhere, meta = (EditCondition = bUseNetworking)) - uint32 WorldPort = 2000u; + uint32 RPCPort = 2000u; /// Optional setting for the secondary port. TOptional StreamingPort; @@ -126,62 +94,11 @@ public: UPROPERTY(Category = "CARLA Server", VisibleAnywhere, meta = (EditCondition = bUseNetworking)) bool bSynchronousMode = false; - /// Send info about every non-player agent in the scene every frame. - UPROPERTY(Category = "CARLA Server", VisibleAnywhere, meta = (EditCondition = bUseNetworking)) - bool bSendNonPlayerAgentsInfo = false; - /// Enable or disable the viewport rendering of the world. Disabled by /// default. UPROPERTY(Category = "CARLA Server", VisibleAnywhere) bool bDisableRendering = false; - /// @} - // =========================================================================== - /// @name Level Settings - // =========================================================================== - /// @{ - -public: - - /// Display name of the current map. - UPROPERTY(Category = "Level Settings", VisibleAnywhere) - FString MapName; - - /// Path to the pawn class of the player. - UPROPERTY(Category = "Level Settings", VisibleAnywhere) - FString PlayerVehicle; - - /// Number of NPC vehicles to be spawned into the level. - UPROPERTY(Category = "Level Settings", VisibleAnywhere) - uint32 NumberOfVehicles = 5u; - - /// Number of NPC pedestrians to be spawned into the level. - UPROPERTY(Category = "Level Settings", VisibleAnywhere) - uint32 NumberOfPedestrians = 15u; - - /// Index of the weather setting to use. If negative, weather won't be - /// changed. - UPROPERTY(Category = "Level Settings", VisibleAnywhere) - int32 WeatherId = -1; - - /// Available weather settings. - UPROPERTY(Category = "Level Settings", VisibleAnywhere) - TArray WeatherDescriptions; - - /// Random seed for the pedestrian spawner. - UPROPERTY(Category = "Level Settings", VisibleAnywhere) - int32 SeedPedestrians = 123456789; - - /// Random seed for the vehicle spawner. - UPROPERTY(Category = "Level Settings", VisibleAnywhere) - int32 SeedVehicles = 123456789; - - /// Disable bikes and motorbikes. - UPROPERTY(Category = "Level Settings", BlueprintReadOnly, VisibleAnywhere) - bool bDisableTwoWheeledVehicles = false; - - /// @} - // =========================================================================== /// @name Quality Settings // =========================================================================== @@ -233,19 +150,4 @@ public: TArray EpicRoadMaterials; /// @} - - // =========================================================================== - /// @name Sensors - // =========================================================================== - /// @{ - -public: - - /// Whether semantic segmentation should be activated. The mechanisms for - /// semantic segmentation impose some performance penalties even if it is not - /// used, we only enable it if necessary. - UPROPERTY(Category = "Sensors", BlueprintReadOnly, VisibleAnywhere) - bool bSemanticSegmentationEnabled = true; - - /// @} }; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettingsDelegate.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettingsDelegate.cpp index 94c103daf..559f98b99 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettingsDelegate.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/CarlaSettingsDelegate.cpp @@ -1,19 +1,19 @@ #include "Carla.h" +#include "Carla/Settings/CarlaSettingsDelegate.h" + +#include "Carla/Settings/CarlaSettings.h" -#include "Game/CarlaGameModeBase.h" -#include "Settings/CarlaSettings.h" -#include "CarlaSettingsDelegate.h" -#include "Components/StaticMeshComponent.h" -#include "Engine/Engine.h" -#include "Kismet/GameplayStatics.h" -#include "Engine/DirectionalLight.h" -#include "Engine/StaticMesh.h" -#include "Engine/PostProcessVolume.h" #include "Async.h" -#include "Landscape.h" -#include "InstancedFoliageActor.h" +#include "Components/StaticMeshComponent.h" +#include "Engine/DirectionalLight.h" +#include "Engine/Engine.h" #include "Engine/LocalPlayer.h" +#include "Engine/PostProcessVolume.h" +#include "Engine/StaticMesh.h" #include "GameFramework/HUD.h" +#include "InstancedFoliageActor.h" +#include "Kismet/GameplayStatics.h" +#include "Landscape.h" static constexpr float CARLA_SETTINGS_MAX_SCALE_SIZE = 50.0f; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/WeatherDescription.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/WeatherDescription.cpp deleted file mode 100644 index 5b94e4b67..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/WeatherDescription.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "WeatherDescription.h" - -#include "Util/IniFile.h" - -static FString PrecipitationTypeToString(EPrecipitationType PrecipitationType) -{ - const UEnum* ptr = FindObject(ANY_PACKAGE, TEXT("EPrecipitationType"), true); - if(!ptr) - return FString("Rain"); - return ptr->GetNameStringByIndex(static_cast(PrecipitationType)); -} - -static void LoadPrecipitationType( - const FIniFile &ConfigFile, - const TCHAR* Section, - const TCHAR* Key, - EPrecipitationType &Target) -{ - FString ValueString; - if (ConfigFile.GetFConfigFile().GetString(Section, Key, ValueString)) { - if (ValueString == "Rain") { - Target = EPrecipitationType::Rain; - } else { - UE_LOG(LogCarla, Error, TEXT("Invalid precipitation type \"%s\" in INI file"), *ValueString); - Target = EPrecipitationType::Rain; - } - } -} - -static FString AutoExposureMethodToString(EAutoExposureMethod AutoExposureMethod) -{ - switch (AutoExposureMethod) { - case AEM_Histogram: return "Histogram"; - case AEM_Basic: return "Basic"; - default: return "INVALID"; - }; -} - -static void LoadAutoExposureMethod( - const FIniFile &ConfigFile, - const TCHAR* Section, - const TCHAR* Key, - EAutoExposureMethod &Target) -{ - FString ValueString; - if (ConfigFile.GetFConfigFile().GetString(Section, Key, ValueString)) { - if (ValueString == "Basic") { - Target = AEM_Basic; - } else { - Target = AEM_Histogram; - } - } -} - -void FWeatherDescription::ReadFromConfigFile(const FIniFile &ConfigFile, const FString &Section) -{ - Name = Section; -#define CARLA_LOAD_FROM_INI(Type, Key) ConfigFile.Get ## Type(*Section, TEXT(#Key), Key); - // Sun. - CARLA_LOAD_FROM_INI(Float, SunPolarAngle) - CARLA_LOAD_FROM_INI(Float, SunAzimuthAngle) - CARLA_LOAD_FROM_INI(Float, SunBrightness) - CARLA_LOAD_FROM_INI(Float, SunDirectionalLightIntensity) - CARLA_LOAD_FROM_INI(LinearColor, SunDirectionalLightColor) - CARLA_LOAD_FROM_INI(Float, SunIndirectLightIntensity) - // Sky. - CARLA_LOAD_FROM_INI(Float, CloudOpacity) - CARLA_LOAD_FROM_INI(Float, HorizontFalloff) - CARLA_LOAD_FROM_INI(LinearColor, ZenithColor) - CARLA_LOAD_FROM_INI(LinearColor, HorizonColor) - CARLA_LOAD_FROM_INI(LinearColor, CloudColor) - CARLA_LOAD_FROM_INI(LinearColor, OverallSkyColor) - CARLA_LOAD_FROM_INI(Float, SkyLightIntensity) - CARLA_LOAD_FROM_INI(LinearColor, SkyLightColor) - // Precipitation. - CARLA_LOAD_FROM_INI(Bool, bPrecipitation) - LoadPrecipitationType(ConfigFile, *Section, TEXT("PrecipitationType"), PrecipitationType); - CARLA_LOAD_FROM_INI(Float, PrecipitationAmount) - CARLA_LOAD_FROM_INI(Float, PrecipitationAccumulation) - // Wind. - CARLA_LOAD_FROM_INI(Bool, bWind) - CARLA_LOAD_FROM_INI(Float, WindIntensity) - CARLA_LOAD_FROM_INI(Float, WindAngle) - // Camera Post-Process Parameters. - CARLA_LOAD_FROM_INI(Bool, bOverrideCameraPostProcessParameters) - EAutoExposureMethod AutoExposureMethod; - LoadAutoExposureMethod( - ConfigFile, - *Section, - TEXT("CameraPostProcessParameters.AutoExposureMethod"), - AutoExposureMethod); - CameraPostProcessParameters.AutoExposureMethod = AutoExposureMethod; - CARLA_LOAD_FROM_INI(Float, CameraPostProcessParameters.AutoExposureMinBrightness) - CARLA_LOAD_FROM_INI(Float, CameraPostProcessParameters.AutoExposureMaxBrightness) - CARLA_LOAD_FROM_INI(Float, CameraPostProcessParameters.AutoExposureBias) -#undef CARLA_LOAD_FROM_INI -} - -void FWeatherDescription::WriteToConfigFile(FIniFile &ConfigFile) const -{ - const FString &Section = Name; - ConfigFile.AddSectionIfMissing(Section); -#define CARLA_WRITE_TO_INI(Type, Key) ConfigFile.Set ## Type(*Section, TEXT(#Key), Key); - // Sun. - CARLA_WRITE_TO_INI(Float, SunPolarAngle) - CARLA_WRITE_TO_INI(Float, SunAzimuthAngle) - CARLA_WRITE_TO_INI(Float, SunBrightness) - CARLA_WRITE_TO_INI(Float, SunDirectionalLightIntensity) - CARLA_WRITE_TO_INI(LinearColor, SunDirectionalLightColor) - CARLA_WRITE_TO_INI(Float, SunIndirectLightIntensity) - // Sky. - CARLA_WRITE_TO_INI(Float, CloudOpacity) - CARLA_WRITE_TO_INI(Float, HorizontFalloff) - CARLA_WRITE_TO_INI(LinearColor, ZenithColor) - CARLA_WRITE_TO_INI(LinearColor, HorizonColor) - CARLA_WRITE_TO_INI(LinearColor, CloudColor) - CARLA_WRITE_TO_INI(LinearColor, OverallSkyColor) - CARLA_WRITE_TO_INI(Float, SkyLightIntensity) - CARLA_WRITE_TO_INI(LinearColor, SkyLightColor) - // Precipitation. - CARLA_WRITE_TO_INI(Bool, bPrecipitation) - ConfigFile.SetString(*Section, TEXT("PrecipitationType"), PrecipitationTypeToString(PrecipitationType)); - CARLA_WRITE_TO_INI(Float, PrecipitationAmount) - CARLA_WRITE_TO_INI(Float, PrecipitationAccumulation) - // Wind. - CARLA_WRITE_TO_INI(Bool, bWind) - CARLA_WRITE_TO_INI(Float, WindIntensity) - CARLA_WRITE_TO_INI(Float, WindAngle) - // Camera Post-Process Parameters. - CARLA_WRITE_TO_INI(Bool, bOverrideCameraPostProcessParameters) - ConfigFile.SetString( - *Section, - TEXT("CameraPostProcessParameters.AutoExposureMethod"), - AutoExposureMethodToString(CameraPostProcessParameters.AutoExposureMethod.GetValue())); - CARLA_WRITE_TO_INI(Float, CameraPostProcessParameters.AutoExposureMinBrightness) - CARLA_WRITE_TO_INI(Float, CameraPostProcessParameters.AutoExposureMaxBrightness) - CARLA_WRITE_TO_INI(Float, CameraPostProcessParameters.AutoExposureBias) -#undef CARLA_WRITE_TO_INI -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/WeatherDescription.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/WeatherDescription.h deleted file mode 100644 index c85686b6c..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Settings/WeatherDescription.h +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Settings/CameraPostProcessParameters.h" - -#include "WeatherDescription.generated.h" - -class FIniFile; - -UENUM(BlueprintType) -enum class EPrecipitationType : uint8 -{ - Rain UMETA(DisplayName = "Rain") -}; - -USTRUCT(BlueprintType) -struct CARLA_API FWeatherDescription -{ - GENERATED_USTRUCT_BODY() - - void ReadFromConfigFile(const FIniFile &ConfigFile, const FString &Section); - - void WriteToConfigFile(FIniFile &ConfigFile) const; - - // =========================================================================== - /// @name Weather - // =========================================================================== - /// @{ - - /** Display name of the current weather. */ - UPROPERTY(Category = "Weather", EditAnywhere, BlueprintReadWrite) - FString Name; - - /// @} - // =========================================================================== - /// @name Weather - Sun - // =========================================================================== - /// @{ - - /** Polar angle of the Sun in degrees, with 0.0 at zenith, 90.0 at equator. */ - UPROPERTY(Category = "Weather|Sun", EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "0.0", ClampMax = "180.0")) - float SunPolarAngle = 45.0f; - - /** Azimuth angle of the Sun in degrees. */ - UPROPERTY(Category = "Weather|Sun", EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "-180.0", ClampMax = "180.0")) - float SunAzimuthAngle = 0.0f; - - /** */ - UPROPERTY(Category = "Weather|Sun", EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "100.0")) - float SunBrightness = 50.0f; - - /** */ - UPROPERTY(Category = "Weather|Sun", EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "100.0")) - float SunDirectionalLightIntensity = 5.0f; - - /** */ - UPROPERTY(Category = "Weather|Sun", EditAnywhere, BlueprintReadWrite) - FLinearColor SunDirectionalLightColor = FLinearColor(255.0f, 240.0f, 195.0f); - - /** */ - UPROPERTY(Category = "Weather|Sun", EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "100.0")) - float SunIndirectLightIntensity = 6.0f; - - /// @} - // =========================================================================== - /// @name Weather - Sky - // =========================================================================== - /// @{ - - /** */ - UPROPERTY(Category = "Weather|Sky", EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "100.0")) - float CloudOpacity = 10.0f; - - /** */ - UPROPERTY(Category = "Weather|Sky", EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "100.0")) - float HorizontFalloff = 3.0f; - - /** */ - UPROPERTY(Category = "Weather|Sky", EditAnywhere, BlueprintReadWrite) - FLinearColor ZenithColor = FLinearColor(0.0340f, 0.1092f, 0.2950f); - - /** */ - UPROPERTY(Category = "Weather|Sky", EditAnywhere, BlueprintReadWrite) - FLinearColor HorizonColor = FLinearColor(0.6599f, 0.8622f, 1.0f); - - /** */ - UPROPERTY(Category = "Weather|Sky", EditAnywhere, BlueprintReadWrite) - FLinearColor CloudColor = FLinearColor(0.8558f, 0.9190f, 1.0f); - - /** */ - UPROPERTY(Category = "Weather|Sky", EditAnywhere, BlueprintReadWrite) - FLinearColor OverallSkyColor = FLinearColor(1.0f, 1.0f, 1.0f); - - /** */ - UPROPERTY(Category = "Weather|Sky", EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "100.0")) - float SkyLightIntensity = 4.0f; - - /** */ - UPROPERTY(Category = "Weather|Sky", EditAnywhere, BlueprintReadWrite) - FLinearColor SkyLightColor = FLinearColor(0.1950f, 0.1851f, 0.1413f, 0.0f); - - /// @} - // =========================================================================== - /// @name Weather - Precipitation - // =========================================================================== - /// @{ - - /** */ - UPROPERTY(Category = "Weather|Precipitation", EditAnywhere, BlueprintReadWrite) - bool bPrecipitation = false; - - /** */ - UPROPERTY(Category = "Weather|Precipitation", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="bPrecipitation")) - EPrecipitationType PrecipitationType = EPrecipitationType::Rain; - - /** */ - UPROPERTY(Category = "Weather|Precipitation", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="bPrecipitation", ClampMin = "0.0", ClampMax = "100.0")) - float PrecipitationAmount = 50.0f; - - /** */ - UPROPERTY(Category = "Weather|Precipitation", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="bPrecipitation", ClampMin = "0.0", ClampMax = "100.0")) - float PrecipitationAccumulation = 50.0f; - - /// @} - // =========================================================================== - /// @name Weather - Wind - // =========================================================================== - /// @{ - - /** */ - UPROPERTY(Category = "Weather|Wind", EditAnywhere, BlueprintReadWrite) - bool bWind = false; - - /** */ - UPROPERTY(Category = "Weather|Wind", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="bWind", ClampMin = "0.0", ClampMax = "100.0")) - float WindIntensity = 20.0f; - - /** */ - UPROPERTY(Category = "Weather|Wind", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="bWind", ClampMin = "-180.0", ClampMax = "180.0")) - float WindAngle = 0.0f; - - /// @} - // =========================================================================== - /// @name Weather - Camera Post-Process Parameters - // =========================================================================== - /// @{ - - /** If disabled the camera default values will be used instead. */ - UPROPERTY(Category = "Weather|Camera Post-Process Parameters", EditAnywhere, BlueprintReadWrite) - bool bOverrideCameraPostProcessParameters = false; - - /** Camera post-process parameters to be overriden. */ - UPROPERTY(Category = "Weather|Camera Post-Process Parameters", EditAnywhere, BlueprintReadWrite, meta=(EditCondition = "bOverrideCameraPostProcessParameters")) - FCameraPostProcessParameters CameraPostProcessParameters; - - /// @} -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficSignBase.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficSignBase.cpp index 1d9ef1a39..34c49fa88 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficSignBase.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficSignBase.cpp @@ -14,9 +14,4 @@ ATrafficSignBase::ATrafficSignBase(const FObjectInitializer &ObjectInitializer) RootComponent = ObjectInitializer.CreateDefaultSubobject(this, TEXT("SceneRootComponent")); RootComponent->SetMobility(EComponentMobility::Static); - - TrafficSignAgentComponent = - CreateDefaultSubobject(TEXT("TrafficSignAgentComponent")); - TrafficSignAgentComponent->SetupAttachment(RootComponent); - TrafficSignAgentComponent->SetMobility(EComponentMobility::Static); } diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficSignBase.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficSignBase.h index 5ad543c05..3345e42e0 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficSignBase.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficSignBase.h @@ -8,8 +8,6 @@ #include "GameFramework/Actor.h" -#include "Carla/Agent/TrafficSignAgentComponent.h" - #include "TrafficSignBase.generated.h" class UBoxComponent; @@ -60,7 +58,4 @@ private: UPROPERTY(Category = "Traffic Sign", EditAnywhere) ETrafficSignState TrafficSignState = ETrafficSignState::UNKNOWN; - - UPROPERTY(Category = "Traffic Sign", VisibleAnywhere) - UTrafficSignAgentComponent *TrafficSignAgentComponent; }; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaVehicleController.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaVehicleController.cpp deleted file mode 100644 index 8cdc19479..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaVehicleController.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "CarlaVehicleController.h" - -#include "Components/BoxComponent.h" -#include "EngineUtils.h" -#include "GameFramework/Pawn.h" -#include "WheeledVehicle.h" -#include "WheeledVehicleMovementComponent.h" - -// ============================================================================= -// -- Constructor and destructor ----------------------------------------------- -// ============================================================================= - -ACarlaVehicleController::ACarlaVehicleController(const FObjectInitializer& ObjectInitializer) : - Super(ObjectInitializer) -{ - PrimaryActorTick.bCanEverTick = true; -} - -ACarlaVehicleController::~ACarlaVehicleController() {} - -// ============================================================================= -// -- APlayerController -------------------------------------------------------- -// ============================================================================= - -void ACarlaVehicleController::Possess(APawn *aPawn) -{ - Super::Possess(aPawn); - - if (IsPossessingAVehicle()) { - // Bind hit events. - aPawn->OnActorHit.AddDynamic(this, &ACarlaVehicleController::OnCollisionEvent); - // Get custom player state. - CarlaPlayerState = Cast(PlayerState); - check(CarlaPlayerState != nullptr); - // We can set the bounding box already as it's not going to change. - CarlaPlayerState->BoundingBoxTransform = GetPossessedVehicle()->GetVehicleBoundingBoxTransform(); - CarlaPlayerState->BoundingBoxExtent = GetPossessedVehicle()->GetVehicleBoundingBoxExtent(); - // Set HUD input. - CarlaHUD = Cast(GetHUD()); - if (CarlaHUD != nullptr) { - InputComponent->BindAction("ToggleHUD", IE_Pressed, CarlaHUD, &ACarlaHUD::ToggleHUDView); - CarlaHUD->bShowHUD = !(Cast(GetWorld()->GetGameInstance())->GetCarlaSettings().bDisableRendering); - CarlaHUD->SetVisible(CarlaHUD->bShowHUD); - } else { - UE_LOG(LogCarla, Warning, TEXT("Current HUD is not a ACarlaHUD")); - } - } -} - -// ============================================================================= -// -- AActor ------------------------------------------------------------------- -// ============================================================================= - -void ACarlaVehicleController::Tick(float DeltaTime) -{ - Super::Tick(DeltaTime); - - if (IsPossessingAVehicle()) { - auto CurrentVehicle = GetPossessedVehicle(); - CarlaPlayerState->UpdateTimeStamp(DeltaTime); - const FVector PreviousSpeed = CarlaPlayerState->ForwardSpeed * CarlaPlayerState->GetOrientation(); - CarlaPlayerState->Transform = CurrentVehicle->GetVehicleTransform(); - CarlaPlayerState->ForwardSpeed = CurrentVehicle->GetVehicleForwardSpeed(); - const FVector CurrentSpeed = CarlaPlayerState->ForwardSpeed * CarlaPlayerState->GetOrientation(); - CarlaPlayerState->Acceleration = (CurrentSpeed - PreviousSpeed) / DeltaTime; - const auto &AutopilotCtrl = GetAutopilotControl(); - CarlaPlayerState->Steer = AutopilotCtrl.Steer; - CarlaPlayerState->Throttle = AutopilotCtrl.Throttle; - CarlaPlayerState->Brake = AutopilotCtrl.Brake; - CarlaPlayerState->bHandBrake = AutopilotCtrl.bHandBrake; - CarlaPlayerState->CurrentGear = CurrentVehicle->GetVehicleCurrentGear(); - CarlaPlayerState->SpeedLimit = GetSpeedLimit(); - CarlaPlayerState->TrafficLightState = GetTrafficLightState(); - IntersectPlayerWithRoadMap(); - } -} - -// ============================================================================= -// -- Events ------------------------------------------------------------------- -// ============================================================================= - -void ACarlaVehicleController::OnCollisionEvent( - AActor* Actor, - AActor* OtherActor, - FVector NormalImpulse, - const FHitResult& Hit) -{ - // Register collision only if we are moving faster than 1 km/h. - check(IsPossessingAVehicle()); - if (FMath::Abs(GetPossessedVehicle()->GetVehicleForwardSpeed() * 0.036f) > 1.0f) { - CarlaPlayerState->RegisterCollision(Actor, OtherActor, NormalImpulse, Hit); - } -} - -// ============================================================================= -// -- Other -------------------------------------------------------------------- -// ============================================================================= - -void ACarlaVehicleController::IntersectPlayerWithRoadMap() -{ - auto CurrentRoadMap = GetRoadMap(); - if (CurrentRoadMap == nullptr) { - return; - } - - check(IsPossessingAVehicle()); - auto CurrentVehicle = GetPossessedVehicle(); - constexpr float ChecksPerCentimeter = 0.1f; - const auto *BoundingBox = CurrentVehicle->GetVehicleBoundingBox(); - check(BoundingBox != nullptr); - auto Result = CurrentRoadMap->Intersect( - BoundingBox->GetComponentTransform(), - BoundingBox->GetUnscaledBoxExtent(), - ChecksPerCentimeter); - - CarlaPlayerState->OffRoadIntersectionFactor = Result.OffRoad; - CarlaPlayerState->OtherLaneIntersectionFactor = Result.OppositeLane; -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaVehicleController.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaVehicleController.h deleted file mode 100644 index f785e6ed0..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaVehicleController.h +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Vehicle/WheeledVehicleController.h" - -#include "CarlaVehicleController.generated.h" - -struct FCameraPostProcessParameters; -class ACarlaHUD; -class ACarlaPlayerState; -class ALidar; -class ASceneCaptureCamera; -class UCameraDescription; -class ULidarDescription; -struct FCameraPostProcessParameters; - -/// The CARLA player controller. -UCLASS() -class CARLA_API ACarlaVehicleController : public AWheeledVehicleController -{ - GENERATED_BODY() - - // =========================================================================== - /// @name Constructor and destructor - // =========================================================================== - /// @{ -public: - - ACarlaVehicleController(const FObjectInitializer& ObjectInitializer); - - ~ACarlaVehicleController(); - - /// @} - // =========================================================================== - /// @name APlayerController overrides - // =========================================================================== - /// @{ -public: - - virtual void Possess(APawn *aPawn) override; - - /// @} - // =========================================================================== - /// @name AActor overrides - // =========================================================================== - /// @{ -public: - - virtual void Tick(float DeltaTime) override; - - /// @} - // =========================================================================== - /// @name AWheeledVehicleAIController overrides - // =========================================================================== - /// @{ -public: - - virtual bool IsPossessingThePlayer() const final - { - return true; - } - - /// @} - // =========================================================================== - /// @name Player state - // =========================================================================== - /// @{ -public: - - const ACarlaPlayerState &GetPlayerState() const - { - return *CarlaPlayerState; - } - - /// @} - // =========================================================================== - /// @name Events - // =========================================================================== - /// @{ -private: - - UFUNCTION() - void OnCollisionEvent( - AActor* Actor, - AActor* OtherActor, - FVector NormalImpulse, - const FHitResult& Hit); - - /// @} - // =========================================================================== - /// @name Private methods - // =========================================================================== - /// @{ -private: - - void IntersectPlayerWithRoadMap(); - - /// @} - // =========================================================================== - // -- Member variables ------------------------------------------------------- - // =========================================================================== -private: - - // Cast for quick access to the custom player state. - UPROPERTY() - ACarlaPlayerState *CarlaPlayerState; - - // Cast for quick access to the custom HUD. - UPROPERTY() - ACarlaHUD *CarlaHUD; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaWheeledVehicle.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaWheeledVehicle.cpp index 78bb3c301..5817b0fbc 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaWheeledVehicle.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaWheeledVehicle.cpp @@ -5,14 +5,13 @@ // For a copy, see . #include "Carla.h" -#include "TireConfig.h" -#include "CarlaWheeledVehicle.h" -#include "VehicleWheel.h" - -#include "Agent/VehicleAgentComponent.h" +#include "Carla/Vehicle/CarlaWheeledVehicle.h" #include "Components/BoxComponent.h" #include "Engine/CollisionProfile.h" +#include "TireConfig.h" +#include "VehicleWheel.h" + // ============================================================================= // -- Constructor and destructor ----------------------------------------------- // ============================================================================= @@ -25,9 +24,6 @@ ACarlaWheeledVehicle::ACarlaWheeledVehicle(const FObjectInitializer& ObjectIniti VehicleBounds->SetHiddenInGame(true); VehicleBounds->SetCollisionProfileName(UCollisionProfile::NoCollision_ProfileName); - VehicleAgentComponent = CreateDefaultSubobject(TEXT("VehicleAgentComponent")); - VehicleAgentComponent->SetupAttachment(RootComponent); - GetVehicleMovementComponent()->bReverseAsBrake = false; } diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaWheeledVehicle.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaWheeledVehicle.h index 1d011357b..4bb13f552 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaWheeledVehicle.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/CarlaWheeledVehicle.h @@ -19,7 +19,6 @@ #include "CarlaWheeledVehicle.generated.h" class UBoxComponent; -class UVehicleAgentComponent; /// Base class for CARLA wheeled vehicles. UCLASS() @@ -182,9 +181,6 @@ private: UPROPERTY(Category = "CARLA Wheeled Vehicle", EditAnywhere) UBoxComponent *VehicleBounds; - UPROPERTY(Category = "CARLA Wheeled Vehicle", VisibleAnywhere) - UVehicleAgentComponent *VehicleAgentComponent; - struct { EVehicleInputPriority Priority = EVehicleInputPriority::INVALID; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/VehicleSpawnerBase.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/VehicleSpawnerBase.cpp deleted file mode 100644 index 36c33ec28..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/VehicleSpawnerBase.cpp +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "VehicleSpawnerBase.h" - -#include "Util/RandomEngine.h" -#include "Vehicle/CarlaWheeledVehicle.h" -#include "Vehicle/WheeledVehicleAIController.h" - - -#include "EngineUtils.h" -#include "GameFramework/Character.h" -#include "GameFramework/PlayerStart.h" -#include "TimerManager.h" -#include "Kismet/GameplayStatics.h" - -// ============================================================================= -// -- Static local methods ----------------------------------------------------- -// ============================================================================= - -static bool VehicleIsValid(const ACarlaWheeledVehicle *Vehicle) -{ - return ((Vehicle != nullptr) && !Vehicle->IsPendingKill()); -} - -static AWheeledVehicleAIController *GetController(ACarlaWheeledVehicle *Vehicle) -{ - return (VehicleIsValid(Vehicle) ? Cast(Vehicle->GetController()) : nullptr); -} - -// ============================================================================= -// -- AVehicleSpawnerBase ------------------------------------------------------ -// ============================================================================= - -// Sets default values -AVehicleSpawnerBase::AVehicleSpawnerBase(const FObjectInitializer& ObjectInitializer): Super(ObjectInitializer) -{ - PrimaryActorTick.bCanEverTick = false; -} - -void AVehicleSpawnerBase::BeginPlay() -{ - Super::BeginPlay(); - - NumberOfVehicles = FMath::Max(0, NumberOfVehicles); - - // Allocate space for walkers. - Vehicles.Reserve(NumberOfVehicles); - - // Find spawn points present in level. - for (TActorIterator It(GetWorld()); It; ++It) { - SpawnPoints.Add(*It); - } - - UE_LOG(LogCarla, Log, TEXT("Found %d PlayerStart positions for spawning vehicles"), SpawnPoints.Num()); - - if (SpawnPoints.Num() < NumberOfVehicles && SpawnPoints.Num()>0) - { - UE_LOG(LogCarla, Warning, TEXT("We don't have enough spawn points (PlayerStart) for vehicles!")); - if(SpawnPoints.Num()==0) - { - UE_LOG(LogCarla, Error, TEXT("At least one spawn point (PlayerStart) is needed to spawn vehicles!")); - } else - { - UE_LOG(LogCarla, Log, - TEXT("To cover the %d vehicles to spawn after beginplay, it will spawn one new vehicle each %f seconds"), - NumberOfVehicles - SpawnPoints.Num(), - TimeBetweenSpawnAttemptsAfterBegin - ) -; - } - } - - if(NumberOfVehicles==0||SpawnPoints.Num()==0) bSpawnVehicles = false; - - if (bSpawnVehicles) - { - GetRandomEngine()->Shuffle(SpawnPoints); //to get a random spawn point from the map - const int32 MaximumNumberOfAttempts = SpawnPoints.Num(); - int32 NumberOfAttempts = 0; - int32 SpawnIndexCount = 0; - while ((NumberOfVehicles > Vehicles.Num()) && (NumberOfAttempts < MaximumNumberOfAttempts)) - { - if(SpawnPoints.IsValidIndex(SpawnIndexCount)) - { - if(SpawnVehicleAtSpawnPoint(*SpawnPoints[SpawnIndexCount])){ - SpawnIndexCount++; - } - } - NumberOfAttempts++; - } - bool bAllSpawned = false; - if (NumberOfVehicles > SpawnIndexCount) - { - UE_LOG(LogCarla, Warning, TEXT("Requested %d vehicles, but we were only able to spawn %d"), NumberOfVehicles, SpawnIndexCount); - } else - { - if(SpawnIndexCount == NumberOfVehicles) - { - bAllSpawned = true; - } - } - if(!bAllSpawned) - { - UE_LOG(LogCarla, Log, - TEXT("Starting the timer to spawn the other %d vehicles, one per %f seconds"), - NumberOfVehicles - SpawnIndexCount, - TimeBetweenSpawnAttemptsAfterBegin - ); - GetWorld()->GetTimerManager().SetTimer(AttemptTimerHandle,this, &AVehicleSpawnerBase::SpawnVehicleAttempt, TimeBetweenSpawnAttemptsAfterBegin,false,-1); - } else - { - UE_LOG(LogCarla, Log, TEXT("Spawned all %d requested vehicles"), NumberOfVehicles); - } - } -} - -void AVehicleSpawnerBase::EndPlay(const EEndPlayReason::Type EndPlayReason) -{ - GetWorld()->GetTimerManager().ClearAllTimersForObject(this); -} - -void AVehicleSpawnerBase::SetNumberOfVehicles(const int32 Count) -{ - if (Count > 0) - { - bSpawnVehicles = true; - NumberOfVehicles = Count; - } else { - bSpawnVehicles = false; - } -} - -void AVehicleSpawnerBase::TryToSpawnRandomVehicle() -{ - auto SpawnPoint = GetRandomSpawnPoint(); - if (SpawnPoint != nullptr) - { - SpawnVehicleAtSpawnPoint(*SpawnPoint); - } else { - UE_LOG(LogCarla, Error, TEXT("Unable to find spawn point")); - } -} - -ACarlaWheeledVehicle* AVehicleSpawnerBase::SpawnVehicleAtSpawnPoint( - const APlayerStart &SpawnPoint) -{ - ACarlaWheeledVehicle *Vehicle; - SpawnVehicle(SpawnPoint.GetActorTransform(), Vehicle); - if ((Vehicle != nullptr) && !Vehicle->IsPendingKill()) - { - Vehicle->AIControllerClass = AWheeledVehicleAIController::StaticClass(); - Vehicle->SpawnDefaultController(); - auto Controller = GetController(Vehicle); - if (Controller != nullptr) - { // Sometimes fails... - Controller->GetRandomEngine()->Seed(GetRandomEngine()->GenerateSeed()); - Controller->SetRoadMap(GetRoadMap()); - Controller->SetAutopilot(true); - Vehicles.Add(Vehicle); - } else { - - UE_LOG(LogCarla, Error, TEXT("Something went wrong creating the controller for the new vehicle")); - Vehicle->Destroy(); - } - } - return Vehicle; -} - -void AVehicleSpawnerBase::SpawnVehicleAttempt() -{ - if(Vehicles.Num()>=NumberOfVehicles) - { - UE_LOG(LogCarla, Log, TEXT("All vehicles spawned correctly")); - return; - } - - APlayerStart* spawnpoint = GetRandomSpawnPoint(); - APawn* playerpawn = UGameplayStatics::GetPlayerPawn(GetWorld(),0); - const float DistanceToPlayer = playerpawn&&spawnpoint? FVector::Distance(playerpawn->GetActorLocation(),spawnpoint->GetActorLocation()):0.0f; - float NextTime = TimeBetweenSpawnAttemptsAfterBegin; - if(DistanceToPlayer>DistanceToPlayerBetweenSpawnAttemptsAfterBegin) - { - if(SpawnVehicleAtSpawnPoint(*spawnpoint)!=nullptr) - { - UE_LOG(LogCarla, Log, TEXT("Vehicle %d/%d late spawned"), Vehicles.Num(), NumberOfVehicles); - } - } else - { - NextTime /= 2.0f; - } - - if(Vehicles.Num()GetTimerManager(); - if(AttemptTimerHandle.IsValid()) timemanager.ClearTimer(AttemptTimerHandle); - timemanager.SetTimer(AttemptTimerHandle,this, &AVehicleSpawnerBase::SpawnVehicleAttempt,NextTime,false,-1); - } else - { - UE_LOG(LogCarla, Log, TEXT("All vehicles spawned correctly")); - } - -} - -APlayerStart *AVehicleSpawnerBase::GetRandomSpawnPoint() -{ - return (SpawnPoints.Num() > 0 ? GetRandomEngine()->PickOne(SpawnPoints) : nullptr); -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/VehicleSpawnerBase.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/VehicleSpawnerBase.h deleted file mode 100644 index 25b20b039..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/VehicleSpawnerBase.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Util/ActorWithRandomEngine.h" - -#include "VehicleSpawnerBase.generated.h" - -class ACarlaWheeledVehicle; -class APlayerStart; - -UCLASS(Abstract) -class CARLA_API AVehicleSpawnerBase : public AActorWithRandomEngine -{ - GENERATED_BODY() - -public: - - // Sets default values for this actor's properties - AVehicleSpawnerBase(const FObjectInitializer& ObjectInitializer); - -protected: - - // Called when the game starts or when spawned - virtual void BeginPlay() override; - - // Called when the actor is removed from the level - virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; - - UFUNCTION(BlueprintImplementableEvent) - void SpawnVehicle(const FTransform &SpawnTransform, ACarlaWheeledVehicle *&SpawnedCharacter); - - //UFUNCTION(BlueprintImplementableEvent) - void TryToSpawnRandomVehicle(); - -public: - - void SetNumberOfVehicles(int32 Count); - - int32 GetNumberOfSpawnedVehicles() const - { - return Vehicles.Num(); - } - - const TArray &GetVehicles() const { - return Vehicles; - } - - void SetRoadMap(URoadMap *InRoadMap) - { - RoadMap = InRoadMap; - } - - UFUNCTION(Category = "Road Map", BlueprintCallable) - URoadMap *GetRoadMap() - { - return RoadMap; - } - /** Function called to spawn another vehicle when there is not enough spawn points in the beginplay */ - UFUNCTION(Category = "Vehicle Spawner", BlueprintCallable) - void SpawnVehicleAttempt(); - -protected: - - APlayerStart* GetRandomSpawnPoint(); - - ACarlaWheeledVehicle* SpawnVehicleAtSpawnPoint(const APlayerStart &SpawnPoint); - - UPROPERTY() - URoadMap *RoadMap = nullptr; - - /** If false, no walker will be spawned. */ - UPROPERTY(Category = "Vehicle Spawner", EditAnywhere) - bool bSpawnVehicles = true; - - /** Number of walkers to be present within the volume. */ - UPROPERTY(Category = "Vehicle Spawner", EditAnywhere, meta = (EditCondition = bSpawnVehicles, ClampMin = "1")) - int32 NumberOfVehicles = 10; - - UPROPERTY(Category = "Vehicle Spawner", VisibleAnywhere, AdvancedDisplay) - TArray SpawnPoints; - - UPROPERTY(Category = "Vehicle Spawner", BlueprintReadOnly, VisibleAnywhere, AdvancedDisplay) - TArray Vehicles; - - /** Time to spawn new vehicles after begin play if there was not enough spawn points at the moment */ - UPROPERTY(Category = "Vehicle Spawner", BlueprintReadWrite, EditAnywhere, meta = (ClampMin = "0.1", ClampMax = "1000.0", UIMin = "0.1", UIMax = "1000.0")) - float TimeBetweenSpawnAttemptsAfterBegin = 3.0f; - - /** Min Distance to the player vehicle to validate a spawn point location for the next vehicle spawn attempt */ - UPROPERTY(Category = "Vehicle Spawner", BlueprintReadWrite, EditAnywhere, meta = (ClampMin = "10", ClampMax = "10000", UIMin = "10", UIMax = "10000")) - float DistanceToPlayerBetweenSpawnAttemptsAfterBegin = 5000; -private: - - /** Time handler to spawn more vehicles in the case we could not do it in the beginplay */ - FTimerHandle AttemptTimerHandle; - -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/WheeledVehicleController.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/WheeledVehicleController.cpp deleted file mode 100644 index 359ff96b3..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/WheeledVehicleController.cpp +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "WheeledVehicleController.h" - -#include "Camera/CameraComponent.h" -#include "GameFramework/Pawn.h" -#include "GameFramework/SpringArmComponent.h" - -// ============================================================================= -// -- Constructor and destructor ----------------------------------------------- -// ============================================================================= - -AWheeledVehicleController::AWheeledVehicleController(const FObjectInitializer& ObjectInitializer) : - Super(ObjectInitializer) -{ - bAutoManageActiveCameraTarget = false; - - // Create the spring arm component. - SpringArm = CreateDefaultSubobject(TEXT("SpringArm0")); - SpringArm->TargetOffset = FVector(0.f, 0.f, 200.f); - SpringArm->SetRelativeRotation(FRotator(-15.f, 0.f, 0.f)); - SpringArm->SetupAttachment(RootComponent); - SpringArm->TargetArmLength = 650.0f; - SpringArm->bEnableCameraRotationLag = true; - SpringArm->CameraRotationLagSpeed = 7.f; - SpringArm->bInheritPitch = false; - SpringArm->bInheritRoll = false; - SpringArm->bInheritYaw = true; - - // Do not collide, may clip into level. - SpringArm->bDoCollisionTest = false; - - // Create the camera component. - PlayerCamera = CreateDefaultSubobject(TEXT("Camera0")); - PlayerCamera->SetupAttachment(SpringArm, USpringArmComponent::SocketName); - PlayerCamera->bUsePawnControlRotation = false; - PlayerCamera->FieldOfView = 90.f; - - // Create the on-board camera component. - OnBoardCamera = CreateDefaultSubobject(TEXT("OnBoardCamera0")); - OnBoardCamera->SetRelativeLocation(FVector(140.f, 0.f, 140.f)); - OnBoardCamera->SetRelativeRotation(FRotator(-10.f, 0.f, 0.f)); - OnBoardCamera->SetupAttachment(RootComponent); - OnBoardCamera->bUsePawnControlRotation = false; - OnBoardCamera->FieldOfView = 100.f; -} - -AWheeledVehicleController::~AWheeledVehicleController() {} - -// ============================================================================= -// -- AActor ------------------------------------------------------------------- -// ============================================================================= - -void AWheeledVehicleController::BeginPlay() -{ - Super::BeginPlay(); - EnableOnBoardCamera(bOnBoardCameraIsActive, true); -} - -// ============================================================================= -// -- APlayerController -------------------------------------------------------- -// ============================================================================= - -void AWheeledVehicleController::SetupInputComponent() -{ - Super::SetupInputComponent(); - if (InputComponent != nullptr) { - // Camera movement. - InputComponent->BindAxis("CameraZoom", this, &AWheeledVehicleController::ChangeCameraZoom); - InputComponent->BindAxis("CameraUp", this, &AWheeledVehicleController::ChangeCameraUp); - InputComponent->BindAxis("CameraRight", this, &AWheeledVehicleController::ChangeCameraRight); - InputComponent->BindAction("ToggleCamera", IE_Pressed, this, &AWheeledVehicleController::ToggleCamera); - InputComponent->BindAction("RestartLevel", IE_Pressed, this, &AWheeledVehicleController::RestartLevel); - // Vehicle movement. - InputComponent->BindAction("ToggleAutopilot", IE_Pressed, this, &AWheeledVehicleAIController::ToggleAutopilot); - InputComponent->BindAxis("MoveForward", this, &AWheeledVehicleController::SetThrottleInput); - InputComponent->BindAxis("MoveRight", this, &AWheeledVehicleController::SetSteeringInput); - InputComponent->BindAxis("Brake", this, &AWheeledVehicleController::SetBrakeInput); - InputComponent->BindAction("ToggleReverse", IE_Pressed, this, &AWheeledVehicleController::ToggleReverse); - InputComponent->BindAction("Handbrake", IE_Pressed, this, &AWheeledVehicleController::HoldHandbrake); - InputComponent->BindAction("Handbrake", IE_Released, this, &AWheeledVehicleController::ReleaseHandbrake); - } -} - -void AWheeledVehicleController::Possess(APawn *aPawn) -{ - Super::Possess(aPawn); - SpringArm->AttachToComponent( - aPawn->GetRootComponent(), - FAttachmentTransformRules::KeepRelativeTransform); - OnBoardCamera->AttachToComponent( - aPawn->GetRootComponent(), - FAttachmentTransformRules::KeepRelativeTransform); -} - -void AWheeledVehicleController::CalcCamera(float DeltaTime, FMinimalViewInfo& OutResult) -{ - if (bOnBoardCameraIsActive) { - OnBoardCamera->GetCameraView(DeltaTime, OutResult); - } else { - PlayerCamera->GetCameraView(DeltaTime, OutResult); - } -} - -// ============================================================================= -// -- User input --------------------------------------------------------------- -// ============================================================================= - -void AWheeledVehicleController::EnableUserInput(const bool On) -{ - bAllowUserInput = On; - if (bAllowUserInput) { - Super::SetAutopilot(false); - } -} - -// ============================================================================= -// -- Camera movement methods -------------------------------------------------- -// ============================================================================= - -void AWheeledVehicleController::AWheeledVehicleController::ChangeCameraZoom(float Value) -{ - SpringArm->TargetArmLength = FMath::Clamp(SpringArm->TargetArmLength + Value, 150.0f, 2e4f); -} - -void AWheeledVehicleController::ChangeCameraUp(float Value) -{ - auto Rotation = SpringArm->GetRelativeTransform().Rotator(); - Rotation.Pitch = FMath::Clamp(Rotation.Pitch - Value, -85.0f, 0.0f); - SpringArm->SetRelativeRotation(Rotation); -} - -void AWheeledVehicleController::ChangeCameraRight(float Value) -{ - auto Rotation = SpringArm->GetRelativeTransform().Rotator(); - Rotation.Yaw -= Value; - SpringArm->SetRelativeRotation(Rotation); -} - -void AWheeledVehicleController::EnableOnBoardCamera(const bool bEnable, const bool bForce) -{ - if (bForce || (bOnBoardCameraIsActive != bEnable)) { - bOnBoardCameraIsActive = bEnable; - if (bEnable) { - PlayerCamera->Deactivate(); - OnBoardCamera->Activate(); - } else { - OnBoardCamera->Deactivate(); - PlayerCamera->Activate(); - } - } -} - -// ============================================================================= -// -- Vehicle movement methods ------------------------------------------------- -// ============================================================================= - -void AWheeledVehicleController::SetThrottleInput(const float Value) -{ - if (bAllowUserInput && !IsAutopilotEnabled()) { - GetPossessedVehicle()->SetThrottleInput(Value); - } -} - -void AWheeledVehicleController::SetSteeringInput(const float Value) -{ - if (bAllowUserInput && !IsAutopilotEnabled()) { - GetPossessedVehicle()->SetSteeringInput(Value); - } -} - -void AWheeledVehicleController::SetBrakeInput(const float Value) -{ - if (bAllowUserInput && !IsAutopilotEnabled()) { - GetPossessedVehicle()->SetBrakeInput(Value); - } -} - -void AWheeledVehicleController::ToggleReverse() -{ - if (bAllowUserInput && !IsAutopilotEnabled()) { - GetPossessedVehicle()->ToggleReverse(); - } -} - -void AWheeledVehicleController::HoldHandbrake() -{ - if (bAllowUserInput && !IsAutopilotEnabled()) { - GetPossessedVehicle()->HoldHandbrake(); - } -} - -void AWheeledVehicleController::ReleaseHandbrake() -{ - if (bAllowUserInput && !IsAutopilotEnabled()) { - GetPossessedVehicle()->ReleaseHandbrake(); - } -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/WheeledVehicleController.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/WheeledVehicleController.h deleted file mode 100644 index 04e261f37..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Vehicle/WheeledVehicleController.h +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Vehicle/WheeledVehicleAIController.h" - -#include "CoreMinimal.h" - -#include "WheeledVehicleController.generated.h" - -class UCameraComponent; -class USpringArmComponent; - -/// Wheeled vehicle controller with cameras and optional user input. -UCLASS() -class CARLA_API AWheeledVehicleController : public AWheeledVehicleAIController -{ - GENERATED_BODY() - - // =========================================================================== - /// @name Constructor - // =========================================================================== - /// @{ -public: - - AWheeledVehicleController(const FObjectInitializer& ObjectInitializer); - - ~AWheeledVehicleController(); - - /// @} - // =========================================================================== - /// @name AActor overrides - // =========================================================================== - /// @{ -public: - - virtual void BeginPlay() override; - - /// @} - // =========================================================================== - /// @name APlayerController overrides - // =========================================================================== - /// @{ -public: - - virtual void SetupInputComponent() override; - - virtual void Possess(APawn *aPawn) override; - - virtual void CalcCamera(float DeltaTime, FMinimalViewInfo& OutResult) override; - - /// @} - // =========================================================================== - /// @name User input - // =========================================================================== - /// @{ -public: - - /// Enable keyboard control. - UFUNCTION(Category = "Vehicle User Input", BlueprintCallable) - void EnableUserInput(bool Enable); - - /// @} - // =========================================================================== - /// @name Camera movement - // =========================================================================== - /// @{ -private: - - void ChangeCameraZoom(float Value); - - void ChangeCameraUp(float Value); - - void ChangeCameraRight(float Value); - - void EnableOnBoardCamera(bool bEnable = true, bool bForce = false); - - void ToggleCamera() - { - EnableOnBoardCamera(!bOnBoardCameraIsActive); - } - - /// @} - // =========================================================================== - /// @name Vehicle movement - // =========================================================================== - /// @{ -private: - - void SetThrottleInput(float Value); - - void SetSteeringInput(float Value); - - void SetBrakeInput(float Value); - - void ToggleReverse(); - - void HoldHandbrake(); - - void ReleaseHandbrake(); - - /// @} - // =========================================================================== - // -- Member variables ------------------------------------------------------- - // =========================================================================== -private: - - UPROPERTY(EditAnywhere) - USpringArmComponent *SpringArm; - - UPROPERTY(EditAnywhere) - UCameraComponent *PlayerCamera; - - UPROPERTY(EditAnywhere) - UCameraComponent *OnBoardCamera; - - UPROPERTY() - bool bOnBoardCameraIsActive = false; - - UPROPERTY(Category = "Vehicle User Input", VisibleAnywhere) - bool bAllowUserInput = false; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerAIController.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerAIController.cpp deleted file mode 100644 index 69f0279f0..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerAIController.cpp +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "WalkerAIController.h" - -#include "Navigation/CrowdFollowingComponent.h" -#include "Perception/AIPerceptionComponent.h" -#include "Perception/AISenseConfig_Sight.h" -#include "WheeledVehicle.h" -#include "WheeledVehicleMovementComponent.h" - -#ifdef CARLA_AI_WALKERS_EXTRA_LOG -# include -# define LOG_AI_WALKER(Verbosity, Text) UE_LOG(LogCarla, Verbosity, TEXT("Walker %s " Text), *GetPawn()->GetName()); -# define EXTRA_LOG_ONLY(predicate) predicate -#else -# define LOG_AI_WALKER(Verbosity, Text) -# define EXTRA_LOG_ONLY(predicate) -#endif // CARLA_AI_WALKERS_EXTRA_LOG - -static constexpr float UPDATE_TIME_IN_SECONDS = 0.6f; -static constexpr float PREVISION_TIME_IN_SECONDS = 5.0f; -static constexpr float WALKER_SIGHT_RADIUS = 500.0f; -static constexpr float WALKER_SPEED_DAMPING = 4.0f; -static constexpr float WALKER_PERIPHERAL_VISION_ANGLE_IN_DEGREES = 130.0f; -static constexpr float WALKER_MAX_TIME_PAUSED = 5.0f; -static constexpr float VEHICLE_SAFETY_RADIUS = 600.0f; - - -// ============================================================================= -// -- PawnPath ----------------------------------------------------------------- -// ============================================================================= - -class PawnPath { -private: - - static FVector GetLocation(const AActor &Actor) - { - const FVector &Location = Actor.GetActorLocation(); - return {Location.X, Location.Y, 0.0f}; - } - - static FVector GetForwardVector(const AActor &Actor) - { - return Actor.GetTransform().GetRotation().GetForwardVector(); - } - - static float GetForwardSpeed(const AWheeledVehicle &Vehicle) - { - const auto *MovementComponent = Vehicle.GetVehicleMovementComponent(); - check(nullptr != MovementComponent); - return MovementComponent->GetForwardSpeed(); - } - -#ifdef CARLA_AI_WALKERS_EXTRA_LOG - static FVector GetPointForDrawing(const FVector &Location) - { - return {Location.X, Location.Y, 50.0f}; - } -#endif // CARLA_AI_WALKERS_EXTRA_LOG - - /// Helper constructor for vehicles. - explicit PawnPath(const FVector &Location, const FVector &ForwardDirection, const float Speed) : - Start(Location - ForwardDirection * VEHICLE_SAFETY_RADIUS), - End(Location + ForwardDirection * (VEHICLE_SAFETY_RADIUS + Speed * PREVISION_TIME_IN_SECONDS)) {} - -private: - - explicit PawnPath(const APawn &Walker) : - Start(GetLocation(Walker)), - End(GetLocation(Walker) + GetForwardVector(Walker) * WALKER_SPEED_DAMPING * WALKER_SIGHT_RADIUS) {} - - explicit PawnPath(const AWheeledVehicle &Vehicle) : - PawnPath(GetLocation(Vehicle), GetForwardVector(Vehicle), GetForwardSpeed(Vehicle)) {} - - static bool Intersect(const PawnPath &Lhs, const PawnPath &Rhs, UWorld* EXTRA_LOG_ONLY(World)) - { - EXTRA_LOG_ONLY(Lhs.DrawDebugArrow(World)); - EXTRA_LOG_ONLY(Rhs.DrawDebugArrow(World)); - FVector IntersectionPoint; - const bool bIntersect = FMath::SegmentIntersection2D( - Lhs.Start, Lhs.End, - Rhs.Start, Rhs.End, - IntersectionPoint); - -#ifdef CARLA_AI_WALKERS_EXTRA_LOG - if (bIntersect) { - DrawDebugPoint(World, GetPointForDrawing(IntersectionPoint), 10.0f, FColor::Red, false, 2.0f); - } -#endif // CARLA_AI_WALKERS_EXTRA_LOG - return bIntersect; - } - -#ifdef CARLA_AI_WALKERS_EXTRA_LOG - void DrawDebugArrow(UWorld *World) const - { - DrawDebugDirectionalArrow(World, GetPointForDrawing(Start), GetPointForDrawing(End), 60.0f, FColor::Red, false, 1.0f); - } -#endif // CARLA_AI_WALKERS_EXTRA_LOG - -public: - - /// Check if the paths of @a Walker and @a Vehicle intersect. - /// - /// It checks if within the update time the vehicle will cross the straight - /// line of @a Walker sight radius on its forward direction. - static bool Intersect(const APawn &Walker, const AWheeledVehicle &Vehicle) - { - return Intersect(PawnPath(Walker), PawnPath(Vehicle), Walker.GetWorld()); - } - -private: - - FVector Start; - - FVector End; -}; - -// ============================================================================= -// -- Other static functions --------------------------------------------------- -// ============================================================================= - -static bool IntersectsWithVehicle(const APawn &Self, const TArray &Actors) -{ - for (auto *Actor : Actors) { - const auto *Vehicle = Cast(Actor); - if ((Vehicle != nullptr) && PawnPath::Intersect(Self, *Vehicle)) { - return true; - } - } - return false; -} - -// ============================================================================= -// -- AWalkerAIController ------------------------------------------------------ -// ============================================================================= - -AWalkerAIController::AWalkerAIController(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer.SetDefaultSubobjectClass(TEXT("PathFollowingComponent"))) -{ - PrimaryActorTick.bCanEverTick = true; - PrimaryActorTick.TickInterval = UPDATE_TIME_IN_SECONDS; - - auto Perception = CreateDefaultSubobject(TEXT("AIPerception Component")); - check(Perception != nullptr); - - SightConfiguration = CreateDefaultSubobject(TEXT("SightConfiguration")); - SightConfiguration->SightRadius = WALKER_SIGHT_RADIUS; - SightConfiguration->LoseSightRadius = (WALKER_SIGHT_RADIUS + 100.0f); - SightConfiguration->PeripheralVisionAngleDegrees = WALKER_PERIPHERAL_VISION_ANGLE_IN_DEGREES; - SightConfiguration->DetectionByAffiliation.bDetectEnemies = true; - SightConfiguration->DetectionByAffiliation.bDetectNeutrals = true; - SightConfiguration->DetectionByAffiliation.bDetectFriendlies = true; - - Perception->ConfigureSense(*SightConfiguration); - Perception->SetDominantSense(SightConfiguration->GetSenseImplementation()); - Perception->OnPerceptionUpdated.AddDynamic(this, &AWalkerAIController::SenseActors); - SetPerceptionComponent(*Perception); - TimeInState=0.0f; -} - -void AWalkerAIController::Possess(APawn *aPawn) -{ - Super::Possess(aPawn); - check(aPawn != nullptr); - aPawn->OnTakeAnyDamage.AddDynamic(this, &AWalkerAIController::OnPawnTookDamage); -} - -void AWalkerAIController::Tick(float DeltaSeconds) -{ - Super::Tick(DeltaSeconds); - TimeInState+=DeltaSeconds; - if (Status != EWalkerStatus::RunOver) - { - switch (GetMoveStatus()) - { - default: break; - case EPathFollowingStatus::Idle: - //case EPathFollowingStatus::Waiting: //<-- incomplete path - LOG_AI_WALKER(Warning, "is stuck!"); - ChangeStatus(EWalkerStatus::Stuck); - break; - case EPathFollowingStatus::Paused: - if(TimeInState>WALKER_MAX_TIME_PAUSED){ - LOG_AI_WALKER(Log, "is paused, trying resume movement"); - TryResumeMovement(); - } - break; - - }; - } -} - -FPathFollowingRequestResult AWalkerAIController::MoveTo( - const FAIMoveRequest& MoveRequest, - FNavPathSharedPtr* OutPath) -{ -#ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Log, TEXT("Walker %s requested move from (%s) to (%s)"), - *GetPawn()->GetName(), - *GetPawn()->GetActorLocation().ToString(), - *MoveRequest.GetGoalLocation().ToString()) - -; -#endif // CARLA_AI_WALKERS_EXTRA_LOG - - ChangeStatus(EWalkerStatus::Moving); - return Super::MoveTo(MoveRequest, OutPath); -} - -void AWalkerAIController::OnMoveCompleted( - const FAIRequestID RequestID, - const FPathFollowingResult &Result) -{ - Super::OnMoveCompleted(RequestID, Result); -#ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Log, TEXT("Walker %s completed move at (%s)"), - *GetPawn()->GetName(), - *GetPawn()->GetActorLocation().ToString()); -#endif // CARLA_AI_WALKERS_EXTRA_LOG - ChangeStatus(EWalkerStatus::MoveCompleted); -} - -void AWalkerAIController::SenseActors(const TArray &Actors) -{ - const auto *aPawn = GetPawn(); - if ((Status == EWalkerStatus::Moving) && - (aPawn != nullptr) && - IntersectsWithVehicle(*aPawn, Actors)) { - TryPauseMovement(); - } -} - -void AWalkerAIController::TrySetMovement(bool paused) -{ - if(paused) TryPauseMovement(false); - else TryResumeMovement(); -} - -void AWalkerAIController::ChangeStatus(EWalkerStatus status) -{ - if(status==Status) return; - //switch (status) { } - TimeInState = 0.0f; - Status = status; -} - -void AWalkerAIController::TryResumeMovement() -{ - if (Status != EWalkerStatus::Moving) { - auto MoveRequestID = GetCurrentMoveRequestID(); - if (MoveRequestID == FAIRequestID()) { // equals invalid request. - LOG_AI_WALKER(Error, "has invalid move ID"); - } else { - if (!ResumeMove(MoveRequestID)) { - LOG_AI_WALKER(Error, "is unable to resume movement"); - } else { - LOG_AI_WALKER(Log, "resuming movement"); - ChangeStatus(EWalkerStatus::Moving); - } - } - } -} - -void AWalkerAIController::TryPauseMovement(const bool bItWasRunOver) -{ - if ((Status != EWalkerStatus::Paused) && (Status != EWalkerStatus::RunOver)) { - auto MoveRequestID = GetCurrentMoveRequestID(); - if (MoveRequestID == FAIRequestID()) { // equals invalid request. - LOG_AI_WALKER(Error, "has invalid move ID"); - } else { - if (!PauseMove(MoveRequestID)) { - LOG_AI_WALKER(Error, "is unable to pause movement"); - } else { - LOG_AI_WALKER(Log, "paused"); - ChangeStatus(bItWasRunOver ? EWalkerStatus::RunOver : EWalkerStatus::Paused); - } - } - } -} - -void AWalkerAIController::OnPawnTookDamage( - AActor *DamagedActor, - float Damage, - const UDamageType *DamageType, - AController *InstigatedBy, - AActor *DamageCauser) -{ - LOG_AI_WALKER(Warning, "has been run over"); - constexpr bool bItWasRunOver = true; - TryPauseMovement(bItWasRunOver); - ChangeStatus(EWalkerStatus::RunOver); -} - -#undef EXTRA_LOG_ONLY -#undef LOG_AI_WALKER diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerAIController.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerAIController.h deleted file mode 100644 index 5db79ee81..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerAIController.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "AIController.h" -#include "WalkerAIController.generated.h" - -class UAISenseConfig_Sight; - -UENUM(BlueprintType) -enum class EWalkerStatus : uint8 { - Moving UMETA(DisplayName = "Walker Is Moving"), - Paused UMETA(DisplayName = "Walker Movement Is Paused"), - MoveCompleted UMETA(DisplayName = "Walker Completed Move"), - Stuck UMETA(DisplayName = "Walker Is Stuck"), - RunOver UMETA(DisplayName = "Walker Has Been Run Over"), - Invalid UMETA(DisplayName = "Walker Is Invalid"), - Unknown UMETA(DisplayName = "Unknown"), -}; - -UCLASS() -class CARLA_API AWalkerAIController : public AAIController -{ - GENERATED_BODY() - -public: - - AWalkerAIController(const FObjectInitializer& ObjectInitializer); - - virtual void Possess(APawn *aPawn) override; - - virtual void Tick(float DeltaSeconds) override; - - - virtual FPathFollowingRequestResult MoveTo( - const FAIMoveRequest& MoveRequest, - FNavPathSharedPtr* OutPath = nullptr) override; - - virtual void OnMoveCompleted( - FAIRequestID RequestID, - const FPathFollowingResult &Result) override; - - UFUNCTION(BlueprintCallable) - void SenseActors(const TArray &Actors); - - EWalkerStatus GetWalkerStatus() const - { - return Status; - } - - UFUNCTION(BlueprintCallable) - void TrySetMovement(bool paused); - - UFUNCTION(BlueprintCallable) - float GetTimeInState() const { return TimeInState; } - -private: - - void ChangeStatus(EWalkerStatus status); - - void TryResumeMovement(); - - void TryPauseMovement(bool bItWasRunOver = false); - - UFUNCTION() - void OnPawnTookDamage( - AActor *DamagedActor, - float Damage, - const UDamageType *DamageType, - AController *InstigatedBy, - AActor *DamageCauser); - - UPROPERTY(Category = "Walker AI Controller", VisibleAnywhere) - UAISenseConfig_Sight *SightConfiguration; - - UPROPERTY(VisibleAnywhere) - EWalkerStatus Status = EWalkerStatus::Unknown; - - /** Continous time in the same EWalkerStatus */ - float TimeInState=0.0f; -}; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerSpawnerBase.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerSpawnerBase.cpp deleted file mode 100644 index f9113fc22..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerSpawnerBase.cpp +++ /dev/null @@ -1,339 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#include "Carla.h" -#include "WalkerSpawnerBase.h" - -#include "Util/RandomEngine.h" -#include "Walker/WalkerAIController.h" -#include "Walker/WalkerSpawnPoint.h" -#include "Components/BoxComponent.h" -#include "EngineUtils.h" -#include "GameFramework/Character.h" -#include "Kismet/KismetSystemLibrary.h" - -// ============================================================================= -// -- Static local methods ----------------------------------------------------- -// ============================================================================= - -static bool WalkerIsValid(const ACharacter *Walker) -{ - return ((Walker != nullptr) && !Walker->IsPendingKill()); -} - -static AWalkerAIController *GetController(ACharacter *Walker) -{ - return (WalkerIsValid(Walker) ? Cast(Walker->GetController()) : nullptr); -} - -static float GetDistance(const FVector &Location0, const FVector &Location1) -{ - return FMath::Abs((Location0 - Location1).Size()); -} - -static float GetDistance(const AActor &Actor0, const AActor &Actor1) -{ - return GetDistance(Actor0.GetActorLocation(), Actor1.GetActorLocation()); -} - -static EWalkerStatus GetWalkerStatus(ACharacter *Walker) -{ - const auto *Controller = GetController(Walker); - return (Controller == nullptr ? EWalkerStatus::Invalid : Controller->GetWalkerStatus()); -} - -// ============================================================================= -// -- Constructor and destructor ----------------------------------------------- -// ============================================================================= - -AWalkerSpawnerBase::AWalkerSpawnerBase(const FObjectInitializer& ObjectInitializer) : - Super(ObjectInitializer) -{ - PrimaryActorTick.bCanEverTick = true; - PrimaryActorTick.TickGroup = TG_PrePhysics; -} - -// ============================================================================= -// -- Overriden from AActor ---------------------------------------------------- -// ============================================================================= - -void AWalkerSpawnerBase::BeginPlay() -{ - Super::BeginPlay(); - - NumberOfWalkers = FMath::Max(0, NumberOfWalkers); - - // Allocate space for walkers. - Walkers.Reserve(NumberOfWalkers); - - // Find spawn points present in level. - TArray BeginSpawnPoints; - for (TActorIterator It(GetWorld()); It; ++It) { - BeginSpawnPoints.Add(*It); - AWalkerSpawnPoint *SpawnPoint = Cast(*It); - if (SpawnPoint != nullptr) { - SpawnPoints.Add(SpawnPoint); - } - } - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Log, TEXT("Found %d positions for spawning walkers at begin play."), BeginSpawnPoints.Num()); - UE_LOG(LogCarla, Log, TEXT("Found %d positions for spawning walkers during game play."), SpawnPoints.Num()); - #endif - if (SpawnPoints.Num() < 2) { - bSpawnWalkers = false; - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Error, TEXT("We don't have enough spawn points for walkers!")); - #endif - } else if (BeginSpawnPoints.Num() < NumberOfWalkers) { - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Warning, TEXT("Requested %d walkers, but we only have %d spawn points. Some will fail to spawn."), NumberOfWalkers, BeginSpawnPoints.Num()); - #endif - } - - GetRandomEngine()->Shuffle(BeginSpawnPoints); - - if (bSpawnWalkers && bSpawnWalkersAtBeginPlay) { - uint32 Count = 0u; - for (auto i = 0; i < NumberOfWalkers; ++i) { - if (TryToSpawnWalkerAt(*BeginSpawnPoints[i % BeginSpawnPoints.Num()])) { - ++Count; - } - } - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Log, TEXT("Spawned %d walkers at begin play."), Count); - #endif - } -} - -void AWalkerSpawnerBase::Tick(float DeltaTime) -{ - Super::Tick(DeltaTime); - - if (bSpawnWalkers && (NumberOfWalkers > GetCurrentNumberOfWalkers())) { - // Try to spawn one walker. - TryToSpawnWalkerAt(GetRandomSpawnPoint()); - } - - if (WalkersBlackList.Num() > 0) - { - CurrentBlackWalkerIndexToCheck = ++CurrentBlackWalkerIndexToCheck % WalkersBlackList.Num(); - ACharacter* BlackListedWalker = WalkersBlackList[CurrentBlackWalkerIndexToCheck]; - AWalkerAIController* controller = BlackListedWalker!=nullptr?Cast(BlackListedWalker->GetController()):nullptr; - if(BlackListedWalker != nullptr && controller!=nullptr && IsValid(BlackListedWalker)) - { - const auto Status = GetWalkerStatus(BlackListedWalker); - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Log, TEXT("Watching walker %s with state %d"), *UKismetSystemLibrary::GetDisplayName(BlackListedWalker), (int)Status); - #endif - switch(Status) - { - case EWalkerStatus::RunOver:{ - //remove from list and wait for auto-destroy - WalkersBlackList.RemoveAtSwap(CurrentBlackWalkerIndexToCheck); - break; - } - case EWalkerStatus::MoveCompleted: - { - BlackListedWalker->Destroy(); - break; - } - default: { - switch(controller->GetMoveStatus()) - { - case EPathFollowingStatus::Idle: - if(!TrySetDestination(*BlackListedWalker)) - { - if(!SetRandomWalkerDestination(BlackListedWalker)) - { - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla,Error,TEXT("Could not set a random destination to walker %s"),*UKismetSystemLibrary::GetDisplayName(BlackListedWalker)); - #endif - } - } - break; - case EPathFollowingStatus::Waiting: - //incomplete path - break; - case EPathFollowingStatus::Paused: - //waiting for blueprint code - break; - case EPathFollowingStatus::Moving: - if(BlackListedWalker->GetVelocity().Size()>1.0f) - { - WalkersBlackList.RemoveAtSwap(CurrentBlackWalkerIndexToCheck); - Walkers.Add(BlackListedWalker); - } - break; - default: break; - } - break; - } - } - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Log, TEXT("New state for walker %s : %d"), *UKismetSystemLibrary::GetDisplayName(BlackListedWalker), (int)GetWalkerStatus(BlackListedWalker)); - #endif - } - - } - - if (Walkers.Num() > 0) - { - // Check one walker, if fails black-list it or kill it. - CurrentWalkerIndexToCheck = ++CurrentWalkerIndexToCheck % Walkers.Num(); - auto Walker = Walkers[CurrentWalkerIndexToCheck]; - if(Walker == nullptr || !IsValid(Walker)) - { - Walkers.RemoveAtSwap(CurrentWalkerIndexToCheck); - } else { - const auto Status = GetWalkerStatus(Walker); - switch (Status) - { - default: - case EWalkerStatus::Paused: - case EWalkerStatus::Unknown: - break; - case EWalkerStatus::RunOver: { - Walkers.RemoveAtSwap(CurrentWalkerIndexToCheck); - break; - } - case EWalkerStatus::MoveCompleted: - Walker->Destroy(); - break; - case EWalkerStatus::Invalid: - case EWalkerStatus::Stuck: - { - SetRandomWalkerDestination(Walker); - // Black-list it and wait for this walker to move - WalkersBlackList.Add(Walker); - Walkers.RemoveAtSwap(CurrentWalkerIndexToCheck); - break; - } - } - } - } -} - -bool AWalkerSpawnerBase::SetRandomWalkerDestination(ACharacter *Walker) -{ - const auto &DestinationPoint = GetRandomSpawnPoint(); - auto Controller = GetController(Walker); - if(!Controller) { - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Warning, TEXT("AWalkerSpawnerBase::SetRandomWalkerDestination: Walker %s has no controller"), - *UKismetSystemLibrary::GetDisplayName(Walker) - ); - #endif - return false; - } - const EPathFollowingRequestResult::Type request_result = Controller->MoveToLocation(DestinationPoint.GetActorLocation(),-1.0f,false,true,true,true,nullptr,true); - switch(request_result) - { - case EPathFollowingRequestResult::Type::Failed: - { - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Warning, TEXT("AWalkerSpawnerBase::SetRandomWalkerDestination: Bad destination point %s"), - *UKismetSystemLibrary::GetDisplayName(&DestinationPoint) - ); - #endif - return false; - } - case EPathFollowingRequestResult::Type::AlreadyAtGoal:{ - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG(LogCarla, Log, TEXT("AWalkerSpawnerBase::SetRandomWalkerDestination already in destination, generating new location")); - #endif - return SetRandomWalkerDestination(Walker); - } - default: case EPathFollowingRequestResult::Type::RequestSuccessful: return true; - } -} - -// ============================================================================= -// -- Other member functions --------------------------------------------------- -// ============================================================================= - -void AWalkerSpawnerBase::SetNumberOfWalkers(const int32 Count) -{ - if (Count > 0) { - bSpawnWalkers = true; - NumberOfWalkers = Count; - } else { - bSpawnWalkers = false; - } -} - -const AWalkerSpawnPointBase &AWalkerSpawnerBase::GetRandomSpawnPoint() -{ - check(SpawnPoints.Num() > 0); - const auto *SpawnPoint = GetRandomEngine()->PickOne(SpawnPoints); - check(SpawnPoint != nullptr); - return *SpawnPoint; -} - -bool AWalkerSpawnerBase::TryGetValidDestination(const FVector &Origin, FVector &Destination) -{ - const auto &DestinationPoint = GetRandomSpawnPoint(); - Destination = DestinationPoint.GetActorLocation(); - return (GetDistance(Origin, Destination) >= MinimumWalkDistance); -} - -bool AWalkerSpawnerBase::TryToSpawnWalkerAt(const AWalkerSpawnPointBase &SpawnPoint) -{ - // Try find destination. - FVector Destination; - if (!TryGetValidDestination(SpawnPoint.GetActorLocation(), Destination)) { - return false; - } - - // Spawn walker. - ACharacter *Walker; - SpawnWalker(SpawnPoint.GetActorTransform(), Walker); - if (!WalkerIsValid(Walker)) { - return false; - } - - // Assign controller. - Walker->AIControllerClass = AWalkerAIController::StaticClass(); - Walker->SpawnDefaultController(); - auto Controller = GetController(Walker); - if (Controller == nullptr) { // Sometimes fails... - UE_LOG(LogCarla, Error, TEXT("Something went wrong creating the controller for the new walker")); - Walker->Destroy(); - return false; - } - - // Add walker and set destination. - Walkers.Add(Walker); - if (Controller->MoveToLocation(Destination,-1.0f,false,true,true,true,nullptr,true)!=EPathFollowingRequestResult::Type::RequestSuccessful) - { - SetRandomWalkerDestination(Walker); - } - return true; -} - -bool AWalkerSpawnerBase::TrySetDestination(ACharacter &Walker) -{ - // Try to retrieve controller. - auto Controller = GetController(&Walker); - if (Controller == nullptr) { - UE_LOG(LogCarla, Warning, TEXT("Could not get valid controller for walker: %s"), *Walker.GetName()); - return false; - } - - // Try find destination. - FVector Destination; - if (!TryGetValidDestination(Walker.GetActorLocation(), Destination)) { - #ifdef CARLA_AI_WALKERS_EXTRA_LOG - UE_LOG( - LogCarla, Warning, - TEXT("Could not get a new destiny: %s for walker: %s"), - *Destination.ToString(), *Walker.GetName() - ); - #endif - return false; - } - - return Controller->MoveToLocation(Destination,-1.0f,false,true,true,true,nullptr,true)==EPathFollowingRequestResult::RequestSuccessful; -} diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerSpawnerBase.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerSpawnerBase.h deleted file mode 100644 index c1d05d5dc..000000000 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Walker/WalkerSpawnerBase.h +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma -// de Barcelona (UAB). -// -// This work is licensed under the terms of the MIT license. -// For a copy, see . - -#pragma once - -#include "Util/ActorWithRandomEngine.h" - -#include "WalkerSpawnerBase.generated.h" - -class AWalkerSpawnPoint; -class AWalkerSpawnPointBase; -class UBoxComponent; - -/// Base class for spawning walkers. Implement SpawnWalker in derived -/// blueprints. -/// -/// Walkers are spawned at a random AWalkerSpawnPoint present in the level, and -/// walk until its destination is reached at another random AWalkerSpawnPoint. -UCLASS(Abstract) -class CARLA_API AWalkerSpawnerBase : public AActorWithRandomEngine -{ - GENERATED_BODY() - - // =========================================================================== - /// @name Constructor and destructor - // =========================================================================== - /// @{ -public: - - AWalkerSpawnerBase(const FObjectInitializer& ObjectInitializer); - - /// @} - // =========================================================================== - /// @name Overriden from AActor - // =========================================================================== - /// @{ -protected: - - virtual void BeginPlay() override; - -public: - - virtual void Tick(float DeltaTime) override; - - - /// @} - // =========================================================================== - /// @name Blueprintable functions - // =========================================================================== - /// @{ -protected: - - UFUNCTION(BlueprintImplementableEvent) - void SpawnWalker(const FTransform &SpawnTransform, ACharacter *&SpawnedCharacter); - - /// @} - // =========================================================================== - /// @name Other member functions - // =========================================================================== - /// @{ -public: - - void SetNumberOfWalkers(int32 Count); - - int32 GetCurrentNumberOfWalkers() const - { - return Walkers.Num() + WalkersBlackList.Num(); - } - - const TArray &GetWalkersWhiteList() const { - return Walkers; - } - - const TArray &GetWalkersBlackList() const { - return WalkersBlackList; - } - -private: - - const AWalkerSpawnPointBase &GetRandomSpawnPoint(); - - bool TryGetValidDestination(const FVector &Origin, FVector &Destination); - - bool TryToSpawnWalkerAt(const AWalkerSpawnPointBase &SpawnPoint); - - bool TrySetDestination(ACharacter &Walker); - - bool SetRandomWalkerDestination(ACharacter * Walker); - /// @} - -private: - - /** If false, no walker will be spawned at all. */ - UPROPERTY(Category = "Walker Spawner", EditAnywhere) - bool bSpawnWalkers = true; - - /** If false, no walker will be spawned at begin play. */ - UPROPERTY(Category = "Walker Spawner", EditAnywhere, meta = (EditCondition = bSpawnWalkers)) - bool bSpawnWalkersAtBeginPlay = true; - - /** Number of walkers to be present within the volume. */ - UPROPERTY(Category = "Walker Spawner", EditAnywhere, meta = (EditCondition = bSpawnWalkers, ClampMin = "1")) - int32 NumberOfWalkers = 10; - - /** Minimum walk distance in centimeters. */ - UPROPERTY(Category = "Walker Spawner", EditAnywhere, meta = (EditCondition = bSpawnWalkers)) - float MinimumWalkDistance = 1500.0f; - - UPROPERTY(Category = "Walker Spawner", VisibleAnywhere, AdvancedDisplay) - TArray SpawnPoints; - - UPROPERTY(Category = "Walker Spawner", VisibleAnywhere, AdvancedDisplay) - TArray Walkers; - - UPROPERTY(Category = "Walker Spawner", VisibleAnywhere, AdvancedDisplay) - TArray WalkersBlackList; - - uint32 CurrentWalkerIndexToCheck = 0u; - - uint32 CurrentBlackWalkerIndexToCheck = 0u; -}; diff --git a/Unreal/CarlaUE4/Source/CarlaUE4/CarlaUE4GameModeBase.cpp b/Unreal/CarlaUE4/Source/CarlaUE4/CarlaUE4GameModeBase.cpp deleted file mode 100644 index 22f29e91f..000000000 --- a/Unreal/CarlaUE4/Source/CarlaUE4/CarlaUE4GameModeBase.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "CarlaUE4.h" -#include "CarlaUE4GameModeBase.h" - - - - diff --git a/Unreal/CarlaUE4/Source/CarlaUE4/CarlaUE4GameModeBase.h b/Unreal/CarlaUE4/Source/CarlaUE4/CarlaUE4GameModeBase.h deleted file mode 100644 index cc0c8b636..000000000 --- a/Unreal/CarlaUE4/Source/CarlaUE4/CarlaUE4GameModeBase.h +++ /dev/null @@ -1,19 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "GameFramework/GameModeBase.h" -#include "CarlaUE4GameModeBase.generated.h" - -/** - * - */ -UCLASS() -class CARLAUE4_API ACarlaUE4GameModeBase : public AGameModeBase -{ - GENERATED_BODY() - - - - -};