From aed98b5d82851d7058d6dbe6717667419a62ea36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Wed, 2 Feb 2022 21:10:04 +0200 Subject: [PATCH] Initialize track data table at compile time --- src/openrct2/Context.cpp | 1 - src/openrct2/ride/TrackData.cpp | 15 +++++++++------ src/openrct2/ride/TrackData.h | 1 - 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index 69aac52c44..b3554692b9 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -416,7 +416,6 @@ namespace OpenRCT2 } _env->SetBasePath(DIRBASE::RCT2, rct2InstallPath); } - TrackMetaData::Init(); _objectRepository = CreateObjectRepository(_env); _objectManager = CreateObjectManager(*_objectRepository); diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 3a4a7942fe..5e76b16373 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -5702,15 +5702,13 @@ namespace OpenRCT2 { namespace TrackMetaData { - static std::vector _trackElementDescriptors; - void Init() + static constexpr auto BuildDescriptorTable() { - _trackElementDescriptors.clear(); - _trackElementDescriptors.reserve(TrackElemType::Count); + std::array res{}; - TrackElementDescriptor desc; for (int i = 0; i < TrackElemType::Count; i++) { + TrackElementDescriptor& desc = res[i]; desc.Description = RideConfigurationStringIds[i]; desc.AlternativeType = AlternativeTrackTypes[i]; desc.Block = const_cast(TrackBlocks[i]); @@ -5729,12 +5727,17 @@ namespace OpenRCT2 desc.SequenceElementAllowedWallEdges[j] = TrackSequenceElementAllowedWallEdges[i][j]; desc.SequenceProperties[j] = TrackSequenceProperties[i][j]; } - _trackElementDescriptors.push_back(desc); } + + return res; } + + static constexpr auto _trackElementDescriptors = BuildDescriptorTable(); + const TrackElementDescriptor& GetTrackElementDescriptor(const uint32_t type) { return _trackElementDescriptors[type]; } + } // namespace TrackMetaData } // namespace OpenRCT2 diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index 2ae7f8be41..08ab77f20b 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -97,7 +97,6 @@ namespace OpenRCT2 { namespace TrackMetaData { - void Init(); const TrackElementDescriptor& GetTrackElementDescriptor(const uint32_t type); } // namespace TrackMetaData } // namespace OpenRCT2