TombEngine/TombEngine/Renderer/Renderer11String.cpp

107 lines
2.7 KiB
C++
Raw Normal View History

#include "framework.h"
2021-12-22 16:23:57 +03:00
#include "Renderer/Renderer11.h"
2022-03-29 20:17:13 +11:00
2021-08-30 18:03:21 +03:00
namespace TEN::Renderer {
Merge branch 'state_cleaning_tier_2' into luarefactor # Conflicts: # .gitignore # Common/Game/collision/collide_room.h # Common/Game/control/control.h # Common/Game/items.h # Common/Specific/phd_global.h # Common/Specific/trmath.h # Scripting/src/TEN/Flow/Animations/Animations.h # Scripting/src/TEN/Flow/FlowHandler.cpp # Scripts/Settings.lua # TR5Main/Game/Lara/lara.cpp # TR5Main/Game/Lara/lara_basic.cpp # TR5Main/Game/Lara/lara_cheat.cpp # TR5Main/Game/Lara/lara_collide.cpp # TR5Main/Game/Lara/lara_crawl.cpp # TR5Main/Game/Lara/lara_helpers.cpp # TR5Main/Game/Lara/lara_jump.cpp # TR5Main/Game/Lara/lara_monkey.cpp # TR5Main/Game/Lara/lara_swim.cpp # TR5Main/Game/Lara/lara_tests.cpp # TR5Main/Game/animation.cpp # TR5Main/Game/camera.cpp # TR5Main/Game/collision/collide_item.cpp # TR5Main/Game/collision/collide_room.cpp # TR5Main/Game/collision/floordata.cpp # TR5Main/Game/control/control.cpp # TR5Main/Game/control/los.cpp # TR5Main/Game/control/volume.cpp # TR5Main/Game/effects/hair.cpp # TR5Main/Game/gui.cpp # TR5Main/Game/health.cpp # TR5Main/Game/items.cpp # TR5Main/Game/room.cpp # TR5Main/Game/savegame.cpp # TR5Main/Renderer/ConstantBuffers/MiscBuffer.h # TR5Main/Renderer/RenderPipelineState/RenderPipelineState.cpp # TR5Main/Renderer/RenderPipelineState/RenderPipelineState.h # TR5Main/Renderer/Renderer11Draw.cpp # TR5Main/Renderer/Renderer11Frame.cpp # TR5Main/Renderer/Renderer11Helper.cpp # TR5Main/Renderer/Renderer11Lara.cpp # TR5Main/Renderer/Renderer11PostProcess.cpp # TR5Main/Renderer/Renderer11Settings.cpp # TR5Main/Renderer/Renderer11String.cpp # TR5Main/Renderer/RendererSprites.h # TR5Main/Scripting/GameLogicScript.cpp # TR5Main/Scripting/GameScriptAnimations.cpp # TR5Main/Scripting/GameScriptItemInfo.cpp # TR5Main/Scripting/GameScriptItemInfo.h # TR5Main/Scripting/GameScriptMeshInfo.cpp # TR5Main/Scripting/GameScriptPosition.cpp # TR5Main/Specific/input.cpp # TR5Main/Specific/level.cpp # TR5Main/Specific/savegame/flatbuffers/ten_savegame_generated.h # TR5Main/TombEngine.vcxproj.filters # common/game/collision/collide_item.h
2022-05-05 06:28:43 +02:00
void Renderer11::DrawString(int x, int y, const char* string, D3DCOLOR color, int flags)
2022-03-29 20:17:13 +11:00
{
float factorX = ScreenWidth / REFERENCE_RES_WIDTH;
float factorY = ScreenHeight / REFERENCE_RES_HEIGHT;
RECT rect = { 0, 0, 0, 0 };
// Convert the string to wstring
int sizeNeeded = MultiByteToWideChar(CP_UTF8, 0, string, strlen(string), NULL, 0);
std::wstring wstr(sizeNeeded, 0);
MultiByteToWideChar(CP_UTF8, 0, string, strlen(string), &wstr[0], sizeNeeded);
// Prepare the structure for the renderer
RendererStringToDraw str;
str.String = wstr;
str.Flags = flags;
str.X = 0;
str.Y = 0;
str.Color = Vector3((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF);
2022-06-06 14:16:25 +03:00
str.Scale = ScreenWidth > ScreenHeight ? factorY : factorX;
// Measure the string
Vector2 size = m_gameFont->MeasureString(wstr.c_str());
2022-03-29 20:17:13 +11:00
if (flags & PRINTSTRING_CENTER)
{
2022-06-06 14:16:25 +03:00
int width = size.x * str.Scale;
rect.left = x * factorX - width / 2;
rect.right = x * factorX + width / 2;
2022-06-06 14:16:25 +03:00
rect.top += y * str.Scale;
rect.bottom += y * str.Scale;
Merge branch 'state_cleaning_tier_2' into luarefactor # Conflicts: # .gitignore # Common/Game/collision/collide_room.h # Common/Game/control/control.h # Common/Game/items.h # Common/Specific/phd_global.h # Common/Specific/trmath.h # Scripting/src/TEN/Flow/Animations/Animations.h # Scripting/src/TEN/Flow/FlowHandler.cpp # Scripts/Settings.lua # TR5Main/Game/Lara/lara.cpp # TR5Main/Game/Lara/lara_basic.cpp # TR5Main/Game/Lara/lara_cheat.cpp # TR5Main/Game/Lara/lara_collide.cpp # TR5Main/Game/Lara/lara_crawl.cpp # TR5Main/Game/Lara/lara_helpers.cpp # TR5Main/Game/Lara/lara_jump.cpp # TR5Main/Game/Lara/lara_monkey.cpp # TR5Main/Game/Lara/lara_swim.cpp # TR5Main/Game/Lara/lara_tests.cpp # TR5Main/Game/animation.cpp # TR5Main/Game/camera.cpp # TR5Main/Game/collision/collide_item.cpp # TR5Main/Game/collision/collide_room.cpp # TR5Main/Game/collision/floordata.cpp # TR5Main/Game/control/control.cpp # TR5Main/Game/control/los.cpp # TR5Main/Game/control/volume.cpp # TR5Main/Game/effects/hair.cpp # TR5Main/Game/gui.cpp # TR5Main/Game/health.cpp # TR5Main/Game/items.cpp # TR5Main/Game/room.cpp # TR5Main/Game/savegame.cpp # TR5Main/Renderer/ConstantBuffers/MiscBuffer.h # TR5Main/Renderer/RenderPipelineState/RenderPipelineState.cpp # TR5Main/Renderer/RenderPipelineState/RenderPipelineState.h # TR5Main/Renderer/Renderer11Draw.cpp # TR5Main/Renderer/Renderer11Frame.cpp # TR5Main/Renderer/Renderer11Helper.cpp # TR5Main/Renderer/Renderer11Lara.cpp # TR5Main/Renderer/Renderer11PostProcess.cpp # TR5Main/Renderer/Renderer11Settings.cpp # TR5Main/Renderer/Renderer11String.cpp # TR5Main/Renderer/RendererSprites.h # TR5Main/Scripting/GameLogicScript.cpp # TR5Main/Scripting/GameScriptAnimations.cpp # TR5Main/Scripting/GameScriptItemInfo.cpp # TR5Main/Scripting/GameScriptItemInfo.h # TR5Main/Scripting/GameScriptMeshInfo.cpp # TR5Main/Scripting/GameScriptPosition.cpp # TR5Main/Specific/input.cpp # TR5Main/Specific/level.cpp # TR5Main/Specific/savegame/flatbuffers/ten_savegame_generated.h # TR5Main/TombEngine.vcxproj.filters # common/game/collision/collide_item.h
2022-05-05 06:28:43 +02:00
}
else
2022-03-29 20:17:13 +11:00
{
rect.left = x * factorX;
rect.right += x * factorX;
2022-06-06 14:16:25 +03:00
rect.top = y * str.Scale;
rect.bottom += y * str.Scale;
}
str.X = rect.left;
str.Y = rect.top;
2022-03-29 20:17:13 +11:00
if (flags & PRINTSTRING_BLINK)
{
if (flags & PRINTSTRING_DONT_UPDATE_BLINK)
{
str.Color = Vector3(128);
}
else
2022-03-29 20:17:13 +11:00
{
str.Color = Vector3(m_blinkColorValue, m_blinkColorValue, m_blinkColorValue);
2022-03-29 20:17:13 +11:00
if (!m_blinkUpdated)
2022-03-29 20:17:13 +11:00
{
m_blinkColorValue += m_blinkColorDirection * 16;
m_blinkUpdated = true;
if (m_blinkColorValue < 0)
{
m_blinkColorValue = 0;
m_blinkColorDirection = 1;
}
if (m_blinkColorValue > 255)
{
m_blinkColorValue = 255;
m_blinkColorDirection = -1;
}
}
}
}
m_strings.push_back(str);
}
2022-01-29 05:55:09 +01:00
void Renderer11::DrawAllStrings()
Merge branch 'state_cleaning_tier_2' into luarefactor # Conflicts: # .gitignore # Common/Game/collision/collide_room.h # Common/Game/control/control.h # Common/Game/items.h # Common/Specific/phd_global.h # Common/Specific/trmath.h # Scripting/src/TEN/Flow/Animations/Animations.h # Scripting/src/TEN/Flow/FlowHandler.cpp # Scripts/Settings.lua # TR5Main/Game/Lara/lara.cpp # TR5Main/Game/Lara/lara_basic.cpp # TR5Main/Game/Lara/lara_cheat.cpp # TR5Main/Game/Lara/lara_collide.cpp # TR5Main/Game/Lara/lara_crawl.cpp # TR5Main/Game/Lara/lara_helpers.cpp # TR5Main/Game/Lara/lara_jump.cpp # TR5Main/Game/Lara/lara_monkey.cpp # TR5Main/Game/Lara/lara_swim.cpp # TR5Main/Game/Lara/lara_tests.cpp # TR5Main/Game/animation.cpp # TR5Main/Game/camera.cpp # TR5Main/Game/collision/collide_item.cpp # TR5Main/Game/collision/collide_room.cpp # TR5Main/Game/collision/floordata.cpp # TR5Main/Game/control/control.cpp # TR5Main/Game/control/los.cpp # TR5Main/Game/control/volume.cpp # TR5Main/Game/effects/hair.cpp # TR5Main/Game/gui.cpp # TR5Main/Game/health.cpp # TR5Main/Game/items.cpp # TR5Main/Game/room.cpp # TR5Main/Game/savegame.cpp # TR5Main/Renderer/ConstantBuffers/MiscBuffer.h # TR5Main/Renderer/RenderPipelineState/RenderPipelineState.cpp # TR5Main/Renderer/RenderPipelineState/RenderPipelineState.h # TR5Main/Renderer/Renderer11Draw.cpp # TR5Main/Renderer/Renderer11Frame.cpp # TR5Main/Renderer/Renderer11Helper.cpp # TR5Main/Renderer/Renderer11Lara.cpp # TR5Main/Renderer/Renderer11PostProcess.cpp # TR5Main/Renderer/Renderer11Settings.cpp # TR5Main/Renderer/Renderer11String.cpp # TR5Main/Renderer/RendererSprites.h # TR5Main/Scripting/GameLogicScript.cpp # TR5Main/Scripting/GameScriptAnimations.cpp # TR5Main/Scripting/GameScriptItemInfo.cpp # TR5Main/Scripting/GameScriptItemInfo.h # TR5Main/Scripting/GameScriptMeshInfo.cpp # TR5Main/Scripting/GameScriptPosition.cpp # TR5Main/Specific/input.cpp # TR5Main/Specific/level.cpp # TR5Main/Specific/savegame/flatbuffers/ten_savegame_generated.h # TR5Main/TombEngine.vcxproj.filters # common/game/collision/collide_item.h
2022-05-05 06:28:43 +02:00
{
m_spriteBatch->Begin();
2022-03-29 20:17:13 +11:00
for (int i = 0; i < m_strings.size(); i++)
{
RendererStringToDraw* str = &m_strings[i];
// Draw shadow if needed
if (str->Flags & PRINTSTRING_OUTLINE)
2022-06-06 14:16:25 +03:00
m_gameFont->DrawString(m_spriteBatch.get(), str->String.c_str(), Vector2(str->X + 2 * str->Scale, str->Y + 2 * str->Scale),
Vector4(0.0f, 0.0f, 0.0f, 1.0f) * ScreenFadeCurrent,
0.0f, Vector4::Zero, str->Scale);
// Draw string
2020-08-09 22:15:32 +02:00
m_gameFont->DrawString(m_spriteBatch.get(), str->String.c_str(), Vector2(str->X, str->Y),
2022-06-06 14:16:25 +03:00
Vector4(str->Color.x / 255.0f, str->Color.y / 255.0f, str->Color.z / 255.0f, 1.0f) * ScreenFadeCurrent,
0.0f, Vector4::Zero, str->Scale);
}
m_spriteBatch->End();
m_blinkUpdated = false;
m_strings.clear();
}
}