From 049606e31edefd175030996b1504bcc4eef1a2f5 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Thu, 30 May 2019 19:00:32 +0200 Subject: Core/MovementGenerator: Add more details to asserts Implement GetDebugInfo in MovementGenerator, PathMovementBase, FlightPathMovementGenerator, WaypointMovementGenerator. Add an additional assert in FlightPathMovementGenerator::DoEventIfAny(), the input node must not be null (cherry picked from commit 9da81239596bf798b1beafc5ddeaeb37dcc330ff) --- src/server/game/Movement/MovementGenerator.cpp | 11 +++++++++ src/server/game/Movement/MovementGenerator.h | 2 ++ .../FlightPathMovementGenerator.cpp | 26 ++++++++++++++++++++++ .../FlightPathMovementGenerator.h | 3 +++ .../Movement/MovementGenerators/PathMovementBase.h | 9 ++++++++ .../WaypointMovementGenerator.cpp | 8 +++++++ .../MovementGenerators/WaypointMovementGenerator.h | 2 ++ 7 files changed, 61 insertions(+) (limited to 'src') diff --git a/src/server/game/Movement/MovementGenerator.cpp b/src/server/game/Movement/MovementGenerator.cpp index 35d689277dd..6c8cd01b475 100644 --- a/src/server/game/Movement/MovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerator.cpp @@ -25,6 +25,17 @@ MovementGenerator::~MovementGenerator() { } +std::string MovementGenerator::GetDebugInfo() const +{ + std::stringstream sstr; + sstr << std::boolalpha + << "Mode: " << std::to_string(Mode) + << " Priority: " << std::to_string(Priority) + << " Flags: " << Flags + << " BaseUniteState: " << BaseUnitState; + return sstr.str(); +} + IdleMovementFactory::IdleMovementFactory() : MovementGeneratorCreator(IDLE_MOTION_TYPE) { } MovementGenerator* IdleMovementFactory::Create(Unit* /*object*/) const diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h index 235743dc429..24585c4e77f 100755 --- a/src/server/game/Movement/MovementGenerator.h +++ b/src/server/game/Movement/MovementGenerator.h @@ -73,6 +73,8 @@ class TC_GAME_API MovementGenerator bool HasFlag(uint16 const flag) const { return (Flags & flag) != 0; } void RemoveFlag(uint16 const flag) { Flags &= ~flag; } + virtual std::string GetDebugInfo() const; + uint8 Mode; uint8 Priority; uint16 Flags; diff --git a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp index 586d054d024..0db994b672e 100644 --- a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp @@ -240,6 +240,8 @@ void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport() void FlightPathMovementGenerator::DoEventIfAny(Player* owner, TaxiPathNodeEntry const* node, bool departure) { + ASSERT(node); + if (uint32 eventid = departure ? node->DepartureEventID : node->ArrivalEventID) { TC_LOG_DEBUG("maps.script", "FlightPathMovementGenerator::DoEventIfAny: taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node->NodeIndex, node->PathID, owner->GetName().c_str()); @@ -278,3 +280,27 @@ void FlightPathMovementGenerator::PreloadEndGrid() else TC_LOG_DEBUG("movement.flightpath", "FlightPathMovementGenerator::PreloadEndGrid: unable to determine map to preload flightmaster grid"); } + +uint32 FlightPathMovementGenerator::GetPathId(size_t index) const +{ + if (index >= _path.size()) + return 0; + + return _path[index]->PathID; +} + +std::string FlightPathMovementGenerator::GetDebugInfo() const +{ + std::stringstream sstr; + sstr << std::boolalpha + << PathMovementBase::GetDebugInfo() << "\n" + << MovementGeneratorMedium::GetDebugInfo() << "\n" + << "Start Path Id: " << GetPathId(0) + << " Path Size: " << _path.size() + << " HasArrived: " << HasArrived() + << " End Grid X: " << _endGridX + << " End Grid Y: " << _endGridY + << " End Map Id: " << _endMapId + << " Preloaded Target Node: " << _preloadTargetNode; + return sstr.str(); +} diff --git a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h index 5ae722964b6..e946cce1ec4 100644 --- a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h @@ -46,6 +46,7 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium const& GetPath() { return _path; } uint32 GetPathAtMapEnd() const; bool HasArrived() const { return _currentNode >= _path.size(); } + uint32 GetPathId(size_t index) const; void LoadPath(Player* owner, uint32 startNode = 0); // called from MotionMaster void SetCurrentNodeAfterTeleport(); @@ -54,6 +55,8 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium template class PathMovementBase @@ -29,6 +30,14 @@ class PathMovementBase uint32 GetCurrentNode() const { return _currentNode; } + virtual std::string GetDebugInfo() const + { + std::stringstream sstr; + sstr << std::boolalpha + << "Current Node: " << GetCurrentNode(); + return sstr.str(); + }; + protected: BasePath _path; uint32 _currentNode; diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 863b7656da4..fa5f27b7dba 100644 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -389,3 +389,11 @@ bool WaypointMovementGenerator::ComputeNextNode() _currentNode = (_currentNode + 1) % _path->nodes.size(); return true; } + +std::string WaypointMovementGenerator::GetDebugInfo() const +{ + std::stringstream sstr; + sstr << PathMovementBase::GetDebugInfo() << "\n" + << MovementGeneratorMedium::GetDebugInfo(); + return sstr.str(); +} diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h index 1bdb02eaa94..9efeded9fee 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h @@ -50,6 +50,8 @@ class WaypointMovementGenerator : public MovementGeneratorMedium