add helper methods for object entry names

This commit is contained in:
Ted John 2016-07-09 15:24:00 +01:00
parent 3c64010fe1
commit ce878723d7
4 changed files with 29 additions and 4 deletions

View File

@ -122,4 +122,7 @@ void object_create_identifier_name(char* string_buffer, const rct_object_entry*
rct_object_entry *object_list_find_by_name(const char *name);
rct_object_entry *object_list_find(rct_object_entry *entry);
void object_entry_get_name(utf8 * buffer, size_t bufferSize, const rct_object_entry * entry);
void object_entry_get_name_fixed(utf8 * buffer, size_t bufferSize, const rct_object_entry * entry);
#endif

View File

@ -172,8 +172,8 @@ namespace ObjectFactory
Object * result = CreateObject(*entry);
if (result != nullptr)
{
utf8 objectName[9] = { 0 };
Memory::Copy(objectName, entry->name, 8);
utf8 objectName[9];
object_entry_get_name_fixed(objectName, sizeof(objectName), entry);
auto readContext = ReadObjectContext(objectName);
auto chunkStream = MemoryStream(data, dataSize);

View File

@ -192,8 +192,8 @@ public:
void AddObject(const rct_object_entry * objectEntry, const void * data, size_t dataSize) override
{
char objectName[9] = { 0 };
Memory::Copy(objectName, objectEntry->name, 8);
utf8 objectName[9];
object_entry_get_name_fixed(objectName, sizeof(objectName), objectEntry);
int realChecksum = object_calculate_checksum(objectEntry, (const uint8 *)data, (int)dataSize);
if (realChecksum != objectEntry->checksum)

View File

@ -26,6 +26,7 @@
#include "ride/track.h"
#include "ride/track_design.h"
#include "util/sawyercoding.h"
#include "util/util.h"
#include "world/entrance.h"
#include "world/footpath.h"
#include "world/scenery.h"
@ -255,3 +256,24 @@ void * get_loaded_object_chunk(size_t index)
void *entry = object_entry_groups[objectType].chunks[entryIndex];
return entry;
}
void object_entry_get_name(utf8 * buffer, size_t bufferSize, const rct_object_entry * entry)
{
size_t nameLength = 8;
const char * end = memchr(entry->name, ' ', 8);
if (end != NULL)
{
nameLength = (size_t)(end - entry->name);
}
bufferSize = min(nameLength + 1, bufferSize);
memcpy(buffer, entry->name, bufferSize - 1);
buffer[bufferSize - 1] = 0;
}
void object_entry_get_name_fixed(utf8 * buffer, size_t bufferSize, const rct_object_entry * entry)
{
bufferSize = min(9, bufferSize);
memcpy(buffer, entry->name, bufferSize - 1);
buffer[bufferSize - 1] = 0;
}