// // Created by Adniklastrator on 2015-10-20. // #ifndef DAYDREAM_WATERSYSTEM_H #define DAYDREAM_WATERSYSTEM_H #include "Core/System.h" #include "Core/CTransform.h" #include "Core/CTemplate.h" #include "Core/EventBroker.h" #include "Core/World.h" #include "Core/ConfigFile.h" #include "Transform/EMove.h" #include "Physics/CPhysics.h" #include "Physics/CWaterVolume.h" #include "Physics/CRectangleShape.h" #include "Game/CBrickPart.h" #include "Game/CNewWaterVolume.h" #include "Game/EPause.h" #include "Game/EResume.h" #include "Game/ERelevantObjectCreated.h" #include "Game/ERaiseWater.h" #include "Game/ERaiseWaterWall.h" #include "Game/EArrivedAtNewStage.h" #include "Game/EStageCleared.h" namespace dd { namespace Systems { class WaterSystem : public System { public: WaterSystem(World* world, std::shared_ptr eventBroker) : System(world, eventBroker) { } void Initialize() override; void Update(double dt) override; void UpdateEntity(double dt, EntityID entity, EntityID parent) override; bool IsPaused() const { return m_Pause; } void SetPause(const bool& pause) { m_Pause = pause; } private: bool m_Pause = false; EntityID m_BottomWall = 0; float m_SubmergedOriginalHeight = -4.5; float m_SubmergedHeight = m_SubmergedOriginalHeight; bool m_RaiseWater = false; bool m_RemoveWater = false; std::array m_BrickPartCounters; dd::EventRelay m_EPause; dd::EventRelay m_EResume; dd::EventRelay m_ERelevantObjectCreated; dd::EventRelay m_EStageCleared; dd::EventRelay m_EArrivedAtNewStage; dd::EventRelay m_ERaiseWater; dd::EventRelay m_ERaiseWaterWall; bool OnPause(const dd::Events::Pause &event); bool OnResume(const dd::Events::Resume &event); bool OnRelevantObjectCreated(const dd::Events::RelevantObjectCreated &event); bool OnStageCleared(const dd::Events::StageCleared &event); bool OnArrivedAtNewStage(const dd::Events::ArrivedAtNewStage &event); bool OnRaiseWater(const dd::Events::RaiseWater &event); bool OnRaiseWaterWall(const dd::Events::RaiseWaterWall &event); }; } } #endif //DAYDREAM_WATERSYSTEM_H