#include "RainOfArrows.h" #include "EntityManager.h" #include "SkillComponent.h" #include "EntityInfo.h" #include "GameMessages.h" void RainOfArrows::OnStartup(Entity* self) { } void RainOfArrows::OnRebuildComplete(Entity* self, Entity* target) { auto myPos = self->GetPosition(); auto myRot = self->GetRotation(); EntityInfo info; info.lot = m_ArrowFXObject; info.pos = myPos; info.rot = myRot; info.spawnerID = self->GetObjectID(); auto* entity = EntityManager::Instance()->CreateEntity(info); EntityManager::Instance()->ConstructEntity(entity); self->SetVar(u"ChildFX", entity->GetObjectID()); self->SetVar(u"playerID", target->GetObjectID()); self->AddTimer("ArrowsIncoming", m_ArrowDelay); self->AddTimer("PlayArrowSound", m_ArrowDelay - 4); } void RainOfArrows::OnTimerDone(Entity* self, std::string timerName) { auto* child = EntityManager::Instance()->GetEntity( self->GetVar(u"ChildFX") ); auto* player = EntityManager::Instance()->GetEntity( self->GetVar(u"playerID") ); if (timerName == "ArrowsIncoming") { if (child == nullptr) { return; } auto skillComponent = child->GetComponent(); if (skillComponent == nullptr) { return; } skillComponent->CalculateBehavior( m_ArrowSkill, m_ArrowBehavior, LWOOBJID_EMPTY, true, false, player != nullptr ? player->GetObjectID() : LWOOBJID_EMPTY ); self->AddTimer("FireSkill", 0.7f); } else if (timerName == "PlayArrowSound") { GameMessages::SendPlayNDAudioEmitter(self, UNASSIGNED_SYSTEM_ADDRESS, m_ArrowsGUID); } else if (timerName == "FireSkill") { if (child != nullptr) { child->Smash(); } self->Smash(player != nullptr ? player->GetObjectID() : LWOOBJID_EMPTY); } }