diff --git a/src/font.cpp b/src/font.cpp index 14ad46fc..768c6b9f 100644 --- a/src/font.cpp +++ b/src/font.cpp @@ -31,7 +31,7 @@ class FontData friend class Font; private: - char *name; + String m_name; TileSet *tileset; ivec2 size; }; @@ -43,8 +43,7 @@ private: Font::Font(char const *path) : data(new FontData()) { - data->name = (char *)malloc(7 + strlen(path) + 1); - sprintf(data->name, " %s", path); + data->m_name = String(" ") + path; data->tileset = Tiler::Register(path, ivec2(0), ivec2(16)); data->size = data->tileset->GetSize(0); @@ -55,7 +54,6 @@ Font::Font(char const *path) Font::~Font() { Tiler::Deregister(data->tileset); - free(data->name); delete data; } @@ -66,7 +64,7 @@ void Font::TickDraw(float seconds) char const *Font::GetName() { - return data->name; + return data->m_name.C(); } void Font::Print(vec3 pos, char const *str, vec2 scale) diff --git a/src/gpu/shader.cpp b/src/gpu/shader.cpp index 5e1599ba..4618deaa 100644 --- a/src/gpu/shader.cpp +++ b/src/gpu/shader.cpp @@ -344,14 +344,13 @@ ShaderUniform Shader::GetUniformLocation(char const *uni) const ShaderUniform ret; #if defined USE_D3D9 || defined _XBOX /* Global variables are prefixed with "$" */ - char tmpname[128]; - sprintf(tmpname, "$%s", uni); + String tmpname = String("$") + uni; D3DXCONSTANT_DESC cdesc; D3DXHANDLE hr; UINT count; count = 0; - hr = data->frag_table->GetConstantByName(nullptr, tmpname); + hr = data->frag_table->GetConstantByName(nullptr, tmpname.C()); if (hr) data->frag_table->GetConstantDesc(hr, &cdesc, &count); if (count) @@ -361,7 +360,7 @@ ShaderUniform Shader::GetUniformLocation(char const *uni) const } count = 0; - hr = data->vert_table->GetConstantByName(nullptr, tmpname); + hr = data->vert_table->GetConstantByName(nullptr, tmpname.C()); if (hr) data->vert_table->GetConstantDesc(hr, &cdesc, &count); if (count) diff --git a/src/sample.cpp b/src/sample.cpp index d2d67d30..727e586d 100644 --- a/src/sample.cpp +++ b/src/sample.cpp @@ -45,7 +45,7 @@ class SampleData friend class Sample; private: - char *name, *path; + String m_name; #if defined USE_SDL_MIXER Mix_Chunk *m_chunk; int m_channel; @@ -59,9 +59,7 @@ private: Sample::Sample(char const *path) : data(new SampleData()) { - data->name = (char *)malloc(9 + strlen(path) + 1); - data->path = data->name + 9; - sprintf(data->name, " %s", path); + data->m_name = String(" ") + path; #if defined USE_SDL_MIXER Array pathlist = System::GetPathList(path); @@ -88,7 +86,6 @@ Sample::~Sample() #if defined USE_SDL_MIXER Mix_FreeChunk(data->m_chunk); #endif - free(data->name); delete data; } @@ -99,7 +96,7 @@ void Sample::TickGame(float seconds) char const *Sample::GetName() { - return data->name; + return data->m_name.C(); } void Sample::Play() diff --git a/src/text.cpp b/src/text.cpp index ead13c86..8763995d 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -32,8 +32,8 @@ class TextData friend class Text; private: - int font, align, length; - char *text; + int font, align; + String m_text; vec3 pos; }; @@ -45,8 +45,8 @@ Text::Text(char const *text, char const *font) : data(new TextData()) { data->font = Forge::Register(font); - data->text = text ? strdup(text) : nullptr; - data->length = text ? strlen(text) : 0; + if (text) + data->m_text = text; data->pos = vec3(0, 0, 0); m_drawgroup = DRAWGROUP_HUD; @@ -54,20 +54,12 @@ Text::Text(char const *text, char const *font) void Text::SetText(char const *text) { - if (data->text) - free(data->text); - data->text = text ? strdup(text) : nullptr; - data->length = text ? strlen(text) : 0; + data->m_text = text; } void Text::SetInt(int val) { - if (data->text) - free(data->text); - char text[128]; - sprintf(text, "%i", val); - data->text = strdup(text); - data->length = strlen(text); + data->m_text = String::Printf("%i", val); } void Text::SetPos(vec3 pos) @@ -90,22 +82,21 @@ void Text::TickDraw(float seconds) { Entity::TickDraw(seconds); - if (data->text) + int length = data->m_text.Count(); + if (length) { Font *font = Forge::GetFont(data->font); vec3 delta(0.0f); if (data->align == ALIGN_RIGHT) - delta.x -= data->length * font->GetSize().x; + delta.x -= length * font->GetSize().x; else if (data->align == ALIGN_CENTER) - delta.x -= data->length * font->GetSize().x / 2; - font->Print(data->pos + delta, data->text); + delta.x -= length * font->GetSize().x / 2; + font->Print(data->pos + delta, data->m_text.C()); } } Text::~Text() { - if (data->text) - free(data->text); Forge::Deregister(data->font); delete data; } diff --git a/src/tileset.cpp b/src/tileset.cpp index 6813c98e..dc7402b6 100644 --- a/src/tileset.cpp +++ b/src/tileset.cpp @@ -49,7 +49,7 @@ class TileSetData friend class TileSet; private: - char *name, *path; + String m_name; int *tiles, ntiles; ivec2 size, isize, count; vec2 scale; @@ -66,9 +66,7 @@ private: TileSet::TileSet(char const *path, ivec2 size, ivec2 count) : data(new TileSetData()) { - data->name = (char *)malloc(10 + strlen(path) + 1); - data->path = data->name + 10; - sprintf(data->name, " %s", path); + data->m_name = String(" ") + path; data->tiles = nullptr; data->m_texture = 0; @@ -100,7 +98,6 @@ TileSet::TileSet(char const *path, ivec2 size, ivec2 count) TileSet::~TileSet() { free(data->tiles); - free(data->name); delete data; } @@ -159,7 +156,7 @@ void TileSet::TickDraw(float seconds) char const *TileSet::GetName() { - return data->name; + return data->m_name.C(); } ivec2 TileSet::GetCount() const