#include "EnemySpiderSpawner.h" #include "GameMessages.h" #include "SimplePhysicsComponent.h" #include "EntityManager.h" #include "DestroyableComponent.h" #include "MovementAIComponent.h" //---------------------------------------------- //--Initiate egg hatching on call //---------------------------------------------- void EnemySpiderSpawner::OnFireEventServerSide(Entity *self, Entity *sender, std::string args, int32_t param1, int32_t param2, int32_t param3) { if (args == "prepEgg") { // Highlight eggs about to hatch with Maelstrom effect GameMessages::SendPlayFXEffect(self->GetObjectID(), 2856, u"maelstrom", "test", LWOOBJID_EMPTY, 1.0f, 1.0f, true); // Make indestructible auto dest = static_cast(self->GetComponent(COMPONENT_TYPE_DESTROYABLE)); if (dest) { dest->SetFaction(-1); } EntityManager::Instance()->SerializeEntity(self); // Keep track of who prepped me self->SetI64(u"SpawnOwner", sender->GetObjectID()); } else if (args == "hatchEgg") { // Final countdown to pop self->AddTimer("StartSpawnTime", hatchTime); } } //---------------------------------------------------------------- //--Called when timers are done //---------------------------------------------------------------- void EnemySpiderSpawner::OnTimerDone(Entity* self, std::string timerName) { if (timerName == "StartSpawnTime") { SpawnSpiderling(self); } else if (timerName == "SpawnSpiderling") { GameMessages::SendPlayFXEffect(self->GetObjectID(), 644, u"create", "egg_puff_b", LWOOBJID_EMPTY, 1.0f, 1.0f, true); //TODO: set the aggro radius larger EntityInfo info {}; info.lot = 16197; info.pos = self->GetPosition(); info.spawner = nullptr; info.spawnerID = self->GetI64(u"SpawnOwner"); info.spawnerNodeID = 0; Entity* newEntity = EntityManager::Instance()->CreateEntity(info, nullptr); if (newEntity) { EntityManager::Instance()->ConstructEntity(newEntity); newEntity->GetGroups().push_back("BabySpider"); /* auto* movementAi = newEntity->GetComponent(); movementAi->SetDestination(newEntity->GetPosition()); */ } self->ScheduleKillAfterUpdate(); } } //-------------------------------------------------------------- //Called when it is finally time to release the Spiderlings //-------------------------------------------------------------- void EnemySpiderSpawner::SpawnSpiderling(Entity* self) { //Initiate the actual spawning GameMessages::SendPlayFXEffect(self->GetObjectID(), 2260, u"rebuild_medium", "dropdustmedium", LWOOBJID_EMPTY, 1.0f, 1.0f, true); self->AddTimer("SpawnSpiderling", spawnTime); }