// Copyright (C) 2014-2015 ChaosForge Ltd // http://chaosforge.org/ // // This file is part of Nova libraries. // For conditions of distribution and use, see copying.txt file in root folder. /** * @file scene_node.hh * @author Kornel Kisielewicz epyon@chaosforge.org * @brief Scene node class */ #ifndef NV_INTERFACE_SCENE_NODE_HH #define NV_INTERFACE_SCENE_NODE_HH #include #include #include #include #include namespace nv { class scene_node { public: typedef vector< scene_node* > list; scene_node() {} virtual void update( uint32 ms ) { for ( auto& child : m_children ) { child->update( ms ); } } virtual void attach( scene_node* child ) { m_children.push_back( child ); } virtual void set_transform( const transform& t ) { m_transform = t; } virtual const transform& get_transform() const { return m_transform; } virtual mat4 extract_transform_matrix() const { return get_transform().extract(); } void set_position( const vec3& p ) { m_transform.set_position( p ); } void set_orientation( const quat& q ) { m_transform.set_orientation( q ); } const vec3& get_position() const { return m_transform.get_position(); } const quat& get_orientation() const { return m_transform.get_orientation(); } list::const_iterator begin() { return m_children.cbegin(); } list::const_iterator end() { return m_children.cend(); } list& children() { return m_children; } virtual ~scene_node() { for ( auto& child : m_children ) delete child; } protected: transform m_transform; list m_children; }; } #endif // NV_INTERFACE_SCENE_NODE_HH