1 // Copyright (C) 2002-2012 Nikolaus Gebhardt 2 // This file is part of the "Irrlicht Engine". 3 // For conditions of distribution and use, see copyright notice in irrlicht.h 4 5 #ifndef __C_CUBE_SCENE_NODE_H_INCLUDED__ 6 #define __C_CUBE_SCENE_NODE_H_INCLUDED__ 7 8 #include "IMeshSceneNode.h" 9 #include "SMesh.h" 10 11 namespace irr 12 { 13 namespace scene 14 { 15 class CCubeSceneNode : public IMeshSceneNode 16 { 17 public: 18 19 //! constructor 20 CCubeSceneNode(f32 size, ISceneNode* parent, ISceneManager* mgr, s32 id, 21 const core::vector3df& position = core::vector3df(0,0,0), 22 const core::vector3df& rotation = core::vector3df(0,0,0), 23 const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)); 24 25 virtual ~CCubeSceneNode(); 26 27 virtual void OnRegisterSceneNode(); 28 29 //! renders the node. 30 virtual void render(); 31 32 //! returns the axis aligned bounding box of this node 33 virtual const core::aabbox3d<f32>& getBoundingBox() const; 34 35 //! returns the material based on the zero based index i. To get the amount 36 //! of materials used by this scene node, use getMaterialCount(). 37 //! This function is needed for inserting the node into the scene hirachy on a 38 //! optimal position for minimizing renderstate changes, but can also be used 39 //! to directly modify the material of a scene node. 40 virtual video::SMaterial& getMaterial(u32 i); 41 42 //! returns amount of materials used by this scene node. 43 virtual u32 getMaterialCount() const; 44 45 //! Returns type of the scene node getType()46 virtual ESCENE_NODE_TYPE getType() const { return ESNT_CUBE; } 47 48 //! Creates shadow volume scene node as child of this node 49 //! and returns a pointer to it. 50 virtual IShadowVolumeSceneNode* addShadowVolumeSceneNode(const IMesh* shadowMesh, 51 s32 id, bool zfailmethod=true, f32 infinity=10000.0f); 52 53 //! Writes attributes of the scene node. 54 virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const; 55 56 //! Reads attributes of the scene node. 57 virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0); 58 59 //! Creates a clone of this scene node and its children. 60 virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0); 61 62 //! Sets a new mesh to display setMesh(IMesh * mesh)63 virtual void setMesh(IMesh* mesh) {} 64 65 //! Returns the current mesh getMesh(void)66 virtual IMesh* getMesh(void) { return Mesh; } 67 68 //! Sets if the scene node should not copy the materials of the mesh but use them in a read only style. 69 /* In this way it is possible to change the materials a mesh causing all mesh scene nodes 70 referencing this mesh to change too. */ setReadOnlyMaterials(bool readonly)71 virtual void setReadOnlyMaterials(bool readonly) {} 72 73 //! Returns if the scene node should not copy the materials of the mesh but use them in a read only style isReadOnlyMaterials()74 virtual bool isReadOnlyMaterials() const { return false; } 75 76 //! Removes a child from this scene node. 77 //! Implemented here, to be able to remove the shadow properly, if there is one, 78 //! or to remove attached childs. 79 virtual bool removeChild(ISceneNode* child); 80 81 private: 82 void setSize(); 83 84 IMesh* Mesh; 85 IShadowVolumeSceneNode* Shadow; 86 f32 Size; 87 }; 88 89 } // end namespace scene 90 } // end namespace irr 91 92 #endif 93 94