1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

Move RCT2::GetRCTStringBufferLen to RCT12

It’s used in both
This commit is contained in:
Gymnasiast
2023-12-10 19:33:50 +01:00
parent 01fc353cc8
commit 3df551ffbf
6 changed files with 43 additions and 37 deletions

View File

@@ -2473,7 +2473,7 @@ namespace RCT1
{
const auto originalString = _s4.StringTable[stringId % 1024];
auto originalStringView = std::string_view(
originalString, RCT2::GetRCT2StringBufferLen(originalString, USER_STRING_MAX_LENGTH));
originalString, RCT12::GetRCTStringBufferLen(originalString, USER_STRING_MAX_LENGTH));
auto asUtf8 = RCT2StringToUTF8(originalStringView, RCT2LanguageId::EnglishUK);
auto justText = RCT12RemoveFormattingUTF8(asUtf8);
return justText.data();

View File

@@ -924,3 +924,35 @@ uint8_t ConvertToTD46Flags(const TrackDesignTrackElement& source)
return trackFlags;
}
namespace RCT12
{
size_t GetRCTStringBufferLen(const char* buffer, size_t maxBufferLen)
{
constexpr char MULTIBYTE = static_cast<char>(255);
size_t len = 0;
for (size_t i = 0; i < maxBufferLen; i++)
{
auto ch = buffer[i];
if (ch == MULTIBYTE)
{
i += 2;
// Check if reading two more bytes exceeds max buffer len
if (i < maxBufferLen)
{
len += 3;
}
}
else if (ch == '\0')
{
break;
}
else
{
len++;
}
}
return len;
}
} // namespace RCT12

View File

@@ -914,3 +914,12 @@ enum class TD46Flags : uint8_t
void ConvertFromTD46Flags(TrackDesignTrackElement& target, uint8_t flags);
uint8_t ConvertToTD46Flags(const TrackDesignTrackElement& source);
namespace RCT12
{
/**
* Iterates an RCT string buffer and returns the length of the string in bytes.
* Handles single and multi-byte strings.
*/
size_t GetRCTStringBufferLen(const char* buffer, size_t maxBufferLen);
} // namespace RCT12

View File

@@ -87,35 +87,6 @@ namespace RCT2
}
}
size_t GetRCT2StringBufferLen(const char* buffer, size_t maxBufferLen)
{
constexpr char MULTIBYTE = static_cast<char>(255);
size_t len = 0;
for (size_t i = 0; i < maxBufferLen; i++)
{
auto ch = buffer[i];
if (ch == MULTIBYTE)
{
i += 2;
// Check if reading two more bytes exceeds max buffer len
if (i < maxBufferLen)
{
len += 3;
}
}
else if (ch == '\0')
{
break;
}
else
{
len++;
}
}
return len;
}
uint8_t Ride::GetMinCarsPerTrain() const
{
return MinMaxCarsPerTrain >> 4;

View File

@@ -1048,12 +1048,6 @@ namespace RCT2
track_type_t RCT2TrackTypeToOpenRCT2(RCT12TrackType origTrackType, ride_type_t rideType, bool convertFlat);
RCT12TrackType OpenRCT2TrackTypeToRCT2(track_type_t origTrackType);
/**
* Iterates an RCT2 string buffer and returns the length of the string in bytes.
* Handles single and multi-byte strings.
*/
size_t GetRCT2StringBufferLen(const char* buffer, size_t maxBufferLen);
struct FootpathMapping
{
std::string_view Original;

View File

@@ -2327,7 +2327,7 @@ namespace RCT2
{
const auto originalString = _s6.CustomStrings[stringId % 1024];
auto originalStringView = std::string_view(
originalString, GetRCT2StringBufferLen(originalString, USER_STRING_MAX_LENGTH));
originalString, RCT12::GetRCTStringBufferLen(originalString, USER_STRING_MAX_LENGTH));
auto asUtf8 = RCT2StringToUTF8(originalStringView, RCT2LanguageId::EnglishUK);
auto justText = RCT12RemoveFormattingUTF8(asUtf8);
return justText.data();