This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch debian/master in repository colobot.
commit d38ddcbc4199fe624f9b6689127363ee7bb5693d Author: krzys-h <krzy...@interia.pl> Date: Mon Mar 28 20:25:07 2016 +0200 goto() path debugger --- src/common/event.h | 7 ++++--- src/graphics/engine/engine.cpp | 30 ++++++++++++++++++++++++++++++ src/graphics/engine/engine.h | 6 ++++++ src/object/task/taskgoto.cpp | 33 ++++++++++++++++++++++++++++++++- src/ui/debug_menu.cpp | 14 ++++++++++++++ 5 files changed, 86 insertions(+), 4 deletions(-) diff --git a/src/common/event.h b/src/common/event.h index c5fe1f5..d3f22b0 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -385,9 +385,10 @@ enum EventType EVENT_DBG_TELEPORT = 852, EVENT_DBG_LIGHTNING = 853, EVENT_DBG_RESOURCES = 854, - EVENT_DBG_CRASHSPHERES = 855, - EVENT_DBG_LIGHTS = 856, - EVENT_DBG_LIGHTS_DUMP = 857, + EVENT_DBG_GOTO = 855, + EVENT_DBG_CRASHSPHERES = 856, + EVENT_DBG_LIGHTS = 857, + EVENT_DBG_LIGHTS_DUMP = 858, EVENT_SPAWN_CANCEL = 860, EVENT_SPAWN_ME = 861, diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index e3e3431..7d00e87 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -3378,6 +3378,21 @@ void CEngine::Draw3DScene() if (m_debugCrashSpheres) DrawCrashSpheres(); + if (m_debugGoto) + { + Math::Matrix worldMatrix; + worldMatrix.LoadIdentity(); + m_device->SetTransform(TRANSFORM_WORLD, worldMatrix); + + SetState(ENG_RSTATE_OPAQUE_COLOR); + + for (const auto& line : m_displayGoto) + { + m_device->DrawPrimitive(PRIMITIVE_LINE_STRIP, line.data(), line.size()); + } + } + m_displayGoto.clear(); + m_app->StartPerformanceCounter(PCNT_RENDER_PARTICLE); m_particle->DrawParticle(SH_WORLD); // draws the particles of the 3D world m_app->StopPerformanceCounter(PCNT_RENDER_PARTICLE); @@ -5129,4 +5144,19 @@ bool CEngine::GetDebugResources() return m_debugResources; } +void CEngine::SetDebugGoto(bool debugGoto) +{ + m_debugGoto = debugGoto; +} + +bool CEngine::GetDebugGoto() +{ + return m_debugGoto; +} + +void CEngine::AddDebugGotoLine(std::vector<Gfx::VertexCol> line) +{ + m_displayGoto.push_back(line); +} + } // namespace Gfx diff --git a/src/graphics/engine/engine.h b/src/graphics/engine/engine.h index f95bdf3..04757fc 100644 --- a/src/graphics/engine/engine.h +++ b/src/graphics/engine/engine.h @@ -1191,6 +1191,10 @@ public: void SetDebugResources(bool debugResources); bool GetDebugResources(); + void SetDebugGoto(bool debugGoto); + bool GetDebugGoto(); + void AddDebugGotoLine(std::vector<Gfx::VertexCol> line); + protected: //! Resets some states and flushes textures after device was changed (e.g. resoulution changed) /** Instead of calling this directly, send EVENT_RESOLUTION_CHANGED event **/ @@ -1482,12 +1486,14 @@ protected: bool m_debugDumpLights; bool m_debugCrashSpheres = false; bool m_debugResources = false; + bool m_debugGoto = false; std::string m_timerText; std::unordered_map<std::string, int> m_staticMeshBaseObjects; std::vector<Math::Sphere> m_displayCrashSpheres; + std::vector<std::vector<VertexCol>> m_displayGoto; //! Pause the animation updates bool m_pause = false; diff --git a/src/object/task/taskgoto.cpp b/src/object/task/taskgoto.cpp index d7e36cd..7a6c754 100644 --- a/src/object/task/taskgoto.cpp +++ b/src/object/task/taskgoto.cpp @@ -77,9 +77,38 @@ bool CTaskGoto::EventProcess(const Event &event) float a, g, dist, linSpeed, cirSpeed, h, hh, factor, dir; Error ret; - if ( m_engine->GetPause() ) return true; if ( event.type != EVENT_FRAME ) return true; + if (m_engine->GetDebugGoto()) + { + auto AdjustPoint = [&](Math::Vector p) -> Math::Vector + { + m_terrain->AdjustToFloor(p); + p.y += 2.0f; + return p; + }; + + std::vector<Gfx::VertexCol> debugLine; + if (m_bmTotal > 0) + { + Gfx::Color color = Gfx::Color(0.0f, 1.0f, 0.0f); + for (int i = 0; i < m_bmTotal; i++) + { + if (i > m_bmIndex-1) + color = Gfx::Color(1.0f, 0.0f, 0.0f); + debugLine.push_back(Gfx::VertexCol(AdjustPoint(m_bmPoints[i]), color)); + } + m_engine->AddDebugGotoLine(debugLine); + debugLine.clear(); + } + Gfx::Color color = Gfx::Color(0.0f, 0.0f, 1.0f); + debugLine.push_back(Gfx::VertexCol(m_object->GetPosition(), color)); + debugLine.push_back(Gfx::VertexCol(AdjustPoint(m_bmTotal > 0 && m_bmIndex <= m_bmTotal && m_phase != TGP_BEAMSEARCH ? m_bmPoints[m_bmIndex] : m_goal), color)); + m_engine->AddDebugGotoLine(debugLine); + } + + if ( m_engine->GetPause() ) return true; + // Momentarily stationary object (ant on the back)? CBaseAlien* alien = dynamic_cast<CBaseAlien*>(m_object); if ( alien != nullptr && alien->GetFixed() ) @@ -1616,6 +1645,8 @@ Error CTaskGoto::BeamExplore(const Math::Vector &prevPos, const Math::Vector &cu iLar = 0; if ( i >= MAXPOINTS ) return ERR_GOTO_ITER; // too many recursions + m_bmTotal = i; + if ( m_bmIter[i] == -1 ) { m_bmIter[i] = 0; diff --git a/src/ui/debug_menu.cpp b/src/ui/debug_menu.cpp index 7d8ae15..88e62c1 100644 --- a/src/ui/debug_menu.cpp +++ b/src/ui/debug_menu.cpp @@ -97,6 +97,9 @@ void CDebugMenu::CreateInterface() pc = pw->CreateCheck(pos, ddim, -1, EVENT_DBG_RESOURCES); pc->SetName("Underground resources"); pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_DBG_GOTO); + pc->SetName("Render goto() path"); + pos.y -= 0.048f; pc = pw->CreateCheck(pos, ddim, -1, EVENT_DBG_CRASHSPHERES); pc->SetName("Render crash spheres"); pos.y -= 0.048f; @@ -213,6 +216,12 @@ void CDebugMenu::UpdateInterface() pc->SetState(STATE_CHECK, m_engine->GetDebugResources()); } + pc = static_cast<CCheck*>(pw->SearchControl(EVENT_DBG_GOTO)); + if (pc != nullptr) + { + pc->SetState(STATE_CHECK, m_engine->GetDebugGoto()); + } + pc = static_cast<CCheck*>(pw->SearchControl(EVENT_DBG_CRASHSPHERES)); if (pc != nullptr) { @@ -280,6 +289,11 @@ bool CDebugMenu::EventProcess(const Event &event) UpdateInterface(); break; + case EVENT_DBG_GOTO: + m_engine->SetDebugGoto(!m_engine->GetDebugGoto()); + UpdateInterface(); + break; + case EVENT_DBG_CRASHSPHERES: m_main->SetDebugCrashSpheres(!m_main->GetDebugCrashSpheres()); UpdateInterface(); -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits