| Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members |
#include <ISceneManager.h>
Inheritance diagram for irr::scene::ISceneManager:

Public Member Functions | |
| virtual IAnimatedMeshSceneNode * | addAnimatedMeshSceneNode (IAnimatedMesh *mesh, ISceneNode *parent=0, s32 id=-1, const core::vector3df &position=core::vector3df(0, 0, 0), const core::vector3df &rotation=core::vector3df(0, 0, 0), const core::vector3df &scale=core::vector3df(1.0f, 1.0f, 1.0f), bool alsoAddIfMeshPointerZero=false)=0 |
| Adds a scene node for rendering an animated mesh model. | |
| virtual IAnimatedMesh * | addArrowMesh (const c8 *name, video::SColor vtxColor0=0xFFFFFFFF, video::SColor vtxColor1=0xFFFFFFFF, u32 tesselationCylinder=4, u32 tesselationCone=8, f32 height=1.f, f32 cylinderHeight=0.6f, f32 width0=0.05f, f32 width1=0.3f)=0 |
| add a static arrow mesh to the meshpool | |
| virtual IBillboardSceneNode * | addBillboardSceneNode (ISceneNode *parent=0, const core::dimension2d< f32 > &size=core::dimension2d< f32 >(10.0f, 10.0f), const core::vector3df &position=core::vector3df(0, 0, 0), s32 id=-1, video::SColor shade_top=0xFFFFFFFF, video::SColor shade_down=0xFFFFFFFF)=0 |
| Adds a billboard scene node to the scene graph. | |
| virtual ITextSceneNode * | addBillboardTextSceneNode (gui::IGUIFont *font, const wchar_t *text, ISceneNode *parent=0, const core::dimension2d< f32 > &size=core::dimension2d< f32 >(10.0f, 10.0f), const core::vector3df &position=core::vector3df(0, 0, 0), s32 id=-1, video::SColor shade_top=0xFFFFFFFF, video::SColor shade_down=0xFFFFFFFF)=0 |
| Adds a text scene node, which uses billboards. | |
| virtual ICameraSceneNode * | addCameraSceneNode (ISceneNode *parent=0, const core::vector3df &position=core::vector3df(0, 0, 0), const core::vector3df &lookat=core::vector3df(0, 0, 100), s32 id=-1)=0 |
| Adds a camera scene node to the scene graph and sets it as active camera. | |
| virtual ICameraSceneNode * | addCameraSceneNodeFPS (ISceneNode *parent=0, f32 rotateSpeed=100.0f, f32 moveSpeed=500.0f, s32 id=-1, SKeyMap *keyMapArray=0, s32 keyMapSize=0, bool noVerticalMovement=false, f32 jumpSpeed=0.f)=0 |
| Adds a camera scene node which is able to be controlled with the mouse and keys like in most first person shooters (FPS). | |
| virtual ICameraSceneNode * | addCameraSceneNodeMaya (ISceneNode *parent=0, f32 rotateSpeed=-1500.0f, f32 zoomSpeed=200.0f, f32 translationSpeed=1500.0f, s32 id=-1)=0 |
| Adds a maya style user controlled camera scene node to the scene graph. | |
| virtual ISceneNode * | addCubeSceneNode (f32 size=10.0f, ISceneNode *parent=0, s32 id=-1, const core::vector3df &position=core::vector3df(0, 0, 0), const core::vector3df &rotation=core::vector3df(0, 0, 0), const core::vector3df &scale=core::vector3df(1.0f, 1.0f, 1.0f))=0 |
| Adds a test scene node for test purposes to the scene. | |
| virtual IDummyTransformationSceneNode * | addDummyTransformationSceneNode (ISceneNode *parent=0, s32 id=-1)=0 |
| Adds a dummy transformation scene node to the scene graph. | |
| virtual ISceneNode * | addEmptySceneNode (ISceneNode *parent=0, s32 id=-1)=0 |
| Adds an empty scene node to the scene graph. | |
| virtual void | addExternalMeshLoader (IMeshLoader *externalLoader)=0 |
| Adds an external mesh loader for extending the engine with new file formats. | |
| virtual IAnimatedMesh * | addHillPlaneMesh (const c8 *name, const core::dimension2d< f32 > &tileSize, const core::dimension2d< u32 > &tileCount, video::SMaterial *material=0, f32 hillHeight=0.0f, const core::dimension2d< f32 > &countHills=core::dimension2d< f32 >(0.0f, 0.0f), const core::dimension2d< f32 > &textureRepeatCount=core::dimension2d< f32 >(1.0f, 1.0f))=0 |
| Adds a Hill Plane mesh to the mesh pool. | |
| virtual ILightSceneNode * | addLightSceneNode (ISceneNode *parent=0, const core::vector3df &position=core::vector3df(0, 0, 0), video::SColorf color=video::SColorf(1.0f, 1.0f, 1.0f), f32 radius=100.0f, s32 id=-1)=0 |
| Adds a dynamic light scene node to the scene graph. | |
| virtual IMeshSceneNode * | addMeshSceneNode (IMesh *mesh, ISceneNode *parent=0, s32 id=-1, const core::vector3df &position=core::vector3df(0, 0, 0), const core::vector3df &rotation=core::vector3df(0, 0, 0), const core::vector3df &scale=core::vector3df(1.0f, 1.0f, 1.0f), bool alsoAddIfMeshPointerZero=false)=0 |
| Adds a scene node for rendering a static mesh. | |
| virtual ISceneNode * | addOctTreeSceneNode (IMesh *mesh, ISceneNode *parent=0, s32 id=-1, s32 minimalPolysPerNode=256, bool alsoAddIfMeshPointerZero=false)=0 |
| Adds a scene node for rendering using a octtree to the scene graph. | |
| virtual ISceneNode * | addOctTreeSceneNode (IAnimatedMesh *mesh, ISceneNode *parent=0, s32 id=-1, s32 minimalPolysPerNode=256, bool alsoAddIfMeshPointerZero=false)=0 |
| Adds a scene node for rendering using a octtree to the scene graph. | |
| virtual IParticleSystemSceneNode * | addParticleSystemSceneNode (bool withDefaultEmitter=true, ISceneNode *parent=0, s32 id=-1, const core::vector3df &position=core::vector3df(0, 0, 0), const core::vector3df &rotation=core::vector3df(0, 0, 0), const core::vector3df &scale=core::vector3df(1.0f, 1.0f, 1.0f))=0 |
| Adds a particle system scene node to the scene graph. | |
| virtual ISceneNode * | addQuake3SceneNode (IMeshBuffer *meshBuffer, const quake3::SShader *shader, ISceneNode *parent=0, s32 id=-1)=0 |
| Adds a quake3 scene node to the scene graph. | |
| virtual ISceneNode * | addSceneNode (const char *sceneNodeTypeName, ISceneNode *parent)=0 |
| Adds a scene node to the scene by name. | |
| virtual ISceneNode * | addSkyBoxSceneNode (video::ITexture *top, video::ITexture *bottom, video::ITexture *left, video::ITexture *right, video::ITexture *front, video::ITexture *back, ISceneNode *parent=0, s32 id=-1)=0 |
| Adds a skybox scene node to the scene graph. | |
| virtual ISceneNode * | addSkyDomeSceneNode (video::ITexture *texture, u32 horiRes, u32 vertRes, f64 texturePercentage, f64 spherePercentage, ISceneNode *parent=0, s32 id=-1)=0 |
| Adds a skydome scene node to the scene graph. | |
| virtual IAnimatedMesh * | addSphereMesh (const c8 *name, f32 radius=5.f, u32 polyCountX=16, u32 polyCountY=16)=0 |
| add a static sphere mesh to the meshpool | |
| virtual ISceneNode * | addSphereSceneNode (f32 radius=5.0f, s32 polyCount=16, ISceneNode *parent=0, s32 id=-1, const core::vector3df &position=core::vector3df(0, 0, 0), const core::vector3df &rotation=core::vector3df(0, 0, 0), const core::vector3df &scale=core::vector3df(1.0f, 1.0f, 1.0f))=0 |
| Adds a sphere scene node for test purposes to the scene. | |
| virtual IAnimatedMesh * | addTerrainMesh (const c8 *meshname, video::IImage *texture, video::IImage *heightmap, const core::dimension2d< f32 > &stretchSize=core::dimension2d< f32 >(10.0f, 10.0f), f32 maxHeight=200.0f, const core::dimension2d< s32 > &defaultVertexBlockSize=core::dimension2d< s32 >(64, 64))=0 |
| Adds a static terrain mesh to the mesh pool. | |
| virtual ITerrainSceneNode * | addTerrainSceneNode (io::IReadFile *heightMapFile, ISceneNode *parent=0, s32 id=-1, const core::vector3df &position=core::vector3df(0.0f, 0.0f, 0.0f), const core::vector3df &rotation=core::vector3df(0.0f, 0.0f, 0.0f), const core::vector3df &scale=core::vector3df(1.0f, 1.0f, 1.0f), video::SColor vertexColor=video::SColor(255, 255, 255, 255), s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0, bool addAlsoIfHeightmapEmpty=false)=0 |
| Adds a terrain scene node to the scene graph. | |
| virtual ITerrainSceneNode * | addTerrainSceneNode (const c8 *heightMapFileName, ISceneNode *parent=0, s32 id=-1, const core::vector3df &position=core::vector3df(0.0f, 0.0f, 0.0f), const core::vector3df &rotation=core::vector3df(0.0f, 0.0f, 0.0f), const core::vector3df &scale=core::vector3df(1.0f, 1.0f, 1.0f), video::SColor vertexColor=video::SColor(255, 255, 255, 255), s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0, bool addAlsoIfHeightmapEmpty=false)=0 |
| Adds a terrain scene node to the scene graph. | |
| virtual ITextSceneNode * | addTextSceneNode (gui::IGUIFont *font, const wchar_t *text, video::SColor color=video::SColor(100, 255, 255, 255), ISceneNode *parent=0, const core::vector3df &position=core::vector3df(0, 0, 0), s32 id=-1)=0 |
| Adds a text scene node, which is able to display 2d text at a position in three dimensional space. | |
| virtual void | addToDeletionQueue (ISceneNode *node)=0 |
| Adds a scene node to the deletion queue. | |
| virtual ISceneNode * | addWaterSurfaceSceneNode (IMesh *mesh, f32 waveHeight=2.0f, f32 waveSpeed=300.0f, f32 waveLength=10.0f, ISceneNode *parent=0, s32 id=-1, const core::vector3df &position=core::vector3df(0, 0, 0), const core::vector3df &rotation=core::vector3df(0, 0, 0), const core::vector3df &scale=core::vector3df(1.0f, 1.0f, 1.0f))=0 |
| Adds a scene node for rendering a animated water surface mesh. | |
| virtual void | clear ()=0 |
| Clears the whole scene. | |
| virtual ISceneNodeAnimatorCollisionResponse * | createCollisionResponseAnimator (ITriangleSelector *world, ISceneNode *sceneNode, const core::vector3df &ellipsoidRadius=core::vector3df(30, 60, 30), const core::vector3df &gravityPerSecond=core::vector3df(0,-100.0f, 0), const core::vector3df &ellipsoidTranslation=core::vector3df(0, 0, 0), f32 slidingValue=0.0005f)=0 |
| Creates a special scene node animator for doing automatic collision detection and response. | |
| virtual ISceneNodeAnimator * | createDeleteAnimator (u32 timeMs)=0 |
| Creates a scene node animator, which deletes the scene node after some time automatically. | |
| virtual ISceneNodeAnimator * | createFlyCircleAnimator (const core::vector3df ¢er, f32 radius, f32 speed=0.001f, const core::vector3df &direction=core::vector3df(0.f, 1.f, 0.f))=0 |
| Creates a fly circle animator, which lets the attached scene node fly around a center. | |
| virtual ISceneNodeAnimator * | createFlyStraightAnimator (const core::vector3df &startPoint, const core::vector3df &endPoint, u32 timeForWay, bool loop=false)=0 |
| Creates a fly straight animator, which lets the attached scene node fly or move along a line between two points. | |
| virtual ISceneNodeAnimator * | createFollowSplineAnimator (s32 startTime, const core::array< core::vector3df > &points, f32 speed=1.0f, f32 tightness=0.5f)=0 |
| Creates a follow spline animator. | |
| virtual IMeshWriter * | createMeshWriter (EMESH_WRITER_TYPE type)=0 |
| Returns a mesh writer implementation if available. | |
| virtual IMetaTriangleSelector * | createMetaTriangleSelector ()=0 |
| Creates a meta triangle selector. | |
| virtual ISceneManager * | createNewSceneManager (bool cloneContent=false)=0 |
| Creates a new scene manager. | |
| virtual ITriangleSelector * | createOctTreeTriangleSelector (IMesh *mesh, ISceneNode *node, s32 minimalPolysPerNode=32)=0 |
| Creates a Triangle Selector, optimized by an octtree. | |
| virtual ISceneNodeAnimator * | createRotationAnimator (const core::vector3df &rotationPerSecond)=0 |
| Creates a rotation animator, which rotates the attached scene node around itself. | |
| virtual ITriangleSelector * | createTerrainTriangleSelector (ITerrainSceneNode *node, s32 LOD=0)=0 |
| Creates a triangle selector which can select triangles from a terrain scene node. | |
| virtual ISceneNodeAnimator * | createTextureAnimator (const core::array< video::ITexture * > &textures, s32 timePerFrame, bool loop=true)=0 |
| Creates a texture animator, which switches the textures of the target scene node based on a list of textures. | |
| virtual ITriangleSelector * | createTriangleSelector (IMesh *mesh, ISceneNode *node)=0 |
| Creates a simple ITriangleSelector, based on a mesh. | |
| virtual ITriangleSelector * | createTriangleSelectorFromBoundingBox (ISceneNode *node)=0 |
| Creates a simple dynamic ITriangleSelector, based on a axis aligned bounding box. | |
| virtual void | drawAll ()=0 |
| Draws all the scene nodes. | |
| virtual ICameraSceneNode * | getActiveCamera ()=0 |
| Returns the current active camera. | |
| virtual const video::SColorf & | getAmbientLight () const =0 |
| Returns ambient color of the scene. | |
| virtual ISceneNodeAnimatorFactory * | getDefaultSceneNodeAnimatorFactory ()=0 |
| Returns the default scene node animator factory which can create all built-in scene node animators. | |
| virtual ISceneNodeFactory * | getDefaultSceneNodeFactory ()=0 |
| Returns the default scene node factory which can create all built in scene nodes. | |
| virtual gui::IGUIEnvironment * | getGUIEnvironment ()=0 |
| Returns the active GUIEnvironment. | |
| virtual IAnimatedMesh * | getMesh (const c8 *filename)=0 |
| Returns pointer to an animateable mesh. Loads the file if not loaded already. | |
| virtual IMeshCache * | getMeshCache ()=0 |
| Returns an interface to the mesh cache which is shared beween all existing scene managers. | |
| virtual IMeshManipulator * | getMeshManipulator ()=0 |
| Returns a pointer to the mesh manipulator. | |
| virtual io::IAttributes * | getParameters ()=0 |
| Returns interface to the parameters set in this scene. | |
| virtual u32 | getRegisteredSceneNodeAnimatorFactoryCount () const =0 |
| Returns amount of registered scene node animator factories. | |
| virtual u32 | getRegisteredSceneNodeFactoryCount () const =0 |
| Returns amount of registered scene node factories. | |
| virtual ISceneNode * | getRootSceneNode ()=0 |
| Returns the root scene node. | |
| virtual ISceneCollisionManager * | getSceneCollisionManager ()=0 |
| Returns a pointer to the scene collision manager. | |
| virtual ISceneNodeAnimatorFactory * | getSceneNodeAnimatorFactory (u32 index)=0 |
| Returns a scene node animator factory by index. | |
| virtual ISceneNodeFactory * | getSceneNodeFactory (u32 index)=0 |
| Returns a scene node factory by index. | |
| virtual ISceneNode * | getSceneNodeFromId (s32 id, ISceneNode *start=0)=0 |
| Returns the first scene node with the specified id. | |
| virtual ISceneNode * | getSceneNodeFromName (const c8 *name, ISceneNode *start=0)=0 |
| Returns the first scene node with the specified name. | |
| virtual ISceneNode * | getSceneNodeFromType (scene::ESCENE_NODE_TYPE type, ISceneNode *start=0)=0 |
| Returns the first scene node with the specified type. | |
| virtual E_SCENE_NODE_RENDER_PASS | getSceneNodeRenderPass () const =0 |
| Returns current render pass. | |
| virtual void | getSceneNodesFromType (ESCENE_NODE_TYPE type, core::array< scene::ISceneNode * > &outNodes, ISceneNode *start=0)=0 |
| returns scene nodes by type. | |
| virtual const c8 * | getSceneNodeTypeName (ESCENE_NODE_TYPE type)=0 |
| Returns a typename from a scene node type or null if not found. | |
| virtual video::SColor | getShadowColor () const =0 |
| Returns the current color of shadows. | |
| virtual video::IVideoDriver * | getVideoDriver ()=0 |
| Returns the video driver. | |
| virtual bool | loadScene (io::IReadFile *file, ISceneUserDataSerializer *userDataSerializer=0)=0 |
| Loads a scene. Note that the current scene is not cleared before. | |
| virtual bool | loadScene (const c8 *filename, ISceneUserDataSerializer *userDataSerializer=0)=0 |
| Loads a scene. Note that the current scene is not cleared before. | |
| virtual bool | postEventFromUser (const SEvent &event)=0 |
| Posts an input event to the environment. | |
| virtual u32 | registerNodeForRendering (ISceneNode *node, E_SCENE_NODE_RENDER_PASS pass=ESNRP_AUTOMATIC)=0 |
| Registers a node for rendering it at a specific time. | |
| virtual void | registerSceneNodeAnimatorFactory (ISceneNodeAnimatorFactory *factoryToAdd)=0 |
| Adds a scene node animator factory to the scene manager. | |
| virtual void | registerSceneNodeFactory (ISceneNodeFactory *factoryToAdd)=0 |
| Adds a scene node factory to the scene manager. | |
| virtual bool | saveScene (io::IWriteFile *file, ISceneUserDataSerializer *userDataSerializer=0)=0 |
| Saves the current scene into a file. | |
| virtual bool | saveScene (const c8 *filename, ISceneUserDataSerializer *userDataSerializer=0)=0 |
| Saves the current scene into a file. | |
| virtual void | setActiveCamera (ICameraSceneNode *camera)=0 |
| Sets the currently active camera. | |
| virtual void | setAmbientLight (const video::SColorf &ambientColor)=0 |
| Sets ambient color of the scene. | |
| virtual void | setShadowColor (video::SColor color=video::SColor(150, 0, 0, 0))=0 |
| Sets the color of stencil buffers shadows drawn by the scene manager. | |
| virtual | ~ISceneManager () |
| destructor | |
All Scene nodes can be created only here. There is a always growing list of scene nodes for lots of purposes: Indoor rendering scene nodes like the Octree (addOctTreeSceneNode()) or the terrain renderer (addTerrainSceneNode()), different Camera scene nodes (addCameraSceneNode(), addCameraSceneNodeMaya()), scene nodes for Light (addLightSceneNode()), Billboards (addBillboardSceneNode()) and so on. A scene node is a node in the hierachical scene graph. Every scene node may have children, which are other scene nodes. Children move relative the their parents position. If the parent of a node is not visible, its children won't be visible, too. In this way, it is for example easily possible to attach a light to a moving car or to place a walking character on a moving platform on a moving ship. The SceneManager is also able to load 3d mesh files of different formats. Take a look at getMesh() to find out what formats are supported. And if these formats are not enough use addExternalMeshLoader() to add new formats to the engine.
Definition at line 148 of file ISceneManager.h.
|
|
destructor
Definition at line 153 of file ISceneManager.h. |
|
||||||||||||||||||||||||||||||||
|
Adds a scene node for rendering an animated mesh model.
|
|
||||||||||||||||||||||||||||||||||||||||
|
add a static arrow mesh to the meshpool
|
|
||||||||||||||||||||||||||||
|
Adds a billboard scene node to the scene graph. A billboard is like a 3d sprite: A 2d element, which always looks to the camera. It is usually used for things like explosions, fire, lensflares and things like that.
|
|
||||||||||||||||||||||||||||||||||||
|
Adds a text scene node, which uses billboards.
|
|
||||||||||||||||||||
|
Adds a camera scene node to the scene graph and sets it as active camera. This camera does not react on user input like for example the one created with addCameraSceneNodeFPS(). If you want to move or animate it, use animators or the ISceneNode::setPosition(), ICameraSceneNode::setTarget() etc methods.
|
|
||||||||||||||||||||||||||||||||||||
|
Adds a camera scene node which is able to be controlled with the mouse and keys like in most first person shooters (FPS). Look with the mouse, move with cursor keys. If you do not like the default key layout, you may want to specify your own. For example to make the camera be controlled by the cursor keys AND the keys W,A,S, and D, do something like this: SKeyMap keyMap[8];
keyMap[0].Action = EKA_MOVE_FORWARD;
keyMap[0].KeyCode = KEY_UP;
keyMap[1].Action = EKA_MOVE_FORWARD;
keyMap[1].KeyCode = KEY_KEY_W;
keyMap[2].Action = EKA_MOVE_BACKWARD;
keyMap[2].KeyCode = KEY_DOWN;
keyMap[3].Action = EKA_MOVE_BACKWARD;
keyMap[3].KeyCode = KEY_KEY_S;
keyMap[4].Action = EKA_STRAFE_LEFT;
keyMap[4].KeyCode = KEY_LEFT;
keyMap[5].Action = EKA_STRAFE_LEFT;
keyMap[5].KeyCode = KEY_KEY_A;
keyMap[6].Action = EKA_STRAFE_RIGHT;
keyMap[6].KeyCode = KEY_RIGHT;
keyMap[7].Action = EKA_STRAFE_RIGHT;
keyMap[7].KeyCode = KEY_KEY_D;
camera = sceneManager->addCameraSceneNodeFPS(0, 100, 500, -1, keyMap, 8);
|
|
||||||||||||||||||||||||
|
Adds a maya style user controlled camera scene node to the scene graph. The maya camera is able to be controlled with the mouse similar like in the 3D Software Maya by Alias Wavefront.
|
|
||||||||||||||||||||||||||||
|
Adds a test scene node for test purposes to the scene. It is a simple cube of (1,1,1) size.
|
|
||||||||||||
|
Adds a dummy transformation scene node to the scene graph. This scene node does not render itself, and does not respond to set/getPosition, set/getRotation and set/getScale. Its just a simple scene node that takes a matrix as relative transformation, making it possible to insert any transformation anywhere into the scene graph.
|
|
||||||||||||
|
Adds an empty scene node to the scene graph. Can be used for doing advanced transformations or structuring the scene graph.
|
|
|
Adds an external mesh loader for extending the engine with new file formats. If you want the engine to be extended with file formats it currently is not able to load (e.g. .cob), just implement the IMeshLoader interface in your loading class and add it with this method. Using this method it is also possible to override built-in mesh loaders with newer or updated versions without the need of recompiling the engine.
|
|
||||||||||||||||||||||||||||||||
|
Adds a Hill Plane mesh to the mesh pool. The mesh is generated on the fly and looks like a plane with some hills on it. It is uses mostly for quick tests of the engine only. You can specify how many hills there should be on the plane and how high they should be. Also you must specify a name for the mesh, because the mesh is added to the mesh pool, and can be retrieved again using ISceneManager::getMesh() with the name as parameter.
|
|
||||||||||||||||||||||||
|
Adds a dynamic light scene node to the scene graph. The light will cast dynamic light on all other scene nodes in the scene, which have the material flag video::MTF_LIGHTING turned on. (This is the default setting in most scene nodes).
|
|
||||||||||||||||||||||||||||||||
|
Adds a scene node for rendering a static mesh.
|
|
||||||||||||||||||||||||
|
Adds a scene node for rendering using a octtree to the scene graph. This a good method for rendering scenes with lots of geometry. The Octree is built on the fly from the mesh, much faster then a bsp tree.
|
|
||||||||||||||||||||||||
|
Adds a scene node for rendering using a octtree to the scene graph. This a good method for rendering scenes with lots of geometry. The Octree is built on the fly from the mesh.
|
|
||||||||||||||||||||||||||||
|
Adds a particle system scene node to the scene graph.
|
|
||||||||||||||||||||
|
Adds a quake3 scene node to the scene graph. A Quake3 Scene renders multiple meshes for a specific HighLanguage Shader (Quake3 Style )
|
|
||||||||||||
|
Adds a scene node to the scene by name.
|
|