Gems/AtomLyIntegration

Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
This commit is contained in:
Esteban Papp
2021-08-02 09:26:06 -07:00
parent f665f572f3
commit b9cfce8165
6 changed files with 53 additions and 36 deletions
@@ -9,6 +9,7 @@
#include <FFontXML_Internal.h>
#include <AzCore/IO/Path/Path.h>
#include <AzCore/std/string/conversions.h>
#include <shlobj_core.h>
@@ -16,11 +17,13 @@ namespace AtomFontInternal
{
void XmlFontShader::FoundElementImpl()
{
TCHAR sysFontPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(0, CSIDL_FONTS, 0, SHGFP_TYPE_DEFAULT, sysFontPath)))
wchar_t sysFontPathW[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(0, CSIDL_FONTS, 0, SHGFP_TYPE_DEFAULT, sysFontPathW)))
{
const AZ::IO::PathView fontName = AZ::IO::PathView(m_strFontPath.c_str()).Filename();
AZStd::string sysFontPath;
AZStd::to_string(sysFontPath, sysFontPathW);
AZ::IO::Path newFontPath(sysFontPath);
newFontPath /= fontName;
m_font->Load(newFontPath.c_str(), m_FontTexSize.x, m_FontTexSize.y, m_slotSizes.x, m_slotSizes.y, CreateTTFFontFlag(m_FontSmoothMethod, m_FontSmoothAmount), m_SizeRatio);
@@ -13,6 +13,8 @@
#if !defined(USE_NULLFONT_ALWAYS)
#include <CryCommon/ISystem.h>
#include <AzCore/Math/Color.h>
#include <AzCore/Math/Matrix4x4.h>
#include <AzCore/Math/MatrixUtils.h>
@@ -26,7 +28,6 @@
#include <AtomLyIntegration/AtomFont/FFont.h>
#include <AtomLyIntegration/AtomFont/AtomFont.h>
#include <AtomLyIntegration/AtomFont/FontTexture.h>
#include <CryCommon/UnicodeIterator.h>
#include <CryCommon/MathConversion.h>
#include <AzCore/std/parallel/lock.h>
@@ -409,6 +410,9 @@ Vec2 AZ::FFont::GetTextSizeUInternal(
const size_t fxIdx = ctx.m_fxIdx < fxSize ? ctx.m_fxIdx : 0;
const FontEffect& fx = m_effects[fxIdx];
AZStd::wstring strW;
AZStd::to_wstring(strW, str);
for (size_t i = 0, numPasses = fx.m_passes.size(); i < numPasses; ++i)
{
const FontRenderingPass* pass = &fx.m_passes[numPasses - i - 1];
@@ -426,7 +430,7 @@ Vec2 AZ::FFont::GetTextSizeUInternal(
// parse the string, ignoring control characters
uint32_t nextCh = 0;
Unicode::CIterator<const char*, false> pChar(str);
const wchar_t* pChar = strW.c_str();
while (uint32_t ch = *pChar)
{
++pChar;
@@ -556,6 +560,9 @@ uint32_t AZ::FFont::GetNumQuadsForText(const char* str, const bool asciiMultiLin
const size_t fxIdx = ctx.m_fxIdx < fxSize ? ctx.m_fxIdx : 0;
const FontEffect& fx = m_effects[fxIdx];
AZStd::wstring strW;
AZStd::to_wstring(strW, str);
for (size_t j = 0, numPasses = fx.m_passes.size(); j < numPasses; ++j)
{
size_t i = numPasses - j - 1;
@@ -567,7 +574,7 @@ uint32_t AZ::FFont::GetNumQuadsForText(const char* str, const bool asciiMultiLin
}
uint32_t nextCh = 0;
Unicode::CIterator<const char*, false> pChar(str);
const wchar_t* pChar = strW.c_str();
while (uint32_t ch = *pChar)
{
++pChar;
@@ -862,9 +869,12 @@ int AZ::FFont::CreateQuadsForText(const RHI::Viewport& viewport, float x, float
}
}
AZStd::wstring strW;
AZStd::to_wstring(strW, str);
// parse the string, ignoring control characters
uint32_t nextCh = 0;
Unicode::CIterator<const char*, false> pChar(str);
const wchar_t* pChar = strW.c_str();
while (uint32_t ch = *pChar)
{
++pChar;
@@ -1188,7 +1198,7 @@ void AZ::FFont::WrapText(AZStd::string& result, float maxWidth, const char* str,
const bool multiLine = strSize.y > GetRestoredFontSize(ctx).y;
int lastSpace = -1;
const char* pLastSpace = NULL;
const wchar_t* pLastSpace = NULL;
float lastSpaceWidth = 0.0f;
float curCharWidth = 0.0f;
@@ -1197,7 +1207,9 @@ void AZ::FFont::WrapText(AZStd::string& result, float maxWidth, const char* str,
float widthSum = 0.0f;
int curChar = 0;
Unicode::CIterator<const char*, false> pChar(result.c_str());
AZStd::wstring resultW;
AZStd::to_wstring(resultW, result.c_str());
const wchar_t* pChar = resultW.c_str();
while (uint32_t ch = *pChar)
{
// Dollar sign escape codes. The following scenarios can happen with dollar signs embedded in a string.
@@ -1224,7 +1236,7 @@ void AZ::FFont::WrapText(AZStd::string& result, float maxWidth, const char* str,
// get char width and sum it to the line width
// Note: This is not unicode compatible, since char-width depends on surrounding context (ie, combining diacritics etc)
char codepoint[5];
Unicode::Convert(codepoint, ch);
AZStd::to_string(codepoint, 5, (wchar_t*)&ch, 1);
curCharWidth = GetTextSize(codepoint, true, ctx).x;
// keep track of spaces
@@ -1233,15 +1245,15 @@ void AZ::FFont::WrapText(AZStd::string& result, float maxWidth, const char* str,
{
lastSpace = curChar;
lastSpaceWidth = curLineWidth + curCharWidth;
pLastSpace = pChar.GetPosition();
pLastSpace = pChar;
assert(*pLastSpace == ' ');
}
bool prevCharWasNewline = false;
const bool notFirstChar = pChar.GetPosition() != result.c_str();
const bool notFirstChar = pChar != resultW.c_str();
if (*pChar && notFirstChar)
{
const char* pPrevCharStr = pChar.GetPosition() - 1;
const wchar_t* pPrevCharStr = pChar - 1;
prevCharWasNewline = pPrevCharStr[0] == '\n';
}
@@ -1268,12 +1280,12 @@ void AZ::FFont::WrapText(AZStd::string& result, float maxWidth, const char* str,
}
else
{
const char* buf = pChar.GetPosition();
size_t bytesProcessed = buf - result.c_str();
result.insert(bytesProcessed, '\n'); // Insert the newline, this invalidates the iterator
buf = result.c_str() + bytesProcessed; // In case reallocation occurs, we ensure we are inside the new buffer
const wchar_t* buf = pChar;
size_t bytesProcessed = buf - resultW.c_str();
resultW.insert(resultW.begin() + bytesProcessed, L'\n'); // Insert the newline, this invalidates the iterator
buf = resultW.c_str() + bytesProcessed; // In case reallocation occurs, we ensure we are inside the new buffer
assert(*buf == '\n');
pChar.SetPosition(buf); // pChar once again points inside the target string, at the current character
pChar = buf; // pChar once again points inside the target string, at the current character
assert(*pChar == ch);
++pChar;
++curChar;
@@ -22,6 +22,8 @@
#include <AzCore/Casting/lossy_cast.h>
#include <CryCommon/ISystem.h>
// Sizes are defined in in 26.6 fixed float format (TT_F26Dot6), where
// 1 unit is 1/64 of a pixel.
constexpr int FractionalPixelUnits = 64;
@@ -94,7 +96,7 @@ AZ::FontRenderer::~FontRenderer()
}
//-------------------------------------------------------------------------------------------------
int AZ::FontRenderer::LoadFromFile(const string& fileName)
int AZ::FontRenderer::LoadFromFile(const AZStd::string& fileName)
{
int iError = FT_Init_FreeType(&m_library);
@@ -309,8 +311,7 @@ Vec2 AZ::FontRenderer::GetKerning(uint32_t leftGlyph, uint32_t rightGlyph)
#if !defined(_RELEASE)
if (0 != ftError)
{
string warnMsg;
warnMsg.Format("FT_Get_Kerning returned %d", ftError);
AZStd::string warnMsg = AZStd::string::format("FT_Get_Kerning returned %d", ftError);
CryWarning(VALIDATOR_MODULE_SYSTEM, VALIDATOR_WARNING, warnMsg.c_str());
}
#endif
@@ -14,8 +14,8 @@
#if !defined(USE_NULLFONT_ALWAYS)
#include <AtomLyIntegration/AtomFont/FontTexture.h>
#include <CryCommon/UnicodeIterator.h>
#include <AzCore/IO/FileIO.h>
#include <AzCore/std/string/conversions.h>
//-------------------------------------------------------------------------------------------------
AZ::FontTexture::FontTexture()
@@ -44,7 +44,7 @@ AZ::FontTexture::~FontTexture()
}
//-------------------------------------------------------------------------------------------------
int AZ::FontTexture::CreateFromFile(const string& fileName, int width, int height, AZ::FontSmoothMethod smoothMethod, AZ::FontSmoothAmount smoothAmount, int widthCellCount, int heightCellCount)
int AZ::FontTexture::CreateFromFile(const AZStd::string& fileName, int width, int height, AZ::FontSmoothMethod smoothMethod, AZ::FontSmoothAmount smoothAmount, int widthCellCount, int heightCellCount)
{
if (!m_glyphCache.LoadFontFromFile(fileName))
{
@@ -255,10 +255,10 @@ int AZ::FontTexture::PreCacheString(const char* string, int* updated, float size
uint16_t slotUsage = m_slotUsage++;
int updateCount = 0;
uint32_t character;
for (Unicode::CIterator<const char*, false> it(string); *it; ++it)
AZStd::wstring stringW;
AZStd::to_wstring(stringW, string);
for (wchar_t character : stringW)
{
character = *it;
TextureSlot* slot = GetCharSlot(character, clampedGlyphSize);
if (!slot)
@@ -124,7 +124,7 @@ int AZ::GlyphCache::Release()
}
//-------------------------------------------------------------------------------------------------
int AZ::GlyphCache::LoadFontFromFile(const string& fileName)
int AZ::GlyphCache::LoadFontFromFile(const AZStd::string & fileName)
{
return m_fontRenderer.LoadFromFile(fileName);
}
@@ -12,6 +12,7 @@
#if AZ_TRAIT_EMOTIONFX_HAS_GAME_CONTROLLER
#include <MCore/Source/LogManager.h>
#include <AzCore/std/string/conversions.h>
// joystick enum callback
@@ -20,7 +21,7 @@ BOOL CALLBACK GameController::EnumJoysticksCallback(const DIDEVICEINSTANCE* pdid
GameController* manager = static_cast<GameController*>(pContext);
// store the name
manager->mDeviceInfo.mName = pdidInstance->tszProductName;
AZStd::to_string(manager->mDeviceInfo.mName, pdidInstance->tszProductName);
// Skip anything other than the perferred Joystick device as defined by the control panel.
// Instead you could store all the enumerated Joysticks and let the user pick.
@@ -71,7 +72,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
if (pdidoi->guidType == GUID_XAxis)
{
manager->mDeviceElements[ ELEM_POS_X ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_POS_X ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_POS_X ].mPresent = true;
manager->mDeviceElements[ ELEM_POS_X ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_POS_X ].mCalibrationValue = 0.0f;
@@ -81,7 +82,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
if (pdidoi->guidType == GUID_YAxis)
{
manager->mDeviceElements[ ELEM_POS_Y ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_POS_Y ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_POS_Y ].mPresent = true;
manager->mDeviceElements[ ELEM_POS_Y ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_POS_Y ].mCalibrationValue = 0.0f;
@@ -91,7 +92,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
if (pdidoi->guidType == GUID_ZAxis)
{
manager->mDeviceElements[ ELEM_POS_Z ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_POS_Z ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_POS_Z ].mPresent = true;
manager->mDeviceElements[ ELEM_POS_Z ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_POS_Z ].mCalibrationValue = 0.0f;
@@ -101,7 +102,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
if (pdidoi->guidType == GUID_RxAxis)
{
manager->mDeviceElements[ ELEM_ROT_X ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_ROT_X ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_ROT_X ].mPresent = true;
manager->mDeviceElements[ ELEM_ROT_X ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_ROT_X ].mCalibrationValue = 0.0f;
@@ -111,7 +112,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
if (pdidoi->guidType == GUID_RyAxis)
{
manager->mDeviceElements[ ELEM_ROT_Y ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_ROT_Y ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_ROT_Y ].mPresent = true;
manager->mDeviceElements[ ELEM_ROT_Y ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_ROT_Y ].mCalibrationValue = 0.0f;
@@ -121,7 +122,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
if (pdidoi->guidType == GUID_RzAxis)
{
manager->mDeviceElements[ ELEM_ROT_Z ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_ROT_Z ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_ROT_Z ].mPresent = true;
manager->mDeviceElements[ ELEM_ROT_Z ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_ROT_Z ].mCalibrationValue = 0.0f;
@@ -134,7 +135,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
{
if (manager->mDeviceInfo.mNumSliders == 0)
{
manager->mDeviceElements[ ELEM_SLIDER_1 ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_SLIDER_1 ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_SLIDER_1 ].mPresent = true;
manager->mDeviceElements[ ELEM_SLIDER_1 ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_SLIDER_1 ].mCalibrationValue = 0.0f;
@@ -142,7 +143,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
}
else
{
manager->mDeviceElements[ ELEM_SLIDER_2 ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_SLIDER_2 ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_SLIDER_2 ].mPresent = true;
manager->mDeviceElements[ ELEM_SLIDER_2 ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_SLIDER_2 ].mCalibrationValue = 0.0f;
@@ -156,7 +157,7 @@ BOOL CALLBACK GameController::EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE*
if (pdidoi->guidType == GUID_POV)
{
const uint32 povIndex = manager->mDeviceInfo.mNumPOVs;
manager->mDeviceElements[ ELEM_POV_1 + povIndex ].mName = pdidoi->tszName;
AZStd::to_string(manager->mDeviceElements[ ELEM_POV_1 + povIndex ].mName, pdidoi->tszName);
manager->mDeviceElements[ ELEM_POV_1 + povIndex ].mPresent = true;
manager->mDeviceElements[ ELEM_POV_1 + povIndex ].mValue = 0.0f;
//manager->mDeviceElements[ ELEM_POV_1 + povIndex ].mCalibrationValue = 0.0f;