mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-26 23:47:21 +00:00
ec00f5fd9d
Use const everywhere that makes sense return const variables when it makes sense const functions and variables again, where it makes sense No raw access and modifications to protected members Move template definitions to tcc file idk how I feel about this one
137 lines
3.4 KiB
C++
137 lines
3.4 KiB
C++
#include "SwitchComponent.h"
|
|
#include "EntityManager.h"
|
|
#include "eTriggerEventType.h"
|
|
#include "RenderComponent.h"
|
|
|
|
std::vector<SwitchComponent*> SwitchComponent::petSwitches;
|
|
|
|
SwitchComponent::SwitchComponent(Entity* parent) : Component(parent) {
|
|
m_Active = false;
|
|
|
|
m_ResetTime = m_OwningEntity->GetVarAs<int32_t>(u"switch_reset_time");
|
|
|
|
m_Rebuild = m_OwningEntity->GetSharedComponent<RebuildComponent>();
|
|
}
|
|
|
|
SwitchComponent::~SwitchComponent() {
|
|
const auto& iterator = std::find(petSwitches.begin(), petSwitches.end(), this);
|
|
|
|
if (iterator != petSwitches.end()) {
|
|
petSwitches.erase(iterator);
|
|
}
|
|
}
|
|
|
|
void SwitchComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
|
|
outBitStream->Write(m_Active);
|
|
}
|
|
|
|
void SwitchComponent::SetActive(bool active) {
|
|
m_Active = active;
|
|
|
|
if (m_PetBouncer != nullptr) {
|
|
m_PetBouncer->SetPetBouncerEnabled(active);
|
|
}
|
|
}
|
|
|
|
bool SwitchComponent::GetActive() const {
|
|
return m_Active;
|
|
}
|
|
|
|
void SwitchComponent::EntityEnter(Entity* entity) {
|
|
if (!m_Active) {
|
|
if (m_Rebuild) {
|
|
if (m_Rebuild->GetState() != eRebuildState::COMPLETED) return;
|
|
}
|
|
m_Active = true;
|
|
if (!m_OwningEntity) return;
|
|
m_OwningEntity->TriggerEvent(eTriggerEventType::ACTIVATED, entity);
|
|
|
|
const auto grpName = m_OwningEntity->GetVarAsString(u"grp_name");
|
|
|
|
if (!grpName.empty()) {
|
|
const auto entities = EntityManager::Instance()->GetEntitiesInGroup(grpName);
|
|
|
|
for (auto* entity : entities) {
|
|
entity->OnFireEventServerSide(entity, "OnActivated");
|
|
}
|
|
}
|
|
|
|
m_Timer = m_ResetTime;
|
|
|
|
if (m_PetBouncer != nullptr) {
|
|
GameMessages::SendPlayFXEffect(m_OwningEntity->GetObjectID(), 2602, u"pettriggeractive", "BounceEffect", LWOOBJID_EMPTY, 1, 1, true);
|
|
RenderComponent::PlayAnimation(m_OwningEntity, u"engaged");
|
|
m_PetBouncer->SetPetBouncerEnabled(true);
|
|
} else {
|
|
EntityManager::Instance()->SerializeEntity(m_OwningEntity);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
void SwitchComponent::EntityLeave(Entity* entity) {
|
|
|
|
}
|
|
|
|
void SwitchComponent::Update(float deltaTime) {
|
|
if (m_Active) {
|
|
m_Timer -= deltaTime;
|
|
|
|
if (m_Timer <= 0.0f) {
|
|
m_Active = false;
|
|
if (!m_OwningEntity) return;
|
|
m_OwningEntity->TriggerEvent(eTriggerEventType::DEACTIVATED, m_OwningEntity);
|
|
|
|
const auto grpName = m_OwningEntity->GetVarAsString(u"grp_name");
|
|
|
|
if (!grpName.empty()) {
|
|
const auto entities = EntityManager::Instance()->GetEntitiesInGroup(grpName);
|
|
|
|
for (auto* entity : entities) {
|
|
entity->OnFireEventServerSide(entity, "OnDectivated");
|
|
}
|
|
}
|
|
|
|
if (m_PetBouncer != nullptr) {
|
|
m_PetBouncer->SetPetBouncerEnabled(false);
|
|
} else {
|
|
EntityManager::Instance()->SerializeEntity(m_OwningEntity);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Entity* SwitchComponent::GetParentEntity() const {
|
|
return m_OwningEntity;
|
|
}
|
|
|
|
SwitchComponent* SwitchComponent::GetClosestSwitch(NiPoint3 position) {
|
|
float closestDistance = 0;
|
|
SwitchComponent* closest = nullptr;
|
|
|
|
for (SwitchComponent* petSwitch : petSwitches) {
|
|
float distance = Vector3::DistanceSquared(petSwitch->m_OwningEntity->GetPosition(), position);
|
|
|
|
if (closest == nullptr || distance < closestDistance) {
|
|
closestDistance = distance;
|
|
closest = petSwitch;
|
|
}
|
|
}
|
|
|
|
return closest;
|
|
}
|
|
|
|
|
|
void SwitchComponent::SetPetBouncer(BouncerComponent* value) {
|
|
m_PetBouncer = value;
|
|
|
|
if (value != nullptr) {
|
|
m_PetBouncer->SetPetEnabled(true);
|
|
petSwitches.push_back(this);
|
|
}
|
|
}
|
|
|
|
BouncerComponent* SwitchComponent::GetPetBouncer() const {
|
|
return m_PetBouncer;
|
|
}
|