mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-13 05:57:05 +03:00
Don't add same renderer objects on frameskip, fix room light collection
This commit is contained in:
parent
13dbbe2dc9
commit
ea69f610fa
11 changed files with 161 additions and 104 deletions
|
@ -97,7 +97,7 @@ short NextFxFree;
|
|||
int DrawPhase()
|
||||
{
|
||||
g_Renderer.Draw();
|
||||
Camera.numberFrames = g_Renderer.SyncRenderer();
|
||||
Camera.numberFrames = g_Renderer.Sync();
|
||||
return Camera.numberFrames;
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,9 @@ GameStatus ControlPhase(int numFrames, int demoMode)
|
|||
|
||||
g_GameStringsHandler->ProcessDisplayStrings(DELTA_TIME);
|
||||
|
||||
bool firstTime = true;
|
||||
static int framesCount = 0;
|
||||
|
||||
for (framesCount += numFrames; framesCount > 0; framesCount -= 2)
|
||||
{
|
||||
GlobalCounter++;
|
||||
|
@ -184,7 +186,7 @@ GameStatus ControlPhase(int numFrames, int demoMode)
|
|||
while (g_Gui.GetInventoryMode() == InventoryMode::Pause)
|
||||
{
|
||||
g_Gui.DrawInventory();
|
||||
g_Renderer.SyncRenderer();
|
||||
g_Renderer.Sync();
|
||||
|
||||
if (g_Gui.DoPauseMenu() == InventoryResult::ExitToTitle)
|
||||
return GameStatus::ExitToTitle;
|
||||
|
@ -350,6 +352,13 @@ GameStatus ControlPhase(int numFrames, int demoMode)
|
|||
// Update timers
|
||||
HealthBarTimer--;
|
||||
GameTimer++;
|
||||
|
||||
// Add renderer objects on the first processed frame
|
||||
if (firstTime)
|
||||
{
|
||||
g_Renderer.Lock();
|
||||
firstTime = false;
|
||||
}
|
||||
}
|
||||
|
||||
return GameStatus::None;
|
||||
|
@ -416,7 +425,7 @@ GameStatus DoTitle(int index, std::string const& ambient)
|
|||
g_GameScript->InitCallbacks();
|
||||
g_GameStringsHandler->SetCallbackDrawString([](std::string const key, D3DCOLOR col, int x, int y, int flags)
|
||||
{
|
||||
g_Renderer.DrawString(float(x)/float(g_Configuration.Width) * REFERENCE_RES_WIDTH, float(y)/float(g_Configuration.Height) * REFERENCE_RES_HEIGHT, key.c_str(), col, flags);
|
||||
g_Renderer.AddString(float(x)/float(g_Configuration.Width) * REFERENCE_RES_WIDTH, float(y)/float(g_Configuration.Height) * REFERENCE_RES_HEIGHT, key.c_str(), col, flags);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -467,7 +476,7 @@ GameStatus DoTitle(int index, std::string const& ambient)
|
|||
if (status != InventoryResult::None)
|
||||
break;
|
||||
|
||||
Camera.numberFrames = g_Renderer.SyncRenderer();
|
||||
Camera.numberFrames = g_Renderer.Sync();
|
||||
frames = Camera.numberFrames;
|
||||
ControlPhase(frames, 0);
|
||||
}
|
||||
|
@ -520,7 +529,7 @@ GameStatus DoLevel(int index, std::string const& ambient, bool loadFromSavegame)
|
|||
g_GameScript->InitCallbacks();
|
||||
g_GameStringsHandler->SetCallbackDrawString([](std::string const key, D3DCOLOR col, int x, int y, int flags)
|
||||
{
|
||||
g_Renderer.DrawString(float(x)/float(g_Configuration.Width) * REFERENCE_RES_WIDTH, float(y)/float(g_Configuration.Height) * REFERENCE_RES_HEIGHT, key.c_str(), col, flags);
|
||||
g_Renderer.AddString(float(x)/float(g_Configuration.Width) * REFERENCE_RES_WIDTH, float(y)/float(g_Configuration.Height) * REFERENCE_RES_HEIGHT, key.c_str(), col, flags);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -954,12 +954,12 @@ void GuiController::HandleControlSettingsInput(bool pause)
|
|||
if (pause)
|
||||
{
|
||||
g_Renderer.RenderInventory();
|
||||
Camera.numberFrames = g_Renderer.SyncRenderer();
|
||||
Camera.numberFrames = g_Renderer.Sync();
|
||||
}
|
||||
else
|
||||
{
|
||||
g_Renderer.RenderTitle();
|
||||
Camera.numberFrames = g_Renderer.SyncRenderer();
|
||||
Camera.numberFrames = g_Renderer.Sync();
|
||||
int nframes = Camera.numberFrames;
|
||||
ControlPhase(nframes, 0);
|
||||
}
|
||||
|
@ -2300,7 +2300,7 @@ void GuiController::DoInventory()
|
|||
|
||||
if (rings[(int)RingTypes::Ammo]->ringactive)
|
||||
{
|
||||
g_Renderer.DrawString(phd_centerx, phd_centery, g_GameFlow->GetString(optmessages[5]), PRINTSTRING_COLOR_WHITE, PRINTSTRING_BLINK | PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
g_Renderer.AddString(phd_centerx, phd_centery, g_GameFlow->GetString(optmessages[5]), PRINTSTRING_COLOR_WHITE, PRINTSTRING_BLINK | PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
|
||||
if (rings[(int)RingTypes::Inventory]->objlistmovement)
|
||||
return;
|
||||
|
@ -2492,12 +2492,12 @@ void GuiController::DoInventory()
|
|||
{
|
||||
if (i == current_selected_option)
|
||||
{
|
||||
g_Renderer.DrawString(phd_centerx, ypos, current_options[i].text, PRINTSTRING_COLOR_WHITE, PRINTSTRING_BLINK | PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
g_Renderer.AddString(phd_centerx, ypos, current_options[i].text, PRINTSTRING_COLOR_WHITE, PRINTSTRING_BLINK | PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
ypos += line_height;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_Renderer.DrawString(phd_centerx, ypos, current_options[i].text, PRINTSTRING_COLOR_WHITE, PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
g_Renderer.AddString(phd_centerx, ypos, current_options[i].text, PRINTSTRING_COLOR_WHITE, PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
ypos += line_height;
|
||||
}
|
||||
}
|
||||
|
@ -2762,7 +2762,7 @@ void GuiController::DrawAmmoSelector()
|
|||
sprintf(&invTextBuffer[0], "%d x %s", ammo_object_list[n].amount, g_GameFlow->GetString(inventry_objects_list[ammo_object_list[n].invitem].objname));
|
||||
|
||||
if (ammo_selector_fade_val)
|
||||
g_Renderer.DrawString(phd_centerx, 380, &invTextBuffer[0], PRINTSTRING_COLOR_YELLOW, PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
g_Renderer.AddString(phd_centerx, 380, &invTextBuffer[0], PRINTSTRING_COLOR_YELLOW, PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
|
||||
|
||||
if (n == *current_ammo_type)
|
||||
|
@ -3067,7 +3067,7 @@ void GuiController::DrawCurrentObjectList(int ringnum)
|
|||
else
|
||||
objmeup = (int)(phd_centery + (REFERENCE_RES_HEIGHT + 1) * 0.0625 * 2.0);
|
||||
|
||||
g_Renderer.DrawString(phd_centerx, objmeup, textbufme, PRINTSTRING_COLOR_YELLOW, PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
g_Renderer.AddString(phd_centerx, objmeup, textbufme, PRINTSTRING_COLOR_YELLOW, PRINTSTRING_CENTER | PRINTSTRING_OUTLINE);
|
||||
}
|
||||
|
||||
if (!i && !rings[ringnum]->objlistmovement)
|
||||
|
@ -3288,7 +3288,7 @@ bool GuiController::CallInventory(bool reset_mode)
|
|||
if (useItem && !TrInput)
|
||||
exitLoop = true;
|
||||
|
||||
Camera.numberFrames = g_Renderer.SyncRenderer();
|
||||
Camera.numberFrames = g_Renderer.Sync();
|
||||
}
|
||||
|
||||
lastInvItem = rings[(int)RingTypes::Inventory]->current_object_list[rings[(int)RingTypes::Inventory]->curobjinlist].invitem;
|
||||
|
|
|
@ -63,7 +63,12 @@ namespace TEN::Renderer
|
|||
gameCamera.clear();
|
||||
}
|
||||
|
||||
int Renderer11::SyncRenderer()
|
||||
void Renderer11::Lock()
|
||||
{
|
||||
m_Locked = true;
|
||||
}
|
||||
|
||||
int Renderer11::Sync()
|
||||
{
|
||||
// Sync the renderer
|
||||
int nf = Sync();
|
||||
|
|
|
@ -408,6 +408,9 @@ namespace TEN::Renderer
|
|||
int m_screenHeight;
|
||||
bool m_windowed;
|
||||
|
||||
// A flag to prevent extra renderer object addition
|
||||
bool m_Locked = false;
|
||||
|
||||
// Misc
|
||||
int m_pickupRotation = 0;
|
||||
|
||||
|
@ -598,6 +601,7 @@ namespace TEN::Renderer
|
|||
void Create();
|
||||
void Initialise(int w, int h, bool windowed, HWND handle);
|
||||
void Draw();
|
||||
void Lock();
|
||||
bool PrepareDataForTheRenderer();
|
||||
void UpdateCameraMatrices(CAMERA_INFO* cam, float roll, float fov, float farView);
|
||||
void RenderSimpleScene(ID3D11RenderTargetView* target, ID3D11DepthStencilView* depthTarget, RenderView& view);
|
||||
|
@ -609,8 +613,8 @@ namespace TEN::Renderer
|
|||
void DrawDebugInfo(RenderView& view);
|
||||
void SwitchDebugPage(bool back);
|
||||
void DrawPickup(short objectNum);
|
||||
int SyncRenderer();
|
||||
void DrawString(int x, int y, const char* string, D3DCOLOR color, int flags);
|
||||
int Sync();
|
||||
void AddString(int x, int y, const char* string, D3DCOLOR color, int flags);
|
||||
void FreeRendererData();
|
||||
void AddDynamicLight(int x, int y, int z, short falloff, byte r, byte g, byte b);
|
||||
void RenderLoadingScreen(float percentage);
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace TEN::Renderer
|
|||
_vsprintf_l(buffer, message, NULL, args);
|
||||
va_end(args);
|
||||
|
||||
DrawString(10, m_currentY, buffer, 0xFFFFFFFF, PRINTSTRING_OUTLINE);
|
||||
AddString(10, m_currentY, buffer, 0xFFFFFFFF, PRINTSTRING_OUTLINE);
|
||||
|
||||
m_currentY += 20;
|
||||
}
|
||||
|
|
|
@ -788,6 +788,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddLine3D(Vector3 start, Vector3 end, Vector4 color)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
RendererLine3D line;
|
||||
|
||||
line.Start = start;
|
||||
|
@ -799,6 +802,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddSphere(Vector3 center, float radius, Vector4 color)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
constexpr auto subdivisions = 10;
|
||||
constexpr auto steps = 6;
|
||||
constexpr auto step = PI / steps;
|
||||
|
@ -842,6 +848,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddBox(Vector3* corners, Vector4 color)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < 12; i++)
|
||||
{
|
||||
RendererLine3D line;
|
||||
|
@ -861,7 +870,6 @@ namespace TEN::Renderer
|
|||
line.End = corners[0];
|
||||
break;
|
||||
|
||||
|
||||
case 4: line.Start = corners[4];
|
||||
line.End = corners[5];
|
||||
break;
|
||||
|
@ -875,7 +883,6 @@ namespace TEN::Renderer
|
|||
line.End = corners[4];
|
||||
break;
|
||||
|
||||
|
||||
case 8: line.Start = corners[0];
|
||||
line.End = corners[4];
|
||||
break;
|
||||
|
@ -897,6 +904,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddBox(Vector3 min, Vector3 max, Vector4 color)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < 12; i++)
|
||||
{
|
||||
RendererLine3D line;
|
||||
|
@ -971,6 +981,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddDynamicLight(int x, int y, int z, short falloff, byte r, byte g, byte b)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
RendererLight dynamicLight = {};
|
||||
|
||||
if (falloff >= 8)
|
||||
|
@ -1429,6 +1442,7 @@ namespace TEN::Renderer
|
|||
void Renderer11::RenderScene(ID3D11RenderTargetView* target, ID3D11DepthStencilView* depthTarget, RenderView& view)
|
||||
{
|
||||
ResetDebugVariables();
|
||||
m_Locked = false;
|
||||
|
||||
using ns = std::chrono::nanoseconds;
|
||||
using get_time = std::chrono::steady_clock;
|
||||
|
@ -1567,7 +1581,6 @@ namespace TEN::Renderer
|
|||
|
||||
DrawDebugInfo(view);
|
||||
DrawAllStrings();
|
||||
|
||||
DrawFadeAndBars(target, depthTarget, view);
|
||||
|
||||
ClearScene();
|
||||
|
|
|
@ -109,15 +109,15 @@ namespace TEN::Renderer
|
|||
y = initialY;
|
||||
|
||||
// Display
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_DISPLAY), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 0));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_DISPLAY), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 0));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Other options
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_OTHER_SETTINGS), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 1));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_OTHER_SETTINGS), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 1));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Controls
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CONTROLS), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 2));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CONTROLS), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 2));
|
||||
break;
|
||||
|
||||
case Menu::Display:
|
||||
|
@ -126,40 +126,40 @@ namespace TEN::Renderer
|
|||
y = MenuVerticalDisplaySettings;
|
||||
|
||||
// Title
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_DISPLAY), PRINTSTRING_COLOR_YELLOW, SF_Center());
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_DISPLAY), PRINTSTRING_COLOR_YELLOW, SF_Center());
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
// Screen resolution
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SCREEN_RESOLUTION), PRINTSTRING_COLOR_ORANGE, SF(title_option == 0));
|
||||
DrawString(MenuRightSideEntry, y, stringBuffer, PRINTSTRING_COLOR_WHITE, SF(title_option == 0));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SCREEN_RESOLUTION), PRINTSTRING_COLOR_ORANGE, SF(title_option == 0));
|
||||
AddString(MenuRightSideEntry, y, stringBuffer, PRINTSTRING_COLOR_WHITE, SF(title_option == 0));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Windowed mode
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_WINDOWED), PRINTSTRING_COLOR_ORANGE, SF(title_option == 1));
|
||||
DrawString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.Windowed), PRINTSTRING_COLOR_WHITE, SF(title_option == 1));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_WINDOWED), PRINTSTRING_COLOR_ORANGE, SF(title_option == 1));
|
||||
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.Windowed), PRINTSTRING_COLOR_WHITE, SF(title_option == 1));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Enable dynamic shadows
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SHADOWS), PRINTSTRING_COLOR_ORANGE, SF(title_option == 2));
|
||||
DrawString(MenuRightSideEntry, y, g_GameFlow->GetString(shadowMode), PRINTSTRING_COLOR_WHITE, SF(title_option == 2));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SHADOWS), PRINTSTRING_COLOR_ORANGE, SF(title_option == 2));
|
||||
AddString(MenuRightSideEntry, y, g_GameFlow->GetString(shadowMode), PRINTSTRING_COLOR_WHITE, SF(title_option == 2));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Enable caustics
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_CAUSTICS), PRINTSTRING_COLOR_ORANGE, SF(title_option == 3));
|
||||
DrawString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableCaustics), PRINTSTRING_COLOR_WHITE, SF(title_option == 3));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_CAUSTICS), PRINTSTRING_COLOR_ORANGE, SF(title_option == 3));
|
||||
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableCaustics), PRINTSTRING_COLOR_WHITE, SF(title_option == 3));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Enable volumetric fog
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_VOLUMETRIC_FOG), PRINTSTRING_COLOR_ORANGE, SF(title_option == 4));
|
||||
DrawString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableVolumetricFog), PRINTSTRING_COLOR_WHITE, SF(title_option == 4));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_VOLUMETRIC_FOG), PRINTSTRING_COLOR_ORANGE, SF(title_option == 4));
|
||||
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableVolumetricFog), PRINTSTRING_COLOR_WHITE, SF(title_option == 4));
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
// Apply
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_APPLY), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 5));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_APPLY), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 5));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Cancel
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CANCEL), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 6));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CANCEL), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 6));
|
||||
break;
|
||||
|
||||
case Menu::OtherSettings:
|
||||
|
@ -168,12 +168,12 @@ namespace TEN::Renderer
|
|||
y = MenuVerticalOtherSettings;
|
||||
|
||||
// Title
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_OTHER_SETTINGS), PRINTSTRING_COLOR_YELLOW, SF_Center());
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_OTHER_SETTINGS), PRINTSTRING_COLOR_YELLOW, SF_Center());
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
// Enable sound special effects
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_REVERB), PRINTSTRING_COLOR_ORANGE, SF(title_option == 0));
|
||||
DrawString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableReverb), PRINTSTRING_COLOR_WHITE, SF(title_option == 0));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_REVERB), PRINTSTRING_COLOR_ORANGE, SF(title_option == 0));
|
||||
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableReverb), PRINTSTRING_COLOR_WHITE, SF(title_option == 0));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Initialise bars, if not yet done. Must be done here because we're calculating Y coord on the fly.
|
||||
|
@ -181,38 +181,38 @@ namespace TEN::Renderer
|
|||
InitialiseMenuBars(y);
|
||||
|
||||
// Music volume
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_MUSIC_VOLUME), PRINTSTRING_COLOR_ORANGE, SF(title_option == 1));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_MUSIC_VOLUME), PRINTSTRING_COLOR_ORANGE, SF(title_option == 1));
|
||||
DrawBar(g_Gui.GetCurrentSettings().conf.MusicVolume / 100.0f, g_MusicVolumeBar, ID_SFX_BAR_TEXTURE, 0, false);
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Sound FX volume
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SFX_VOLUME), PRINTSTRING_COLOR_ORANGE, SF(title_option == 2));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SFX_VOLUME), PRINTSTRING_COLOR_ORANGE, SF(title_option == 2));
|
||||
DrawBar(g_Gui.GetCurrentSettings().conf.SfxVolume / 100.0f, g_SFXVolumeBar, ID_SFX_BAR_TEXTURE, 0, false);
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
|
||||
// Auto targeting
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_AUTOTARGET), PRINTSTRING_COLOR_ORANGE, SF(title_option == 3));
|
||||
DrawString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.AutoTarget), PRINTSTRING_COLOR_WHITE, SF(title_option == 3));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_AUTOTARGET), PRINTSTRING_COLOR_ORANGE, SF(title_option == 3));
|
||||
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.AutoTarget), PRINTSTRING_COLOR_WHITE, SF(title_option == 3));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Vibration
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_RUMBLE), PRINTSTRING_COLOR_ORANGE, SF(title_option == 4));
|
||||
DrawString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableRumble), PRINTSTRING_COLOR_WHITE, SF(title_option == 4));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_RUMBLE), PRINTSTRING_COLOR_ORANGE, SF(title_option == 4));
|
||||
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableRumble), PRINTSTRING_COLOR_WHITE, SF(title_option == 4));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Thumbstick camera
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_THUMBSTICK_CAMERA), PRINTSTRING_COLOR_ORANGE, SF(title_option == 5));
|
||||
DrawString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableThumbstickCameraControl), PRINTSTRING_COLOR_WHITE, SF(title_option == 5));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_THUMBSTICK_CAMERA), PRINTSTRING_COLOR_ORANGE, SF(title_option == 5));
|
||||
AddString(MenuRightSideEntry, y, Str_Enabled(g_Gui.GetCurrentSettings().conf.EnableThumbstickCameraControl), PRINTSTRING_COLOR_WHITE, SF(title_option == 5));
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
|
||||
// Apply
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_APPLY), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 6));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_APPLY), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 6));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Cancel
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CANCEL), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 7));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CANCEL), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 7));
|
||||
break;
|
||||
|
||||
case Menu::Controls:
|
||||
|
@ -221,20 +221,20 @@ namespace TEN::Renderer
|
|||
y = MenuVerticalTop;
|
||||
|
||||
// Title
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CONTROLS), PRINTSTRING_COLOR_YELLOW, SF_Center());
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CONTROLS), PRINTSTRING_COLOR_YELLOW, SF_Center());
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
// Control listing
|
||||
for (int k = 0; k < KEY_COUNT; k++)
|
||||
{
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(controlmsgs[k]), PRINTSTRING_COLOR_WHITE, SF(title_option == k));
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(controlmsgs[k]), PRINTSTRING_COLOR_WHITE, SF(title_option == k));
|
||||
|
||||
if (g_Gui.GetCurrentSettings().waitingForkey && title_option == k)
|
||||
DrawString(MenuRightSideEntry, y, g_GameFlow->GetString(STRING_WAITING_FOR_KEY), PRINTSTRING_COLOR_YELLOW, SF(true));
|
||||
AddString(MenuRightSideEntry, y, g_GameFlow->GetString(STRING_WAITING_FOR_KEY), PRINTSTRING_COLOR_YELLOW, SF(true));
|
||||
else
|
||||
{
|
||||
int index = KeyboardLayout[1][k] ? KeyboardLayout[1][k] : KeyboardLayout[0][k];
|
||||
DrawString(MenuRightSideEntry, y, (char*)g_KeyNames[index], PRINTSTRING_COLOR_ORANGE, SF(false));
|
||||
AddString(MenuRightSideEntry, y, (char*)g_KeyNames[index], PRINTSTRING_COLOR_ORANGE, SF(false));
|
||||
}
|
||||
|
||||
if (k < KEY_COUNT - 1)
|
||||
|
@ -244,11 +244,11 @@ namespace TEN::Renderer
|
|||
}
|
||||
|
||||
// Apply
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_APPLY), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 17));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_APPLY), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 17));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Cancel
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CANCEL), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 18));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CANCEL), PRINTSTRING_COLOR_ORANGE, SF_Center(title_option == 18));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -267,19 +267,19 @@ namespace TEN::Renderer
|
|||
case Menu::Title:
|
||||
|
||||
// New game
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_NEW_GAME), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 0));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_NEW_GAME), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 0));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Load game
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_LOAD_GAME), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 1));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_LOAD_GAME), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 1));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Options
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_OPTIONS), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 2));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_OPTIONS), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 2));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Exit game
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_EXIT_GAME), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 3));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_EXIT_GAME), PRINTSTRING_COLOR_WHITE, SF_Center(title_option == 3));
|
||||
break;
|
||||
|
||||
case Menu::LoadGame:
|
||||
|
@ -292,13 +292,13 @@ namespace TEN::Renderer
|
|||
y = MenuVerticalLineSpacing;
|
||||
|
||||
// Title
|
||||
DrawString(MenuCenterEntry, 26, g_GameFlow->GetString(STRING_SELECT_LEVEL), PRINTSTRING_COLOR_ORANGE, SF_Center());
|
||||
AddString(MenuCenterEntry, 26, g_GameFlow->GetString(STRING_SELECT_LEVEL), PRINTSTRING_COLOR_ORANGE, SF_Center());
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
// Level listing (starts with 1 because 0 is always title)
|
||||
for (int i = 1; i < g_GameFlow->GetNumLevels(); i++)
|
||||
{
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(g_GameFlow->GetLevel(i)->NameStringKey.c_str()),
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(g_GameFlow->GetLevel(i)->NameStringKey.c_str()),
|
||||
PRINTSTRING_COLOR_WHITE, SF_Center(title_option == i - 1));
|
||||
GetNextNarrowLinePosition(&y);
|
||||
}
|
||||
|
@ -326,19 +326,19 @@ namespace TEN::Renderer
|
|||
y = MenuVerticalPause;
|
||||
|
||||
// Header
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CONTROLS_PAUSE), PRINTSTRING_COLOR_ORANGE, SF_Center());
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_CONTROLS_PAUSE), PRINTSTRING_COLOR_ORANGE, SF_Center());
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
// Statistics
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_STATISTICS), PRINTSTRING_COLOR_WHITE, SF_Center(pause_option == 0));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_STATISTICS), PRINTSTRING_COLOR_WHITE, SF_Center(pause_option == 0));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Options
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_OPTIONS), PRINTSTRING_COLOR_WHITE, SF_Center(pause_option == 1));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_OPTIONS), PRINTSTRING_COLOR_WHITE, SF_Center(pause_option == 1));
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Exit to title
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_EXIT_TO_TITLE), PRINTSTRING_COLOR_WHITE, SF_Center(pause_option == 2));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_EXIT_TO_TITLE), PRINTSTRING_COLOR_WHITE, SF_Center(pause_option == 2));
|
||||
break;
|
||||
|
||||
case Menu::Statistics:
|
||||
|
@ -372,7 +372,7 @@ namespace TEN::Renderer
|
|||
LoadSavegameInfos();
|
||||
|
||||
// Title
|
||||
DrawString(MenuCenterEntry, MenuVerticalNarrowLineSpacing, Str_LoadSave(g_Gui.GetInventoryMode() == InventoryMode::Save),
|
||||
AddString(MenuCenterEntry, MenuVerticalNarrowLineSpacing, Str_LoadSave(g_Gui.GetInventoryMode() == InventoryMode::Save),
|
||||
PRINTSTRING_COLOR_ORANGE, SF_Center());
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
|
@ -383,20 +383,20 @@ namespace TEN::Renderer
|
|||
|
||||
if (!save.Present)
|
||||
{
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_UNUSED), PRINTSTRING_COLOR_WHITE, SF_Center(selection == n));
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_UNUSED), PRINTSTRING_COLOR_WHITE, SF_Center(selection == n));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Number
|
||||
sprintf(stringBuffer, "%03d", save.Count);
|
||||
DrawString(MenuLoadNumberLeftSide, y, stringBuffer, PRINTSTRING_COLOR_WHITE, SF(selection == n));
|
||||
AddString(MenuLoadNumberLeftSide, y, stringBuffer, PRINTSTRING_COLOR_WHITE, SF(selection == n));
|
||||
|
||||
// Level name
|
||||
DrawString(MenuLoadNameLeftSide, y, (char*)save.LevelName.c_str(), PRINTSTRING_COLOR_WHITE, SF(selection == n));
|
||||
AddString(MenuLoadNameLeftSide, y, (char*)save.LevelName.c_str(), PRINTSTRING_COLOR_WHITE, SF(selection == n));
|
||||
|
||||
// Timestamp
|
||||
sprintf(stringBuffer, g_GameFlow->GetString(STRING_SAVEGAME_TIMESTAMP), save.Days, save.Hours, save.Minutes, save.Seconds);
|
||||
DrawString(MenuRightSideEntry, y, stringBuffer, PRINTSTRING_COLOR_WHITE, SF(selection == n));
|
||||
AddString(MenuRightSideEntry, y, stringBuffer, PRINTSTRING_COLOR_WHITE, SF(selection == n));
|
||||
}
|
||||
|
||||
GetNextLinePosition(&y);
|
||||
|
@ -419,41 +419,41 @@ namespace TEN::Renderer
|
|||
auto y = MenuVerticalStatisticsTitle;
|
||||
|
||||
// Title
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_STATISTICS), PRINTSTRING_COLOR_ORANGE, SF_Center());
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(STRING_STATISTICS), PRINTSTRING_COLOR_ORANGE, SF_Center());
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
// Level name
|
||||
DrawString(MenuCenterEntry, y, g_GameFlow->GetString(lvl->NameStringKey.c_str()), PRINTSTRING_COLOR_WHITE, SF_Center());
|
||||
AddString(MenuCenterEntry, y, g_GameFlow->GetString(lvl->NameStringKey.c_str()), PRINTSTRING_COLOR_WHITE, SF_Center());
|
||||
GetNextBlockPosition(&y);
|
||||
|
||||
// Time taken
|
||||
sprintf(buffer, "%02d:%02d:%02d", (days * 24) + hours, min, sec);
|
||||
DrawString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_TIME_TAKEN), PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_TIME_TAKEN), PRINTSTRING_COLOR_WHITE, SF());
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Distance travelled
|
||||
sprintf(buffer, "%dm", Statistics.Game.Distance / UnitsToMeters);
|
||||
DrawString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_DISTANCE_TRAVELLED), PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_DISTANCE_TRAVELLED), PRINTSTRING_COLOR_WHITE, SF());
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Ammo used
|
||||
sprintf(buffer, "%d", Statistics.Game.AmmoUsed);
|
||||
DrawString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_USED_AMMOS), PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_USED_AMMOS), PRINTSTRING_COLOR_WHITE, SF());
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Medipacks used
|
||||
sprintf(buffer, "%d", Statistics.Game.HealthUsed);
|
||||
DrawString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_USED_MEDIPACKS), PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_USED_MEDIPACKS), PRINTSTRING_COLOR_WHITE, SF());
|
||||
GetNextLinePosition(&y);
|
||||
|
||||
// Secrets found
|
||||
sprintf(buffer, "%d / 36", Statistics.Game.Secrets);
|
||||
DrawString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
DrawString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SECRETS_FOUND), PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuRightSideEntry, y, buffer, PRINTSTRING_COLOR_WHITE, SF());
|
||||
AddString(MenuLeftSideEntry, y, g_GameFlow->GetString(STRING_SECRETS_FOUND), PRINTSTRING_COLOR_WHITE, SF());
|
||||
|
||||
DrawAllStrings();
|
||||
}
|
||||
|
@ -620,7 +620,7 @@ namespace TEN::Renderer
|
|||
while (currentFade <= 1.0f)
|
||||
{
|
||||
DrawFullScreenImage(texture.ShaderResourceView.Get(), currentFade, m_backBufferRTV, m_depthStencilView);
|
||||
SyncRenderer();
|
||||
Sync();
|
||||
currentFade += FADE_FACTOR;
|
||||
m_swapChain->Present(0, 0);
|
||||
}
|
||||
|
@ -628,7 +628,7 @@ namespace TEN::Renderer
|
|||
for (int i = 0; i < 20; i++)
|
||||
{
|
||||
DrawFullScreenImage(texture.ShaderResourceView.Get(), 1.0f, m_backBufferRTV, m_depthStencilView);
|
||||
SyncRenderer();
|
||||
Sync();
|
||||
m_swapChain->Present(0, 0);
|
||||
}
|
||||
|
||||
|
@ -636,7 +636,7 @@ namespace TEN::Renderer
|
|||
while (currentFade >= 0.0f)
|
||||
{
|
||||
DrawFullScreenImage(texture.ShaderResourceView.Get(), currentFade, m_backBufferRTV, m_depthStencilView);
|
||||
SyncRenderer();
|
||||
Sync();
|
||||
currentFade -= FADE_FACTOR;
|
||||
m_swapChain->Present(0, 0);
|
||||
}
|
||||
|
@ -694,7 +694,7 @@ namespace TEN::Renderer
|
|||
Strings[i].y && !Lara.Inventory.Diary.Pages[Lara.Inventory.Diary.currentPage].Strings[i].stringID)
|
||||
break;
|
||||
|
||||
//DrawString(Lara.Diary.Pages[currentPage].Strings[i].x, Lara.Diary.Pages[currentPage].Strings[i].y, g_GameFlow->GetString(Lara.Diary.Pages[currentPage].Strings[i].stringID), PRINTSTRING_COLOR_WHITE, 0);
|
||||
//AddString(Lara.Diary.Pages[currentPage].Strings[i].x, Lara.Diary.Pages[currentPage].Strings[i].y, g_GameFlow->GetString(Lara.Diary.Pages[currentPage].Strings[i].stringID), PRINTSTRING_COLOR_WHITE, 0);
|
||||
}
|
||||
|
||||
DrawAllStrings();
|
||||
|
@ -828,7 +828,7 @@ namespace TEN::Renderer
|
|||
m_swapChain->Present(0, 0);
|
||||
m_context->ClearState();
|
||||
|
||||
SyncRenderer();
|
||||
Sync();
|
||||
UpdateFadeScreenAndCinematicBars();
|
||||
|
||||
} while (ScreenFading || !ScreenFadedOut);
|
||||
|
@ -852,7 +852,7 @@ namespace TEN::Renderer
|
|||
|
||||
RenderInventoryScene(m_backBufferRTV, m_depthStencilView, nullptr);
|
||||
#if _DEBUG
|
||||
DrawString(0, 0, commit.c_str(), D3DCOLOR_ARGB(255, 255, 255, 255), 0);
|
||||
AddString(0, 0, commit.c_str(), D3DCOLOR_ARGB(255, 255, 255, 255), 0);
|
||||
DrawAllStrings();
|
||||
#else
|
||||
DrawAllStrings();
|
||||
|
|
|
@ -251,18 +251,22 @@ namespace TEN::Renderer
|
|||
if (nativeRoom->flags & ENV_FLAG_OUTSIDE)
|
||||
m_outside = true;
|
||||
|
||||
m_rooms[roomNumber].Distance = distance;
|
||||
m_rooms[roomNumber].Visited = true;
|
||||
if (!m_rooms[roomNumber].Visited)
|
||||
{
|
||||
CollectLightsForRoom(roomNumber, renderView);
|
||||
|
||||
if (!onlyRooms)
|
||||
{
|
||||
CollectLightsForRoom(roomNumber, renderView);
|
||||
CollectItems(roomNumber, renderView);
|
||||
CollectStatics(roomNumber, renderView);
|
||||
CollectEffects(roomNumber);
|
||||
}
|
||||
}
|
||||
|
||||
m_rooms[roomNumber].Distance = distance;
|
||||
m_rooms[roomNumber].Visited = true;
|
||||
}
|
||||
|
||||
if (nativeRoom->flags & ENV_FLAG_OUTSIDE)
|
||||
{
|
||||
if (room->Clip.left < m_outsideClip.left)
|
||||
|
@ -673,19 +677,18 @@ namespace TEN::Renderer
|
|||
RendererRoom& room = m_rooms[roomNumber];
|
||||
ROOM_INFO* r = &g_Level.Rooms[roomNumber];
|
||||
|
||||
int numLights = room.Lights.size();
|
||||
Vector3 boxMin = Vector3(r->x + WALL_SIZE, r->maxceiling - STEP_SIZE, r->z + WALL_SIZE);
|
||||
Vector3 boxMax = Vector3(r->x + (r->xSize - 1) * WALL_SIZE, r->minfloor + STEP_SIZE, r->z + (r->zSize - 1) * WALL_SIZE);
|
||||
|
||||
// Collect dynamic lights for rooms
|
||||
for (int i = 0; i < dynamicLights.size(); i++)
|
||||
{
|
||||
RendererLight* light = &dynamicLights[i];
|
||||
|
||||
Vector3 boxMin = Vector3(r->x - 2 * WALL_SIZE, -(r->minfloor + STEP_SIZE), r->z - 2 * WALL_SIZE);
|
||||
Vector3 boxMax = Vector3(r->x + (r->xSize + 1) * WALL_SIZE, -(r->maxceiling - STEP_SIZE), r->z + (r->zSize + 1) * WALL_SIZE);
|
||||
Vector3 center = Vector3(light->Position.x, -light->Position.y, light->Position.z);
|
||||
Vector3 center = Vector3(light->Position.x, light->Position.y, light->Position.z);
|
||||
|
||||
if (renderView.lightsToDraw.size() < NUM_LIGHTS_PER_BUFFER - 1 &&
|
||||
SphereBoxIntersection(boxMin, boxMax, center, light->Out))
|
||||
SphereBoxIntersection(boxMin, boxMax, center, 0.0f))
|
||||
renderView.lightsToDraw.push_back(light);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -373,9 +373,17 @@ namespace TEN::Renderer
|
|||
Vector3 centre = (boxMin + boxMax) / 2.0f;
|
||||
Vector3 extens = boxMax - centre;
|
||||
BoundingBox box = BoundingBox(centre, extens);
|
||||
|
||||
if (sphereRadius == 0.0f)
|
||||
{
|
||||
return box.Contains(sphereCentre);
|
||||
}
|
||||
else
|
||||
{
|
||||
BoundingSphere sphere = BoundingSphere(sphereCentre, sphereRadius);
|
||||
return box.Intersects(sphere);
|
||||
}
|
||||
}
|
||||
|
||||
void Renderer11::GetLaraBonePosition(Vector3 *pos, int bone) {}
|
||||
|
||||
|
|
|
@ -3,8 +3,11 @@
|
|||
|
||||
namespace TEN::Renderer
|
||||
{
|
||||
void Renderer11::DrawString(int x, int y, const char* string, D3DCOLOR color, int flags)
|
||||
void Renderer11::AddString(int x, int y, const char* string, D3DCOLOR color, int flags)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
if (string == NULL)
|
||||
return;
|
||||
|
||||
|
|
|
@ -22,6 +22,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddSpriteBillboard(RendererSprite* sprite, Vector3 pos, Vector4 color, float rotation, float scale, Vector2 size, BLEND_MODES blendMode, RenderView& view)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
if (scale <= 0.0f)
|
||||
scale = 1.0f;
|
||||
|
||||
|
@ -45,6 +48,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddSpriteBillboardConstrained(RendererSprite* sprite, Vector3 pos, Vector4 color, float rotation, float scale, Vector2 size, BLEND_MODES blendMode, Vector3 constrainAxis, RenderView& view)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
if (scale <= 0.0f)
|
||||
scale = 1.0f;
|
||||
|
||||
|
@ -69,6 +75,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddSpriteBillboardConstrainedLookAt(RendererSprite* sprite, Vector3 pos, Vector4 color, float rotation, float scale, Vector2 size, BLEND_MODES blendMode, Vector3 lookAtAxis, RenderView& view)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
if (scale <= 0.0f)
|
||||
scale = 1.0f;
|
||||
|
||||
|
@ -92,6 +101,9 @@ namespace TEN::Renderer
|
|||
|
||||
void Renderer11::AddSprite3D(RendererSprite* sprite, Vector3 vtx1, Vector3 vtx2, Vector3 vtx3, Vector3 vtx4, Vector4 color, float rotation, float scale, Vector2 size, BLEND_MODES blendMode, RenderView& view)
|
||||
{
|
||||
if (m_Locked)
|
||||
return;
|
||||
|
||||
if (scale <= 0.0f)
|
||||
scale = 1.0f;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue