Added debug overlay for ball sprite size cutoff points.

This commit is contained in:
Muzychenko Andrey 2022-10-11 12:45:03 +03:00
parent 4ec30cf472
commit cfaab257ed
6 changed files with 35 additions and 0 deletions

View File

@ -1,6 +1,7 @@
#include "pch.h" #include "pch.h"
#include "DebugOverlay.h" #include "DebugOverlay.h"
#include "loader.h"
#include "maths.h" #include "maths.h"
#include "proj.h" #include "proj.h"
#include "winmain.h" #include "winmain.h"
@ -118,6 +119,10 @@ void DebugOverlay::DrawOverlay()
if (options::Options.DebugOverlaySounds) if (options::Options.DebugOverlaySounds)
DrawSoundPositions(); DrawSoundPositions();
// Draw ball depth cutoff steps that determine sprite size.
if (options::Options.DebugOverlayBallDepthGrid)
DrawBallDepthSteps();
// Restore render target // Restore render target
SDL_SetRenderTarget(winmain::Renderer, initialRenderTarget); SDL_SetRenderTarget(winmain::Renderer, initialRenderTarget);
SDL_SetRenderDrawColor(winmain::Renderer, SDL_SetRenderDrawColor(winmain::Renderer,
@ -243,6 +248,29 @@ void DebugOverlay::DrawSoundPositions()
} }
} }
void DebugOverlay::DrawBallDepthSteps()
{
auto& edgeMan = *TTableLayer::edge_manager;
SDL_SetRenderDrawColor(winmain::Renderer, 200, 100, 0, 255);
for (auto ball : pb::MainTable->BallList)
{
auto visualCount = loader::query_visual_states(ball->GroupIndex);
for (auto index = 0; index < visualCount; ++index)
{
auto depthPt = reinterpret_cast<vector3*>(loader::query_float_attribute(ball->GroupIndex, index, 501));
auto pt = proj::xform_to_2d(*depthPt);
// Snap X coordinate to edge box sides
auto x1 = proj::xform_to_2d(vector2{edgeMan.MinX, depthPt->Y}).X;
auto x2 = proj::xform_to_2d(vector2{edgeMan.MaxBoxX * edgeMan.AdvanceX + edgeMan.MinX, depthPt->Y}).X;
auto ff = proj::xform_to_2d(vector2{ edgeMan.MaxBoxX * edgeMan.AdvanceX + edgeMan.MinX, depthPt->Y });
SDL_RenderDrawLine(winmain::Renderer, x1, pt.Y, x2, pt.Y);
}
break;
}
}
void DebugOverlay::DrawCicleType(circle_type& circle) void DebugOverlay::DrawCicleType(circle_type& circle)
{ {
vector2 linePt{ circle.Center.X + sqrt(circle.RadiusSq), circle.Center.Y }; vector2 linePt{ circle.Center.X + sqrt(circle.RadiusSq), circle.Center.Y };

View File

@ -21,4 +21,5 @@ private:
static void DrawBallInfo(); static void DrawBallInfo();
static void DrawAllSprites(); static void DrawAllSprites();
static void DrawSoundPositions(); static void DrawSoundPositions();
static void DrawBallDepthSteps();
}; };

View File

@ -54,6 +54,7 @@ TBall::TBall(TPinballTable* table) : TPinballComponent(table, -1, false)
RenderSprite = new render_sprite(VisualTypes::Ball, nullptr, nullptr, 0, 0, nullptr); RenderSprite = new render_sprite(VisualTypes::Ball, nullptr, nullptr, 0, 0, nullptr);
PinballTable->CollisionCompOffset = Offset; PinballTable->CollisionCompOffset = Offset;
Position.Z = Offset; Position.Z = Offset;
GroupIndex = groupIndex;
} }
void TBall::Repaint() void TBall::Repaint()

View File

@ -117,6 +117,7 @@ void options::InitPrimary()
Options.DebugOverlaySounds = get_int("Debug Overlay Sounds", true); Options.DebugOverlaySounds = get_int("Debug Overlay Sounds", true);
translations::SetCurrentLanguage(get_string("Language", translations::GetCurrentLanguage()->ShortName).c_str()); translations::SetCurrentLanguage(get_string("Language", translations::GetCurrentLanguage()->ShortName).c_str());
Options.FontFileName = get_string("FontFileName", ""); Options.FontFileName = get_string("FontFileName", "");
Options.DebugOverlayBallDepthGrid = get_int("Debug Overlay Ball Depth Grid", true);
} }
void options::InitSecondary() void options::InitSecondary()
@ -167,6 +168,7 @@ void options::uninit()
set_int("Debug Overlay Sounds", Options.DebugOverlaySounds); set_int("Debug Overlay Sounds", Options.DebugOverlaySounds);
set_string("Language", translations::GetCurrentLanguage()->ShortName); set_string("Language", translations::GetCurrentLanguage()->ShortName);
set_string("FontFileName", Options.FontFileName.c_str()); set_string("FontFileName", Options.FontFileName.c_str());
set_int("Debug Overlay Ball Depth Grid", Options.DebugOverlayBallDepthGrid);
} }

View File

@ -92,6 +92,7 @@ struct optionsStruct
bool DebugOverlayCollisionMask; bool DebugOverlayCollisionMask;
bool DebugOverlaySprites; bool DebugOverlaySprites;
bool DebugOverlaySounds; bool DebugOverlaySounds;
bool DebugOverlayBallDepthGrid;
std::string FontFileName; std::string FontFileName;
}; };

View File

@ -657,6 +657,8 @@ void winmain::RenderUi()
{ {
if (ImGui::MenuItem("Box Grid", nullptr, Options.DebugOverlayGrid)) if (ImGui::MenuItem("Box Grid", nullptr, Options.DebugOverlayGrid))
Options.DebugOverlayGrid ^= true; Options.DebugOverlayGrid ^= true;
if (ImGui::MenuItem("Ball Depth Grid", nullptr, Options.DebugOverlayBallDepthGrid))
Options.DebugOverlayBallDepthGrid ^= true;
if (ImGui::MenuItem("Sprite Positions", nullptr, Options.DebugOverlaySprites)) if (ImGui::MenuItem("Sprite Positions", nullptr, Options.DebugOverlaySprites))
Options.DebugOverlaySprites ^= true; Options.DebugOverlaySprites ^= true;
if (ImGui::MenuItem("All Edges", nullptr, Options.DebugOverlayAllEdges)) if (ImGui::MenuItem("All Edges", nullptr, Options.DebugOverlayAllEdges))