aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2018-06-03 10:06:57 -0700
committerShauren <shauren.trinity@gmail.com>2021-09-28 00:15:13 +0200
commit426f9f2f92b26fbb68e7cda9290ccbd586c6af4e (patch)
treeede70b7865c2edb58964c7aa668eb1250a5816ab /src/server/game/Handlers
parent3e0af19b7767d6e71a7467874fdad566cea5ee87 (diff)
Core/Movement: MotionMaster reimplementation (#21888)
Internal structure and handling changes, nothing behavioural (or thats the intention at least). (cherry picked from commit 982643cd96790ffc54e7a3e507469649f3b074d2)
Diffstat (limited to 'src/server/game/Handlers')
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp7
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp16
-rw-r--r--src/server/game/Handlers/PetHandler.cpp4
-rw-r--r--src/server/game/Handlers/TaxiHandler.cpp5
4 files changed, 12 insertions, 20 deletions
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index 15d34caa157..d1409b24626 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -31,7 +31,6 @@
#include "Group.h"
#include "Language.h"
#include "Log.h"
-#include "MotionMaster.h"
#include "NPCPackets.h"
#include "Object.h"
#include "ObjectAccessor.h"
@@ -364,11 +363,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPackets::Battleground::Battl
_player->SpawnCorpseBones();
}
// stop taxi flight at port
- if (_player->IsInFlight())
- {
- _player->GetMotionMaster()->MovementExpired();
- _player->CleanupAfterTaxiFlight();
- }
+ _player->FinishTaxiFlight();
WorldPackets::Battleground::BattlefieldStatusActive battlefieldStatus;
sBattlegroundMgr->BuildBattlegroundStatusActive(&battlefieldStatus, bg, _player, battlefieldPort.Ticket.Id, _player->GetBattlegroundQueueJoinTime(bgQueueTypeId), bg->GetArenaType());
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index ac873eb6d01..523bcc7c7a5 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -145,32 +145,32 @@ void WorldSession::HandleMoveWorldportAck()
}
// flight fast teleport case
- if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE)
+ if (GetPlayer()->IsInFlight())
{
if (!_player->InBattleground())
{
if (!seamlessTeleport)
{
// short preparations to continue flight
- MovementGenerator* movementGenerator = GetPlayer()->GetMotionMaster()->top();
+ MovementGenerator* movementGenerator = GetPlayer()->GetMotionMaster()->GetCurrentMovementGenerator();
movementGenerator->Initialize(GetPlayer());
}
return;
}
// battleground state prepare, stop flight
- GetPlayer()->GetMotionMaster()->MovementExpired();
- GetPlayer()->CleanupAfterTaxiFlight();
+ GetPlayer()->FinishTaxiFlight();
}
// resurrect character at enter into instance where his corpse exist after add to map
-
if (mEntry->IsDungeon() && !GetPlayer()->IsAlive())
+ {
if (GetPlayer()->GetCorpseLocation().GetMapId() == mEntry->ID)
{
GetPlayer()->ResurrectPlayer(0.5f, false);
GetPlayer()->SpawnCorpseBones();
}
+ }
bool allowMount = !mEntry->IsDungeon() || mEntry->IsBattlegroundOrArena();
if (mInstance)
@@ -674,13 +674,11 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSpline
TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest);
// far teleport case
- if (curDestNode && curDestNode->ContinentID != GetPlayer()->GetMapId())
+ if (curDestNode && curDestNode->ContinentID != GetPlayer()->GetMapId() && GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE)
{
- if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE)
+ if (FlightPathMovementGenerator* flight = dynamic_cast<FlightPathMovementGenerator*>(GetPlayer()->GetMotionMaster()->GetCurrentMovementGenerator()))
{
// short preparations to continue flight
- FlightPathMovementGenerator* flight = (FlightPathMovementGenerator*)(GetPlayer()->GetMotionMaster()->top());
-
flight->SetCurrentNodeAfterTeleport();
TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()];
flight->SkipCurrentNode();
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index bb5e3323b11..67d9c4f00b0 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -153,7 +153,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
{
case COMMAND_STAY: //flat=1792 //STAY
pet->StopMoving();
- pet->GetMotionMaster()->Clear(false);
+ pet->GetMotionMaster()->Clear();
pet->GetMotionMaster()->MoveIdle();
charmInfo->SetCommandState(COMMAND_STAY);
@@ -261,7 +261,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
break;
case COMMAND_MOVE_TO:
pet->StopMoving();
- pet->GetMotionMaster()->Clear(false);
+ pet->GetMotionMaster()->Clear();
pet->GetMotionMaster()->MovePoint(0, pos);
charmInfo->SetCommandState(COMMAND_MOVE_TO);
diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp
index 2b8c1098e8c..da4800ca319 100644
--- a/src/server/game/Handlers/TaxiHandler.cpp
+++ b/src/server/game/Handlers/TaxiHandler.cpp
@@ -130,7 +130,7 @@ void WorldSession::SendDoFlight(uint32 mountDisplayId, uint32 path, uint32 pathN
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
- GetPlayer()->GetMotionMaster()->Clear(MOTION_SLOT_CONTROLLED);
+ GetPlayer()->GetMotionMaster()->Remove(FLIGHT_MOTION_TYPE);
if (mountDisplayId)
GetPlayer()->Mount(mountDisplayId);
@@ -231,11 +231,10 @@ void WorldSession::SendActivateTaxiReply(ActivateTaxiReply reply)
void WorldSession::HandleTaxiRequestEarlyLanding(WorldPackets::Taxi::TaxiRequestEarlyLanding& /*taxiRequestEarlyLanding*/)
{
- if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE)
+ if (FlightPathMovementGenerator* flight = dynamic_cast<FlightPathMovementGenerator*>(GetPlayer()->GetMotionMaster()->GetCurrentMovementGenerator()))
{
if (GetPlayer()->m_taxi.RequestEarlyLanding())
{
- FlightPathMovementGenerator* flight = static_cast<FlightPathMovementGenerator*>(GetPlayer()->GetMotionMaster()->top());
flight->LoadPath(GetPlayer(), flight->GetPath()[flight->GetCurrentNode()]->NodeIndex);
flight->Reset(GetPlayer());
}