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
409 {
410 ResetSlots(TEAM_HORDE, nullptr);
411 }
@ TEAM_HORDE
Definition SharedDefines.h:761
void ResetSlots(TeamId teamId, MotionTransport *t)
Definition boss_icecrown_gunship_battle.cpp:413

References ResetSlots(), and TEAM_HORDE.

Member Function Documentation

◆ ClearSlot()

void PassengerController::ClearSlot ( PassengerSlots  slot)
inline
467 {
468 _controlledSlots[slot].Clear();
470 }
void Clear()
Definition ObjectGuid.h:138
time_t _respawnCooldowns[MAX_SLOTS]
Definition boss_icecrown_gunship_battle.cpp:486
SlotInfo const * _slotInfo
Definition boss_icecrown_gunship_battle.cpp:489
ObjectGuid _controlledSlots[MAX_SLOTS]
Definition boss_icecrown_gunship_battle.cpp:485
Seconds GetGameTime()
Definition GameTime.cpp:38
uint32 Cooldown
Definition boss_icecrown_gunship_battle.cpp:300

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
414 {
415 _transport = t;
416
417 for (uint8 i = 0; i < MAX_SLOTS; ++i)
418 {
420 _respawnCooldowns[i] = time_t(0);
421 }
422
425 }
std::uint8_t uint8
Definition Define.h:109
SlotInfo const SkybreakerSlotInfo[MAX_SLOTS]
Definition boss_icecrown_gunship_battle.cpp:303
SlotInfo const OrgrimsHammerSlotInfo[MAX_SLOTS]
Definition boss_icecrown_gunship_battle.cpp:337
Position const SkybreakerAddsSpawnPos
Definition boss_icecrown_gunship_battle.cpp:206
Position const OrgrimsHammerAddsSpawnPos
Definition boss_icecrown_gunship_battle.cpp:207
@ MAX_SLOTS
Definition boss_icecrown_gunship_battle.cpp:293
Position const * _spawnPoint
Definition boss_icecrown_gunship_battle.cpp:488
MotionTransport * _transport
Definition boss_icecrown_gunship_battle.cpp:487

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
474 {
475 float angle = frand(-M_PI * 0.5f, M_PI * 0.5f);
476 Position newPos;
477 newPos.m_positionX = _spawnPoint->GetPositionX() + 2.0f * std::cos(angle);
478 newPos.m_positionY = _spawnPoint->GetPositionY() + 2.0f * std::sin(angle);
482 return newPos;
483 }
float frand(float min, float max)
Definition Random.cpp:57
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:33
Definition Position.h:27
float m_positionZ
Definition Position.h:57
float m_positionX
Definition Position.h:55
float GetPositionZ() const
Definition Position.h:123
float m_positionY
Definition Position.h:56
float GetOrientation() const
Definition Position.h:124
void SetOrientation(float orientation)
Definition Position.h:116
float m_orientation
Definition Position.h:58
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

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
428 {
429 if (!_transport)
430 return false;
431
432 bool summoned = false;
433 time_t now = GameTime::GetGameTime().count();
434 for (int32 i = first; i <= last; ++i)
435 {
436 if (_respawnCooldowns[i] > now)
437 continue;
438
439 if (_controlledSlots[i])
440 {
442 if (current && current->IsAlive())
443 continue;
444 }
445
446 Position spawnPos = SelectSpawnPoint();
447 if (Creature* passenger = summoner->SummonCreature(_slotInfo[i].Entry, spawnPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000))
448 {
449 if (!passenger->GetTransport())
450 _transport->AddPassenger(passenger, true);
451 passenger->ApplySpellImmune(0, IMMUNITY_ID, 49576, true); // death grip
452
453 if (i >= SLOT_MAGE_1 && i <= SLOT_MORTAR_4) // only these npcs are pooled
454 {
455 _controlledSlots[i] = passenger->GetGUID();
456 _respawnCooldowns[i] = time_t(0);
457 }
458 passenger->AI()->SetData(ACTION_SET_SLOT, i);
459 summoned = true;
460 }
461 }
462
463 return summoned;
464 }
std::int32_t int32
Definition Define.h:103
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition Object.h:51
@ IMMUNITY_ID
Definition SharedDefines.h:1400
@ ACTION_SET_SLOT
Definition boss_icecrown_gunship_battle.cpp:199
@ SLOT_MORTAR_4
Definition boss_icecrown_gunship_battle.cpp:277
@ SLOT_MAGE_1
Definition boss_icecrown_gunship_battle.cpp:256
Definition Creature.h:43
void AddPassenger(WorldObject *passenger, bool withAll=false) override
Definition Transport.cpp:264
Position SelectSpawnPoint() const
Definition boss_icecrown_gunship_battle.cpp:473
bool IsAlive() const
Definition Unit.h:1707
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:2368
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition ObjectAccessor.cpp:210
uint32 Entry
Definition boss_icecrown_gunship_battle.cpp:298

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

The documentation for this class was generated from the following file: