#pragma once #include #include #include #include "cameraviewposition.h" #include namespace VCtrl { class OrthoMotionModelComponent final : public dtEntity::Component , public dtEntity::InputCallbackInterface { public: static const dtEntity::ComponentType TYPE; static const dtEntity::StringId ContextIdId; static const dtEntity::StringId EnabledId; OrthoMotionModelComponent(); dtEntity::ComponentType GetType() const override { return TYPE; } virtual bool IsInstanceOf(dtEntity::ComponentType id) const { return (id == TYPE); } void OnAddedToEntity(dtEntity::Entity &entity) override; void OnRemovedFromEntity(dtEntity::Entity &entity) override; void Finished() override; void Tick(float dt); unsigned int GetContextId() const { return mContextId.Get(); } void SetContextId(unsigned int i) { mContextId.Set(i); } bool MouseButtonUp(int button, bool handled, unsigned int contextid) override; bool MouseButtonDown(int button, bool handled, unsigned int contextid) override; bool MouseWheel(int dir, bool handled, unsigned int contextid) override; bool MouseMove(float x, float y, bool handled, unsigned int contextid) override; void MouseEnterLeave(bool, unsigned int) override {} void performZoom(int dir, const osg::Vec2& zoompoint); dtEntityOSG::CameraComponent *GetCamera() const { return mCamera; } // First parameter: contextID as returned by OrthoMotionModelComponent::GetContextId std::function m_callbackCamPosChanged; private: bool m_mouseMovedWhileLeftButtonPressed; dtEntity::IntProperty mContextId; dtEntity::BoolProperty mEnabled; dtEntityOSG::CameraComponent *mCamera = nullptr; dtEntity::Entity *mEntity = nullptr; }; //////////////////////////////////////////////////////////////////////////////// class OrthoMotionModelSystem final : public dtEntity::DefaultEntitySystem { using BaseClass = dtEntity::DefaultEntitySystem; public: static const dtEntity::ComponentType TYPE; explicit OrthoMotionModelSystem(dtEntity::EntityManager &em); void OnRemoveFromEntityManager(dtEntity::EntityManager &) override; private: void Tick(const dtEntity::Message &m); dtEntity::MessageFunctor mTickFunctor; }; }