mirror of
https://github.com/ENSL/NS.git
synced 2024-11-22 04:31:12 +00:00
Optimised Text Localisation
Added an unordered map to act as a cache for text that has already been localised
This commit is contained in:
parent
eb91c70a75
commit
664a578775
4 changed files with 60 additions and 38 deletions
|
@ -22,6 +22,8 @@
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "hud.h"
|
#include "hud.h"
|
||||||
#include "cl_util.h"
|
#include "cl_util.h"
|
||||||
#include "common/cl_entity.h"
|
#include "common/cl_entity.h"
|
||||||
|
@ -38,6 +40,9 @@ extern playermove_t *pmove;
|
||||||
extern float HUD_GetFOV( void );
|
extern float HUD_GetFOV( void );
|
||||||
vec3_t vec3_origin( 0, 0, 0 );
|
vec3_t vec3_origin( 0, 0, 0 );
|
||||||
extern vec3_t v_angles;
|
extern vec3_t v_angles;
|
||||||
|
|
||||||
|
std::unordered_map<const char*, std::string> LocalizationMap;
|
||||||
|
|
||||||
//double sqrt(double x);
|
//double sqrt(double x);
|
||||||
//
|
//
|
||||||
//float Length(const float *v)
|
//float Length(const float *v)
|
||||||
|
@ -269,46 +274,63 @@ AVHHSPRITE LoadSprite(const char *pszName)
|
||||||
return SPR_Load(sz);
|
return SPR_Load(sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlushLocalization()
|
||||||
|
{
|
||||||
|
LocalizationMap.clear();
|
||||||
|
}
|
||||||
|
|
||||||
bool LocalizeString(const char* inMessage, string& outputString)
|
bool LocalizeString(const char* inMessage, string& outputString)
|
||||||
{
|
{
|
||||||
#define kMaxLocalizedStringLength 1024
|
#define kMaxLocalizedStringLength 1024
|
||||||
|
|
||||||
|
// Don't localize empty strings
|
||||||
|
if (!strcmp(inMessage, ""))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool theSuccess = false;
|
bool theSuccess = false;
|
||||||
char theInputString[kMaxLocalizedStringLength];
|
char theInputString[kMaxLocalizedStringLength];
|
||||||
char theOutputString[kMaxLocalizedStringLength];
|
char theOutputString[kMaxLocalizedStringLength];
|
||||||
|
|
||||||
// Don't localize empty strings
|
if(*inMessage != '#')
|
||||||
if(strcmp(inMessage, ""))
|
|
||||||
{
|
{
|
||||||
if(*inMessage != '#')
|
sprintf(theInputString, "#%s", inMessage);
|
||||||
{
|
}
|
||||||
sprintf(theInputString, "#%s", inMessage);
|
else
|
||||||
}
|
{
|
||||||
else
|
sprintf(theInputString, "%s", inMessage);
|
||||||
{
|
}
|
||||||
sprintf(theInputString, "%s", inMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
if((CHudTextMessage::LocaliseTextString(theInputString, theOutputString, kMaxLocalizedStringLength) != NULL))
|
|
||||||
{
|
|
||||||
outputString = theOutputString;
|
|
||||||
|
|
||||||
if(theOutputString[0] != '#')
|
|
||||||
{
|
std::unordered_map<const char*, std::string>::const_iterator FoundLocalization = LocalizationMap.find(theInputString);
|
||||||
theSuccess = true;
|
|
||||||
}
|
if (FoundLocalization != LocalizationMap.end())
|
||||||
else
|
{
|
||||||
{
|
outputString = FoundLocalization->second;
|
||||||
string theTempString = theOutputString;
|
return true;
|
||||||
theTempString = theTempString.substr(1, theTempString.length());
|
}
|
||||||
outputString = theTempString;
|
|
||||||
}
|
if((CHudTextMessage::LocaliseTextString(theInputString, theOutputString, kMaxLocalizedStringLength) != NULL))
|
||||||
|
{
|
||||||
|
LocalizationMap[inMessage] = theOutputString;
|
||||||
|
outputString = theOutputString;
|
||||||
|
|
||||||
|
if(theOutputString[0] != '#')
|
||||||
|
{
|
||||||
|
theSuccess = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
outputString = string("err: ") + theInputString;
|
string theTempString = theOutputString;
|
||||||
|
theTempString = theTempString.substr(1, theTempString.length());
|
||||||
|
outputString = theTempString;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outputString = string("err: ") + theInputString;
|
||||||
|
}
|
||||||
|
|
||||||
return theSuccess;
|
return theSuccess;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6825,16 +6825,6 @@ void AvHHud::UpdateResources(float inTimePassed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
string theResourceText;
|
|
||||||
char theResourceBuffer[64];
|
|
||||||
|
|
||||||
if(this->GetInTopDownMode() && this->mCommanderResourceLabel)
|
|
||||||
{
|
|
||||||
LocalizeString(kMarineResourcePrefix, theResourceText);
|
|
||||||
sprintf(theResourceBuffer, "%s %d", theResourceText.c_str(), this->mVisualResources);
|
|
||||||
this->mCommanderResourceLabel->setText(64, theResourceBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update visual resource indicators, expiring old ones
|
// Update visual resource indicators, expiring old ones
|
||||||
const float kNumericalInfoEffectLifetime = 1.1f;
|
const float kNumericalInfoEffectLifetime = 1.1f;
|
||||||
|
|
|
@ -3618,6 +3618,16 @@ void AvHHud::RenderCommanderUI()
|
||||||
AvHSpriteDrawTiles(mTopDownBottomSprite, 4, 1, 0, ScreenHeight()-theHeight, ScreenWidth(), ScreenHeight(), 0, 0, 1, 1);
|
AvHSpriteDrawTiles(mTopDownBottomSprite, 4, 1, 0, ScreenHeight()-theHeight, ScreenWidth(), ScreenHeight(), 0, 0, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->mCommanderResourceLabel)
|
||||||
|
{
|
||||||
|
string theResourceText;
|
||||||
|
char theResourceBuffer[64];
|
||||||
|
|
||||||
|
LocalizeString(kMarineResourcePrefix, theResourceText);
|
||||||
|
sprintf(theResourceBuffer, "%s %d", theResourceText.c_str(), this->mVisualResources);
|
||||||
|
this->mCommanderResourceLabel->setText(64, theResourceBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
// Draw scaled sprites for all ActionButtons
|
// Draw scaled sprites for all ActionButtons
|
||||||
this->DrawActionButtons();
|
this->DrawActionButtons();
|
||||||
|
|
||||||
|
|
|
@ -444,9 +444,9 @@ vec3_t AvHSHUGetRealLocation(const vec3_t& inLocation, const vec3_t& inMinBox, c
|
||||||
|
|
||||||
if((outLocation.x == outLocation.y) && (outLocation.y == outLocation.z) && (outLocation.z == 0.0f))
|
if((outLocation.x == outLocation.y) && (outLocation.y == outLocation.z) && (outLocation.z == 0.0f))
|
||||||
{
|
{
|
||||||
outLocation.x = (inMinBox.x + inMaxBox.x)/2.0f;
|
outLocation.x = (inMinBox.x + inMaxBox.x) * 0.5f;
|
||||||
outLocation.y = (inMinBox.y + inMaxBox.y)/2.0f;
|
outLocation.y = (inMinBox.y + inMaxBox.y) * 0.5f;
|
||||||
outLocation.z = (inMinBox.z + inMaxBox.z)/2.0f;
|
outLocation.z = (inMinBox.z + inMaxBox.z) * 0.5f;
|
||||||
}
|
}
|
||||||
return outLocation;
|
return outLocation;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue