2020-05-27 09:21:20 +02:00
|
|
|
#include "framework.h"
|
2021-12-22 16:23:57 +03:00
|
|
|
#include "Renderer/Renderer11.h"
|
2022-03-29 20:17:13 +11:00
|
|
|
|
2022-07-04 17:46:30 +03:00
|
|
|
namespace TEN::Renderer
|
|
|
|
{
|
2022-07-24 16:28:52 +03:00
|
|
|
void Renderer11::AddString(int x, int y, const char* string, D3DCOLOR color, int flags)
|
2022-03-29 20:17:13 +11:00
|
|
|
{
|
2022-07-24 16:28:52 +03:00
|
|
|
if (m_Locked)
|
|
|
|
return;
|
|
|
|
|
OIS input system (#556)
* Work
* Add ois.lib
* Add OIS headers/libs to project
* Fix small mistakes
* Update input.cpp
* Update input.cpp
* Update input.cpp
* Remove unnecessary event handlers as we are using direct polling
* Fix numpad controls not polling
* Enclose all input code under namespace, provide debug OIS lib variation
* Fix incorrect inventory call binding, add pause to control dialog
* Deselect by pushing inventory button as well, fix crossbow ammo string draw
* Demagic NUM_CONTROLS
* Verbose input init logging
* Calibrate and properly register movement analog axis input
* Fix crash when empty string is being displayed
* Initialize vibration interface, if it exists
* Register keyboard directional input as analog axis input as well
* Fix statistics exiting
* Fix weird UpdateInput call
* Copy current layout to configuration
* Fix issues with saving controls
* Register axis values for POVs too
* Register several POV directions at once
* Increase deadzone a bit
* Simplify enums
* Update input.cpp
* Move includes out of input.h
* Bump deadzone even further as it seems xbox controllers have massive axis errors
* Prevent event spamming in case OIS polling failed
* Destroy input system on exit, cosmetic changes
* Take deadzone into account when normalizing axis values
* Update TombEngine.vcxproj
* Resolve small precision loss in axis normalizing
* Clean up unused control constants and enums
* Update input.h
* Demagic InputActions enum
* Render pause menu header
* Introduce helper functions to modulate Lara turn rates and begin replacements
* Make turn directions explicit
* Conduct remaining replacements of turn rate modulations
* Update lara_helpers.cpp
* Add smoothstep function to math library
* Use scaled axis value for true analog input
* Update input.cpp
* Add Joey's camera rotation from old branch
* Fix camera not going back to previous position when stick is released
* Simplify ModulateLaraTurnRate()
* Widen look angle
* Avoid collisions with actions bound to non-directional axis
* Small tidying
* Remove unused header
* Remove copypasted code
* Mask flare animation
* Rename 5th and 6th axis to LT/RT
* Prototype force feedback support
* Add directional rumble support (probably XInput-only)
* Shake controller on startup if supports vibration
* Update OIS libs to support XInput FF
* Simplify ModulateLaraTurnRate()
* Update player modulation functions; simplify turning, leaning, and flexing in state functions; lara.h cleanup
* Update Win32ForceFeedback.h
* Fix crawl flex function
* Revert "Update Win32ForceFeedback.h"
This reverts commit aa7099ed5bf2bc8402029aa2fcdece16ebabd5bf.
* Update OIS libs
* Add options for thumbstick camera and vibration
* Make use of autotarget option
* Display NON-SCREAMING names in controls, add hack to cancel axis value on both right+left input events
* Remove useless control hacks for simultaneous directional input
* Delete ten_itemdata_generated.h
* Add scroll lock to bindable controls
* Update input.cpp
* Update input.cpp
* Make input device namings consistent
* Bring back IN_SELECT override
* Fix crashing on startup and some other bugs
* Add rumble to some in-game events
* Add some more vibration events, stop them when going to menus
* Some changes to rumble power
* Add rumble for rocket/grenade launchers and explosive damage
* Add rumble for screen shake effect
* Fix 2 mistakes in inventory strings
* Rumble for camera more precisely
* Fix debounce in binocular mode
* Update camera.cpp
* Add HK lasersight rumble
* Simplify ModulateLaraLean()
* Update input.cpp
* Fix crawl flex modulation(?)
* Add slight rumble to harpoon and crossbow fire
* Remove the confusing counteracting turn rate reset in favour of something simpler
* Simplify turn rate reset input checks; leanup
* Clamp turn rate axis coeff when airborne
* Remove empty line
* Simplify a function
* Cleanup
* Fix rumble being constant
* Use shorter rumble time for shooting guns
* Fix single arm shooting
* Fix leaning left with joystick; clamp crawl flex max; tweak walk lean max; cleanup
* Don't do too long splat and jump smash vibrations
* Cancel turn rate when exiting water, grabbing ledge, or doing a splat
* Rename function
* Move ModulateLaraTurnRateY() callsin crawl and crouch turn states
* Reset turn rate when performing crawl vault
* Convert all health decrease events to DoDamage calls
* Remove SpasmEffectCount and unify touching with DoDamage
* Give specific time delay before sprint jump is possible
* Don't rumble on zero damage
* Reorder input pipeline to prevent left+right collisions
* Rename shady global
* Rumble when breaking neck in swandive
* Update lara_jump.cpp
* Don't vibrate on soft splat
* Fix combine item text alignment
* Vibrate in settings only if setting was changed
* Pulse gamepad on critical health condition
* Don't get out of water into objects
* Add critical air constant
Co-authored-by: Sezz
2022-06-25 16:53:58 +03:00
|
|
|
if (string == NULL)
|
|
|
|
return;
|
|
|
|
|
2022-07-04 17:46:30 +03:00
|
|
|
float factorX = m_screenWidth / REFERENCE_RES_WIDTH;
|
|
|
|
float factorY = m_screenHeight / REFERENCE_RES_HEIGHT;
|
|
|
|
float UIScale = m_screenWidth > m_screenHeight ? factorY : factorX;
|
2022-06-07 16:31:31 +03:00
|
|
|
float fontScale = REFERENCE_FONT_SIZE / m_gameFont->GetLineSpacing();
|
2020-06-21 14:27:12 +02:00
|
|
|
|
|
|
|
// 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-07 16:31:31 +03:00
|
|
|
str.Scale = UIScale * fontScale;
|
2020-06-21 14:27:12 +02:00
|
|
|
|
|
|
|
// Measure the string
|
|
|
|
Vector2 size = m_gameFont->MeasureString(wstr.c_str());
|
2022-06-07 16:31:31 +03:00
|
|
|
float width = size.x * str.Scale;
|
2020-06-21 14:27:12 +02:00
|
|
|
|
2022-06-07 16:31:31 +03:00
|
|
|
str.X = (flags & PRINTSTRING_CENTER) ? (float)x * factorX - (width / 2.0f) : (float)x * factorX;
|
|
|
|
str.Y = y * UIScale;
|
2020-06-21 14:27:12 +02:00
|
|
|
|
2022-03-29 20:17:13 +11:00
|
|
|
if (flags & PRINTSTRING_BLINK)
|
|
|
|
{
|
2022-06-07 16:31:31 +03:00
|
|
|
str.Color = Vector3(m_blinkColorValue, m_blinkColorValue, m_blinkColorValue);
|
|
|
|
|
|
|
|
if (!m_blinkUpdated)
|
2022-03-29 20:17:13 +11:00
|
|
|
{
|
2022-06-07 16:31:31 +03:00
|
|
|
m_blinkColorValue += m_blinkColorDirection * 16;
|
|
|
|
m_blinkUpdated = true;
|
|
|
|
|
|
|
|
if (m_blinkColorValue < 0)
|
|
|
|
{
|
|
|
|
m_blinkColorValue = 0;
|
|
|
|
m_blinkColorDirection = 1;
|
|
|
|
}
|
2022-03-29 20:17:13 +11:00
|
|
|
|
2022-06-07 16:31:31 +03:00
|
|
|
if (m_blinkColorValue > 255)
|
2022-03-29 20:17:13 +11:00
|
|
|
{
|
2022-06-07 16:31:31 +03:00
|
|
|
m_blinkColorValue = 255;
|
|
|
|
m_blinkColorDirection = -1;
|
2020-06-21 14:27:12 +02:00
|
|
|
}
|
2020-01-08 20:57:33 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-06-21 14:27:12 +02:00
|
|
|
m_strings.push_back(str);
|
|
|
|
}
|
2020-01-08 20:57:33 +01:00
|
|
|
|
2022-01-29 05:55:09 +01:00
|
|
|
void Renderer11::DrawAllStrings()
|
2022-05-05 06:28:43 +02:00
|
|
|
{
|
2022-06-07 16:31:31 +03:00
|
|
|
float shadeOffset = 1.5f / (REFERENCE_FONT_SIZE / m_gameFont->GetLineSpacing());
|
|
|
|
|
2020-06-21 14:27:12 +02:00
|
|
|
m_spriteBatch->Begin();
|
2020-01-08 20:57:33 +01:00
|
|
|
|
2022-03-29 20:17:13 +11:00
|
|
|
for (int i = 0; i < m_strings.size(); i++)
|
|
|
|
{
|
2020-06-21 14:27:12 +02:00
|
|
|
RendererStringToDraw* str = &m_strings[i];
|
2020-01-08 20:57:33 +01:00
|
|
|
|
2020-06-21 14:27:12 +02:00
|
|
|
// Draw shadow if needed
|
|
|
|
if (str->Flags & PRINTSTRING_OUTLINE)
|
2022-06-07 16:31:31 +03:00
|
|
|
m_gameFont->DrawString(m_spriteBatch.get(), str->String.c_str(), Vector2(str->X + shadeOffset * str->Scale, str->Y + shadeOffset * str->Scale),
|
2022-06-06 14:16:25 +03:00
|
|
|
Vector4(0.0f, 0.0f, 0.0f, 1.0f) * ScreenFadeCurrent,
|
|
|
|
0.0f, Vector4::Zero, str->Scale);
|
2020-01-08 20:57:33 +01:00
|
|
|
|
2020-06-21 14:27:12 +02:00
|
|
|
// 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);
|
2020-06-21 14:27:12 +02:00
|
|
|
}
|
2020-01-08 20:57:33 +01:00
|
|
|
|
2020-06-21 14:27:12 +02:00
|
|
|
m_spriteBatch->End();
|
2022-06-07 03:59:02 +03:00
|
|
|
|
|
|
|
m_blinkUpdated = false;
|
|
|
|
m_strings.clear();
|
2020-01-08 20:57:33 +01:00
|
|
|
}
|
|
|
|
}
|