DarkflameServer/dScripts/02_server/Enemy/General/BaseEnemyMech.cpp
David Markowitz 36f7b8a928
remove singleton for dpWorld (#1427)
Removes the singleton inheritance from dpWorld.
Tested that crux prime, nimbus station, avant gardens and nexus tower still use navmeshes and physics and that physics volumes are still collided with.
2024-01-19 15:12:05 -06:00

47 lines
1.7 KiB
C++

#include "BaseEnemyMech.h"
#include "Entity.h"
#include "ControllablePhysicsComponent.h"
#include "EntityManager.h"
#include "dpWorld.h"
#include "EntityInfo.h"
#include "GeneralUtils.h"
#include "DestroyableComponent.h"
#include "eReplicaComponentType.h"
#include "dNavMesh.h"
void BaseEnemyMech::OnStartup(Entity* self) {
auto* destroyableComponent = self->GetComponent<DestroyableComponent>();
if (destroyableComponent != nullptr) {
destroyableComponent->SetFaction(4);
}
}
void BaseEnemyMech::OnDie(Entity* self, Entity* killer) {
ControllablePhysicsComponent* controlPhys = static_cast<ControllablePhysicsComponent*>(self->GetComponent(eReplicaComponentType::CONTROLLABLE_PHYSICS));
if (!controlPhys) return;
NiPoint3 newLoc = { controlPhys->GetPosition().x, dpWorld::GetNavMesh()->GetHeightAtPoint(controlPhys->GetPosition()), controlPhys->GetPosition().z };
EntityInfo info = EntityInfo();
std::vector<LDFBaseData*> cfg;
std::u16string activatorPosStr;
activatorPosStr += (GeneralUtils::to_u16string(controlPhys->GetPosition().x));
activatorPosStr.push_back(0x1f);
activatorPosStr += (GeneralUtils::to_u16string(controlPhys->GetPosition().y));
activatorPosStr.push_back(0x1f);
activatorPosStr += (GeneralUtils::to_u16string(controlPhys->GetPosition().z));
LDFBaseData* activatorPos = new LDFData<std::u16string>(u"rebuild_activators", activatorPosStr);
cfg.push_back(activatorPos);
info.lot = qbTurretLOT;
info.pos = newLoc;
info.rot = controlPhys->GetRotation();
info.spawnerID = self->GetObjectID();
info.settings = cfg;
Entity* turret = Game::entityManager->CreateEntity(info, nullptr);
if (turret) {
Game::entityManager->ConstructEntity(turret);
}
}