mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-04-26 08:36:30 +00:00
fix: Player activated switches (#1655)
This commit is contained in:
parent
ec501831e6
commit
9e7ef8c4ee
@ -1351,11 +1351,6 @@ void Entity::OnCollisionPhantom(const LWOOBJID otherEntity) {
|
|||||||
callback(other);
|
callback(other);
|
||||||
}
|
}
|
||||||
|
|
||||||
SwitchComponent* switchComp = GetComponent<SwitchComponent>();
|
|
||||||
if (switchComp) {
|
|
||||||
switchComp->EntityEnter(other);
|
|
||||||
}
|
|
||||||
|
|
||||||
TriggerEvent(eTriggerEventType::ENTER, other);
|
TriggerEvent(eTriggerEventType::ENTER, other);
|
||||||
|
|
||||||
// POI system
|
// POI system
|
||||||
|
@ -381,7 +381,7 @@ void PetComponent::Update(float deltaTime) {
|
|||||||
float distance = Vector3::DistanceSquared(position, switchPosition);
|
float distance = Vector3::DistanceSquared(position, switchPosition);
|
||||||
if (distance < 3 * 3) {
|
if (distance < 3 * 3) {
|
||||||
m_Interaction = closestSwitch->GetParentEntity()->GetObjectID();
|
m_Interaction = closestSwitch->GetParentEntity()->GetObjectID();
|
||||||
closestSwitch->EntityEnter(m_Parent);
|
closestSwitch->OnUse(m_Parent);
|
||||||
} else if (distance < 20 * 20) {
|
} else if (distance < 20 * 20) {
|
||||||
haltDistance = 1;
|
haltDistance = 1;
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "EntityManager.h"
|
#include "EntityManager.h"
|
||||||
#include "eTriggerEventType.h"
|
#include "eTriggerEventType.h"
|
||||||
#include "RenderComponent.h"
|
#include "RenderComponent.h"
|
||||||
|
#include "DestroyableComponent.h"
|
||||||
|
|
||||||
std::vector<SwitchComponent*> SwitchComponent::petSwitches;
|
std::vector<SwitchComponent*> SwitchComponent::petSwitches;
|
||||||
|
|
||||||
@ -11,6 +12,13 @@ SwitchComponent::SwitchComponent(Entity* parent) : Component(parent) {
|
|||||||
m_ResetTime = m_Parent->GetVarAs<int32_t>(u"switch_reset_time");
|
m_ResetTime = m_Parent->GetVarAs<int32_t>(u"switch_reset_time");
|
||||||
|
|
||||||
m_QuickBuild = m_Parent->GetComponent<QuickBuildComponent>();
|
m_QuickBuild = m_Parent->GetComponent<QuickBuildComponent>();
|
||||||
|
|
||||||
|
const auto factions = GeneralUtils::SplitString(m_Parent->GetVar<std::u16string>(u"respond_to_faction"), u':');
|
||||||
|
for (const auto& faction : factions) {
|
||||||
|
auto factionID = GeneralUtils::TryParse<int32_t>(GeneralUtils::UTF16ToWTF8(faction));
|
||||||
|
if (!factionID) continue;
|
||||||
|
m_FactionsToRespondTo.push_back(factionID.value());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SwitchComponent::~SwitchComponent() {
|
SwitchComponent::~SwitchComponent() {
|
||||||
@ -25,6 +33,17 @@ void SwitchComponent::Serialize(RakNet::BitStream& outBitStream, bool bIsInitial
|
|||||||
outBitStream.Write(m_Active);
|
outBitStream.Write(m_Active);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SwitchComponent::OnUse(Entity* originator) {
|
||||||
|
const auto* const destroyableComponent = originator->GetComponent<DestroyableComponent>();
|
||||||
|
if (!destroyableComponent) return;
|
||||||
|
for (const auto faction : m_FactionsToRespondTo) {
|
||||||
|
if (destroyableComponent->HasFaction(faction)) {
|
||||||
|
EntityEnter(originator);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SwitchComponent::SetActive(bool active) {
|
void SwitchComponent::SetActive(bool active) {
|
||||||
m_Active = active;
|
m_Active = active;
|
||||||
|
|
||||||
@ -63,6 +82,7 @@ void SwitchComponent::EntityEnter(Entity* entity) {
|
|||||||
RenderComponent::PlayAnimation(m_Parent, u"engaged");
|
RenderComponent::PlayAnimation(m_Parent, u"engaged");
|
||||||
m_PetBouncer->SetPetBouncerEnabled(true);
|
m_PetBouncer->SetPetBouncerEnabled(true);
|
||||||
} else {
|
} else {
|
||||||
|
GameMessages::SendKnockback(entity->GetObjectID(), m_Parent->GetObjectID(), m_Parent->GetObjectID(), 0.0f, NiPoint3(0.0f, 17.0f, 0.0f));
|
||||||
Game::entityManager->SerializeEntity(m_Parent);
|
Game::entityManager->SerializeEntity(m_Parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ public:
|
|||||||
~SwitchComponent() override;
|
~SwitchComponent() override;
|
||||||
|
|
||||||
void Update(float deltaTime) override;
|
void Update(float deltaTime) override;
|
||||||
|
void OnUse(Entity* originator) override;
|
||||||
|
|
||||||
Entity* GetParentEntity() const;
|
Entity* GetParentEntity() const;
|
||||||
|
|
||||||
@ -101,6 +102,8 @@ private:
|
|||||||
* Attached pet bouncer
|
* Attached pet bouncer
|
||||||
*/
|
*/
|
||||||
BouncerComponent* m_PetBouncer = nullptr;
|
BouncerComponent* m_PetBouncer = nullptr;
|
||||||
|
|
||||||
|
std::vector<int32_t> m_FactionsToRespondTo{};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SWITCHCOMPONENT_H
|
#endif // SWITCHCOMPONENT_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user