diff --git a/dGame/dComponents/LUPExhibitComponent.cpp b/dGame/dComponents/LUPExhibitComponent.cpp index 151f28977..a312617d3 100644 --- a/dGame/dComponents/LUPExhibitComponent.cpp +++ b/dGame/dComponents/LUPExhibitComponent.cpp @@ -1,44 +1,24 @@ #include "LUPExhibitComponent.h" - #include "EntityManager.h" -LUPExhibitComponent::LUPExhibitComponent(Entity* parent) : Component(parent) { - m_Exhibits = { 11121, 11295, 11423, 11979 }; - - m_ExhibitIndex = 0; - - m_Exhibit = m_Exhibits[m_ExhibitIndex]; - - -} - -LUPExhibitComponent::~LUPExhibitComponent() { - -} - void LUPExhibitComponent::Update(float deltaTime) { m_UpdateTimer += deltaTime; - if (m_UpdateTimer > 20.0f) { - NextExhibit(); - + NextLUPExhibit(); m_UpdateTimer = 0.0f; } } -void LUPExhibitComponent::NextExhibit() { - m_ExhibitIndex++; - - if (m_ExhibitIndex >= m_Exhibits.size()) { - m_ExhibitIndex = 0; - } - - m_Exhibit = m_Exhibits[m_ExhibitIndex]; - +void LUPExhibitComponent::NextLUPExhibit() { + m_LUPExhibitIndex++; + m_DirtyLUPExhibit = true; Game::entityManager->SerializeEntity(m_Parent); } void LUPExhibitComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) { - outBitStream->Write1(); // Dirty flag? - outBitStream->Write(m_Exhibit); + outBitStream->Write(m_DirtyLUPExhibit); + if (m_DirtyLUPExhibit) { + outBitStream->Write(m_LUPExhibits[m_LUPExhibitIndex % m_LUPExhibits.size()]); + if (!bIsInitialUpdate) m_DirtyLUPExhibit = false; + } } diff --git a/dGame/dComponents/LUPExhibitComponent.h b/dGame/dComponents/LUPExhibitComponent.h index 646d361c9..47b13a177 100644 --- a/dGame/dComponents/LUPExhibitComponent.h +++ b/dGame/dComponents/LUPExhibitComponent.h @@ -3,6 +3,9 @@ #include "Component.h" #include "Entity.h" #include "eReplicaComponentType.h" +#include <cstdint> +#include <array> +#include "dCommonVars.h" /** * Component that handles the LOT that is shown in the LUP exhibit in the LUP world. Works by setting a timer and @@ -11,35 +14,15 @@ class LUPExhibitComponent : public Component { public: - inline static const eReplicaComponentType ComponentType = eReplicaComponentType::EXHIBIT; + inline static const eReplicaComponentType ComponentType = eReplicaComponentType::LUP_EXHIBIT; - LUPExhibitComponent(Entity* parent); - ~LUPExhibitComponent(); + LUPExhibitComponent(Entity* parent) : Component(parent) {}; void Update(float deltaTime) override; void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override; - - /** - * After the timer runs out, this changes the currently exhibited LOT to the next one - */ - void NextExhibit(); + void NextLUPExhibit(); private: - /** - * The LOT that's currently on exhibit - */ - LOT m_Exhibit; - - /** - * The time since we've last updated the exhibit - */ - float m_UpdateTimer; - - /** - * The list of possible exhibits to show - */ - std::vector<LOT> m_Exhibits; - - /** - * The current index in the exhibit list - */ - size_t m_ExhibitIndex; + float m_UpdateTimer = 0.0f; + std::array<LOT, 4> m_LUPExhibits = { 11121, 11295, 11423, 11979 }; + uint8_t m_LUPExhibitIndex = 0; + bool m_DirtyLUPExhibit = true; };