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

References ResetSlots(), and TEAM_HORDE.

Member Function Documentation

◆ ClearSlot()

void PassengerController::ClearSlot ( PassengerSlots  slot)
inline
468 {
469 _controlledSlots[slot].Clear();
471 }
void Clear()
Definition ObjectGuid.h:138
time_t _respawnCooldowns[MAX_SLOTS]
Definition boss_icecrown_gunship_battle.cpp:487
SlotInfo const * _slotInfo
Definition boss_icecrown_gunship_battle.cpp:490
ObjectGuid _controlledSlots[MAX_SLOTS]
Definition boss_icecrown_gunship_battle.cpp:486
Seconds GetGameTime()
Definition GameTime.cpp:38
uint32 Cooldown
Definition boss_icecrown_gunship_battle.cpp:301

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
415 {
416 _transport = t;
417
418 for (uint8 i = 0; i < MAX_SLOTS; ++i)
419 {
421 _respawnCooldowns[i] = time_t(0);
422 }
423
426 }
std::uint8_t uint8
Definition Define.h:109
SlotInfo const SkybreakerSlotInfo[MAX_SLOTS]
Definition boss_icecrown_gunship_battle.cpp:304
SlotInfo const OrgrimsHammerSlotInfo[MAX_SLOTS]
Definition boss_icecrown_gunship_battle.cpp:338
Position const SkybreakerAddsSpawnPos
Definition boss_icecrown_gunship_battle.cpp:207
Position const OrgrimsHammerAddsSpawnPos
Definition boss_icecrown_gunship_battle.cpp:208
@ MAX_SLOTS
Definition boss_icecrown_gunship_battle.cpp:294
Position const * _spawnPoint
Definition boss_icecrown_gunship_battle.cpp:489
MotionTransport * _transport
Definition boss_icecrown_gunship_battle.cpp:488

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
475 {
476 float angle = frand(-M_PI * 0.5f, M_PI * 0.5f);
477 Position newPos;
478 newPos.m_positionX = _spawnPoint->GetPositionX() + 2.0f * std::cos(angle);
479 newPos.m_positionY = _spawnPoint->GetPositionY() + 2.0f * std::sin(angle);
483 return newPos;
484 }
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
429 {
430 if (!_transport)
431 return false;
432
433 bool summoned = false;
434 time_t now = GameTime::GetGameTime().count();
435 for (int32 i = first; i <= last; ++i)
436 {
437 if (_respawnCooldowns[i] > now)
438 continue;
439
440 if (_controlledSlots[i])
441 {
443 if (current && current->IsAlive())
444 continue;
445 }
446
447 Position spawnPos = SelectSpawnPoint();
448 if (Creature* passenger = summoner->SummonCreature(_slotInfo[i].Entry, spawnPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000))
449 {
450 if (!passenger->GetTransport())
451 _transport->AddPassenger(passenger, true);
452 passenger->ApplySpellImmune(0, IMMUNITY_ID, 49576, true); // death grip
453
454 if (i >= SLOT_MAGE_1 && i <= SLOT_MORTAR_4) // only these npcs are pooled
455 {
456 _controlledSlots[i] = passenger->GetGUID();
457 _respawnCooldowns[i] = time_t(0);
458 }
459 passenger->AI()->SetData(ACTION_SET_SLOT, i);
460 summoned = true;
461 }
462 }
463
464 return summoned;
465 }
std::int32_t int32
Definition Define.h:103
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition Object.h:52
@ IMMUNITY_ID
Definition SharedDefines.h:1400
@ ACTION_SET_SLOT
Definition boss_icecrown_gunship_battle.cpp:200
@ SLOT_MORTAR_4
Definition boss_icecrown_gunship_battle.cpp:278
@ SLOT_MAGE_1
Definition boss_icecrown_gunship_battle.cpp:257
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:474
bool IsAlive() const
Definition Unit.h:1698
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:299

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: