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
404 {
405 ResetSlots(TEAM_HORDE, nullptr);
406 }
@ TEAM_HORDE
Definition: SharedDefines.h:733
void ResetSlots(TeamId teamId, MotionTransport *t)
Definition: boss_icecrown_gunship_battle.cpp:408

References ResetSlots(), and TEAM_HORDE.

Member Function Documentation

◆ ClearSlot()

void PassengerController::ClearSlot ( PassengerSlots  slot)
inline
462 {
463 _controlledSlots[slot].Clear();
465 }
Seconds GetGameTime()
Definition: GameTime.cpp:38
void Clear()
Definition: ObjectGuid.h:140
uint32 Cooldown
Definition: boss_icecrown_gunship_battle.cpp:295
time_t _respawnCooldowns[MAX_SLOTS]
Definition: boss_icecrown_gunship_battle.cpp:481
SlotInfo const * _slotInfo
Definition: boss_icecrown_gunship_battle.cpp:484
ObjectGuid _controlledSlots[MAX_SLOTS]
Definition: boss_icecrown_gunship_battle.cpp:480

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
409 {
410 _transport = t;
411
412 for (uint8 i = 0; i < MAX_SLOTS; ++i)
413 {
415 _respawnCooldowns[i] = time_t(0);
416 }
417
420 }
std::uint8_t uint8
Definition: Define.h:110
SlotInfo const SkybreakerSlotInfo[MAX_SLOTS]
Definition: boss_icecrown_gunship_battle.cpp:298
SlotInfo const OrgrimsHammerSlotInfo[MAX_SLOTS]
Definition: boss_icecrown_gunship_battle.cpp:332
Position const SkybreakerAddsSpawnPos
Definition: boss_icecrown_gunship_battle.cpp:201
Position const OrgrimsHammerAddsSpawnPos
Definition: boss_icecrown_gunship_battle.cpp:202
@ MAX_SLOTS
Definition: boss_icecrown_gunship_battle.cpp:288
Position const * _spawnPoint
Definition: boss_icecrown_gunship_battle.cpp:483
MotionTransport * _transport
Definition: boss_icecrown_gunship_battle.cpp:482

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
469 {
470 float angle = frand(-M_PI * 0.5f, M_PI * 0.5f);
471 Position newPos;
472 newPos.m_positionX = _spawnPoint->GetPositionX() + 2.0f * std::cos(angle);
473 newPos.m_positionY = _spawnPoint->GetPositionY() + 2.0f * std::sin(angle);
477 return newPos;
478 }
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
423 {
424 if (!_transport)
425 return false;
426
427 bool summoned = false;
428 time_t now = GameTime::GetGameTime().count();
429 for (int32 i = first; i <= last; ++i)
430 {
431 if (_respawnCooldowns[i] > now)
432 continue;
433
434 if (_controlledSlots[i])
435 {
437 if (current && current->IsAlive())
438 continue;
439 }
440
441 Position spawnPos = SelectSpawnPoint();
442 if (Creature* passenger = summoner->SummonCreature(_slotInfo[i].Entry, spawnPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000))
443 {
444 if (!passenger->GetTransport())
445 _transport->AddPassenger(passenger, true);
446 passenger->ApplySpellImmune(0, IMMUNITY_ID, 49576, true); // death grip
447
448 if (i >= SLOT_MAGE_1 && i <= SLOT_MORTAR_4) // only these npcs are pooled
449 {
450 _controlledSlots[i] = passenger->GetGUID();
451 _respawnCooldowns[i] = time_t(0);
452 }
453 passenger->AI()->SetData(ACTION_SET_SLOT, i);
454 summoned = true;
455 }
456 }
457
458 return summoned;
459 }
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:194
@ SLOT_MORTAR_4
Definition: boss_icecrown_gunship_battle.cpp:272
@ SLOT_MAGE_1
Definition: boss_icecrown_gunship_battle.cpp:251
@ IMMUNITY_ID
Definition: SharedDefines.h:1372
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:215
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:2318
void AddPassenger(WorldObject *passenger, bool withAll=false) override
Definition: Transport.cpp:263
bool IsAlive() const
Definition: Unit.h:1808
uint32 Entry
Definition: boss_icecrown_gunship_battle.cpp:293
Position SelectSpawnPoint() const
Definition: boss_icecrown_gunship_battle.cpp:468

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