#include "FvFlyingCreviceDragon.h" #include "GameMessages.h" #include "EntityManager.h" #include "SkillComponent.h" #include "GeneralUtils.h" #include "RenderComponent.h" void FvFlyingCreviceDragon::OnStartup(Entity* self) { self->AddTimer("waypoint", 5); } void FvFlyingCreviceDragon::OnTimerDone(Entity* self, std::string timerName) { if (timerName == "waypoint") { auto point = self->GetVar(u"waypoint"); if (point >= 20) { point = 0; } self->SetVar(u"waypoint", point + 1); self->AddTimer("waypoint", 5); OnArrived(self); return; } std::string groupName = ""; if (timerName == "platform1attack") { groupName = "dragonFireballs1"; } else if (timerName == "platform3attack") { groupName = "dragonFireballs3"; } const auto& group = EntityManager::Instance()->GetEntitiesInGroup(groupName); if (group.empty()) { return; } auto skillComponent = group[0]->GetComponent(); if (skillComponent != nullptr) { skillComponent->CalculateBehavior(762, 12506, LWOOBJID_EMPTY, true); } auto minionCount = 1; for (size_t i = 1; i < group.size(); i++) { if (minionCount == 4) { return; } if (/*GeneralUtils::GenerateRandomNumber(1, 5) > 3*/ true) { skillComponent = group[i]->GetComponent(); if (skillComponent != nullptr) { skillComponent->CalculateBehavior(762, 12506, LWOOBJID_EMPTY); ++minionCount; } } } } void FvFlyingCreviceDragon::OnArrived(Entity* self) { auto point = self->GetVar(u"waypoint"); if (point == 4) { RenderComponent::PlayAnimation(self, u"attack1", 2.0f); self->AddTimer("platform1attack", 1.75f); } else if (point == 12) { RenderComponent::PlayAnimation(self, u"attack2", 2.0f); const auto& group2 = EntityManager::Instance()->GetEntitiesInGroup("dragonFireballs2"); if (group2.empty()) { return; } auto skillComponent = group2[0]->GetComponent(); if (skillComponent != nullptr) { skillComponent->CalculateBehavior(762, 12506, LWOOBJID_EMPTY); } auto minionCount = 1; for (size_t i = 1; i < group2.size(); i++) { if (minionCount == 4) { return; } if (GeneralUtils::GenerateRandomNumber(1, 5) > 3) { skillComponent = group2[i]->GetComponent(); if (skillComponent != nullptr) { skillComponent->CalculateBehavior(762, 12506, LWOOBJID_EMPTY, true); ++minionCount; } } } } else if (point == 16) { RenderComponent::PlayAnimation(self, u"attack3", 2.0f); self->AddTimer("platform3attack", 0.5f); } }