#ifndef SCENENODE_H #define SCENENODE_H #include "command.h" #include #include #include class SceneNode; using SceneNodeUPtr = std::unique_ptr; using SceneNodeSPtr = std::shared_ptr; using SceneNodeConstSPtr = std::shared_ptr; class SceneNode : public std::enable_shared_from_this, public sf::Transformable, public sf::Drawable, private sf::NonCopyable { public: explicit SceneNode(); virtual ~SceneNode(); bool attachChild(const SceneNodeSPtr &child); SceneNodeSPtr detachChild(const SceneNode& node); sf::Transform getWorldTransform() const; sf::Vector2f getWorldPosition() const; void update(const sf::Time& dt); void onCommand(const Command& command, const sf::Time& dt); virtual Category::Type category() const; private: std::vector vec_children; SceneNodeSPtr parent; virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const override final; virtual void drawCurrent(sf::RenderTarget& target, sf::RenderStates states) const; virtual void updateCurrent(const sf::Time& dt); void updateChildren(const sf::Time& dt); }; #endif // SCENENODE_H