DarkflameServer/dScripts/ai/GF/PetDigBuild.cpp
David Markowitz 891648288a Organize Entity header
Probably the third or fourth pass of this darn header...  Just keep making it better every time
Rename some functions to make more sense to a reader
Use different method for Observing/subscribing to component events
Get rid of abomination of overloading GetParentUser
2023-06-16 01:56:02 -07:00

52 lines
1.6 KiB
C++

#include "PetDigBuild.h"
#include "EntityManager.h"
#include "EntityInfo.h"
#include "MissionComponent.h"
#include "eMissionState.h"
void PetDigBuild::OnRebuildComplete(Entity* self, Entity* target) {
auto flagNumber = self->GetVar<std::u16string>(u"flagNum");
EntityInfo info{};
auto pos = self->GetPosition();
pos.SetY(pos.GetY() + 0.5f);
info.pos = pos;
info.rot = self->GetRotation();
info.spawnerID = self->GetSpawnerID();
info.settings = {
new LDFData<LWOOBJID>(u"builder", target->GetObjectID()),
new LDFData<LWOOBJID>(u"X", self->GetObjectID())
};
if (!flagNumber.empty()) {
info.lot = 7410; // Normal GF treasure
info.settings.push_back(new LDFData<std::u16string>(u"groupID", u"Flag" + flagNumber));
} else {
auto* missionComponent = target->GetComponent<MissionComponent>();
if (missionComponent != nullptr && missionComponent->GetMissionState(746) == eMissionState::ACTIVE) {
info.lot = 9307; // Special Captain Jack treasure that drops a mission item
} else {
info.lot = 3495; // Normal AG treasure
}
}
auto* treasure = EntityManager::Instance()->CreateEntity(info);
EntityManager::Instance()->ConstructEntity(treasure);
self->SetVar<LWOOBJID>(u"chestObj", treasure->GetObjectID());
}
void PetDigBuild::OnDie(Entity* self, Entity* killer) {
auto treasureID = self->GetVar<LWOOBJID>(u"chestObj");
if (treasureID == LWOOBJID_EMPTY)
return;
auto treasure = EntityManager::Instance()->GetEntity(treasureID);
if (treasure == nullptr)
return;
// If the quick build expired and the treasure was not collected, hide the treasure
if (!treasure->IsDead()) {
treasure->Smash(self->GetObjectID(), eKillType::SILENT);
}
}