AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
PassengerController Class Reference

Public Member Functions

 PassengerController ()
 
void ResetSlots (TeamId teamId, MotionTransport *t)
 
bool SummonCreatures (Creature *summoner, PassengerSlots first, PassengerSlots last)
 
void ClearSlot (PassengerSlots slot)
 

Private Member Functions

Position SelectSpawnPoint () const
 

Private Attributes

ObjectGuid _controlledSlots [MAX_SLOTS]
 
time_t _respawnCooldowns [MAX_SLOTS]
 
MotionTransport_transport
 
Position const * _spawnPoint
 
SlotInfo const * _slotInfo
 

Detailed Description

Constructor & Destructor Documentation

◆ PassengerController()

PassengerController::PassengerController ( )
inline
406 {
407 ResetSlots(TEAM_HORDE, nullptr);
408 }
@ TEAM_HORDE
Definition: SharedDefines.h:761
void ResetSlots(TeamId teamId, MotionTransport *t)
Definition: boss_icecrown_gunship_battle.cpp:410

References ResetSlots(), and TEAM_HORDE.

Member Function Documentation

◆ ClearSlot()

void PassengerController::ClearSlot ( PassengerSlots  slot)
inline
464 {
465 _controlledSlots[slot].Clear();
467 }
Seconds GetGameTime()
Definition: GameTime.cpp:38
void Clear()
Definition: ObjectGuid.h:140
uint32 Cooldown
Definition: boss_icecrown_gunship_battle.cpp:297
time_t _respawnCooldowns[MAX_SLOTS]
Definition: boss_icecrown_gunship_battle.cpp:483
SlotInfo const * _slotInfo
Definition: boss_icecrown_gunship_battle.cpp:486
ObjectGuid _controlledSlots[MAX_SLOTS]
Definition: boss_icecrown_gunship_battle.cpp:482

References _controlledSlots, _respawnCooldowns, _slotInfo, ObjectGuid::Clear(), SlotInfo::Cooldown, and GameTime::GetGameTime().

Referenced by npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::SetData(), and npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::SetData().

◆ ResetSlots()

void PassengerController::ResetSlots ( TeamId  teamId,
MotionTransport t 
)
inline
411 {
412 _transport = t;
413
414 for (uint8 i = 0; i < MAX_SLOTS; ++i)
415 {
417 _respawnCooldowns[i] = time_t(0);
418 }
419
422 }
std::uint8_t uint8
Definition: Define.h:110
SlotInfo const SkybreakerSlotInfo[MAX_SLOTS]
Definition: boss_icecrown_gunship_battle.cpp:300
SlotInfo const OrgrimsHammerSlotInfo[MAX_SLOTS]
Definition: boss_icecrown_gunship_battle.cpp:334
Position const SkybreakerAddsSpawnPos
Definition: boss_icecrown_gunship_battle.cpp:203
Position const OrgrimsHammerAddsSpawnPos
Definition: boss_icecrown_gunship_battle.cpp:204
@ MAX_SLOTS
Definition: boss_icecrown_gunship_battle.cpp:290
Position const * _spawnPoint
Definition: boss_icecrown_gunship_battle.cpp:485
MotionTransport * _transport
Definition: boss_icecrown_gunship_battle.cpp:484

References _controlledSlots, _respawnCooldowns, _slotInfo, _spawnPoint, _transport, ObjectGuid::Clear(), MAX_SLOTS, OrgrimsHammerAddsSpawnPos, OrgrimsHammerSlotInfo, SkybreakerAddsSpawnPos, SkybreakerSlotInfo, and TEAM_HORDE.

Referenced by npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::npc_high_overlord_saurfang_igbAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::npc_muradin_bronzebeard_igbAI(), and PassengerController().

◆ SelectSpawnPoint()

Position PassengerController::SelectSpawnPoint ( ) const
inlineprivate
471 {
472 float angle = frand(-M_PI * 0.5f, M_PI * 0.5f);
473 Position newPos;
474 newPos.m_positionX = _spawnPoint->GetPositionX() + 2.0f * std::cos(angle);
475 newPos.m_positionY = _spawnPoint->GetPositionY() + 2.0f * std::sin(angle);
479 return newPos;
480 }
float frand(float min, float max)
Definition: Random.cpp:57
Definition: Position.h:28
float m_positionZ
Definition: Position.h:58
float m_positionX
Definition: Position.h:56
float GetPositionZ() const
Definition: Position.h:119
float m_positionY
Definition: Position.h:57
float GetOrientation() const
Definition: Position.h:120
void SetOrientation(float orientation)
Definition: Position.h:112
float m_orientation
Definition: Position.h:59
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
void CalculatePassengerPosition(float &x, float &y, float &z, float *o=nullptr) const override
This method transforms supplied transport offsets into global coordinates.
Definition: Transport.h:32

References _spawnPoint, _transport, Transport::CalculatePassengerPosition(), frand(), Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Position::m_orientation, Position::m_positionX, Position::m_positionY, Position::m_positionZ, and Position::SetOrientation().

Referenced by SummonCreatures().

◆ SummonCreatures()

bool PassengerController::SummonCreatures ( Creature summoner,
PassengerSlots  first,
PassengerSlots  last 
)
inline
425 {
426 if (!_transport)
427 return false;
428
429 bool summoned = false;
430 time_t now = GameTime::GetGameTime().count();
431 for (int32 i = first; i <= last; ++i)
432 {
433 if (_respawnCooldowns[i] > now)
434 continue;
435
436 if (_controlledSlots[i])
437 {
439 if (current && current->IsAlive())
440 continue;
441 }
442
443 Position spawnPos = SelectSpawnPoint();
444 if (Creature* passenger = summoner->SummonCreature(_slotInfo[i].Entry, spawnPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000))
445 {
446 if (!passenger->GetTransport())
447 _transport->AddPassenger(passenger, true);
448 passenger->ApplySpellImmune(0, IMMUNITY_ID, 49576, true); // death grip
449
450 if (i >= SLOT_MAGE_1 && i <= SLOT_MORTAR_4) // only these npcs are pooled
451 {
452 _controlledSlots[i] = passenger->GetGUID();
453 _respawnCooldowns[i] = time_t(0);
454 }
455 passenger->AI()->SetData(ACTION_SET_SLOT, i);
456 summoned = true;
457 }
458 }
459
460 return summoned;
461 }
std::int32_t int32
Definition: Define.h:104
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition: Object.h:47
@ ACTION_SET_SLOT
Definition: boss_icecrown_gunship_battle.cpp:196
@ SLOT_MORTAR_4
Definition: boss_icecrown_gunship_battle.cpp:274
@ SLOT_MAGE_1
Definition: boss_icecrown_gunship_battle.cpp:253
@ IMMUNITY_ID
Definition: SharedDefines.h:1400
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:213
Definition: Creature.h:46
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition: Object.cpp:2343
void AddPassenger(WorldObject *passenger, bool withAll=false) override
Definition: Transport.cpp:265
bool IsAlive() const
Definition: Unit.h:1822
uint32 Entry
Definition: boss_icecrown_gunship_battle.cpp:295
Position SelectSpawnPoint() const
Definition: boss_icecrown_gunship_battle.cpp:470

References _controlledSlots, _respawnCooldowns, _slotInfo, _transport, ACTION_SET_SLOT, MotionTransport::AddPassenger(), SlotInfo::Entry, ObjectAccessor::GetCreature(), GameTime::GetGameTime(), IMMUNITY_ID, Unit::IsAlive(), SelectSpawnPoint(), SLOT_MAGE_1, SLOT_MORTAR_4, WorldObject::SummonCreature(), and TEMPSUMMON_CORPSE_TIMED_DESPAWN.

Referenced by npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::DoAction(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::DoAction(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), and npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI().

Member Data Documentation

◆ _controlledSlots

ObjectGuid PassengerController::_controlledSlots[MAX_SLOTS]
private

◆ _respawnCooldowns

time_t PassengerController::_respawnCooldowns[MAX_SLOTS]
private

◆ _slotInfo

SlotInfo const* PassengerController::_slotInfo
private

◆ _spawnPoint

Position const* PassengerController::_spawnPoint
private

Referenced by ResetSlots(), and SelectSpawnPoint().

◆ _transport

MotionTransport* PassengerController::_transport
private