From 393b5cd1dc438872af89d334ef6e5fcc59f27d47 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sun, 13 Jan 2013 17:24:39 +1000 Subject: Added Irrlicht 1.8, but without all the Windows binaries. --- .../doc/html/_i_scene_node_8h_source.html | 777 +++++++++++++++++++++ 1 file changed, 777 insertions(+) create mode 100644 libraries/irrlicht-1.8/doc/html/_i_scene_node_8h_source.html (limited to 'libraries/irrlicht-1.8/doc/html/_i_scene_node_8h_source.html') diff --git a/libraries/irrlicht-1.8/doc/html/_i_scene_node_8h_source.html b/libraries/irrlicht-1.8/doc/html/_i_scene_node_8h_source.html new file mode 100644 index 0000000..b2435b7 --- /dev/null +++ b/libraries/irrlicht-1.8/doc/html/_i_scene_node_8h_source.html @@ -0,0 +1,777 @@ + + + + +Irrlicht 3D Engine: ISceneNode.h Source File + + + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + +
+
Irrlicht 3D Engine + +
+ +
+ + + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+
+
+
ISceneNode.h
+
+
+Go to the documentation of this file.
00001 // Copyright (C) 2002-2012 Nikolaus Gebhardt
+00002 // This file is part of the "Irrlicht Engine".
+00003 // For conditions of distribution and use, see copyright notice in irrlicht.h
+00004 
+00005 #ifndef __I_SCENE_NODE_H_INCLUDED__
+00006 #define __I_SCENE_NODE_H_INCLUDED__
+00007 
+00008 #include "IAttributeExchangingObject.h"
+00009 #include "ESceneNodeTypes.h"
+00010 #include "ECullingTypes.h"
+00011 #include "EDebugSceneTypes.h"
+00012 #include "ISceneNodeAnimator.h"
+00013 #include "ITriangleSelector.h"
+00014 #include "SMaterial.h"
+00015 #include "irrString.h"
+00016 #include "aabbox3d.h"
+00017 #include "matrix4.h"
+00018 #include "irrList.h"
+00019 #include "IAttributes.h"
+00020 
+00021 namespace irr
+00022 {
+00023 namespace scene
+00024 {
+00025     class ISceneManager;
+00026 
+00028     typedef core::list<ISceneNode*> ISceneNodeList;
+00030     typedef core::list<ISceneNodeAnimator*> ISceneNodeAnimatorList;
+00031 
+00033 
+00040     class ISceneNode : virtual public io::IAttributeExchangingObject
+00041     {
+00042     public:
+00043 
+00045         ISceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1,
+00046                 const core::vector3df& position = core::vector3df(0,0,0),
+00047                 const core::vector3df& rotation = core::vector3df(0,0,0),
+00048                 const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
+00049             : RelativeTranslation(position), RelativeRotation(rotation), RelativeScale(scale),
+00050                 Parent(0), SceneManager(mgr), TriangleSelector(0), ID(id),
+00051                 AutomaticCullingState(EAC_BOX), DebugDataVisible(EDS_OFF),
+00052                 IsVisible(true), IsDebugObject(false)
+00053         {
+00054             if (parent)
+00055                 parent->addChild(this);
+00056 
+00057             updateAbsolutePosition();
+00058         }
+00059 
+00060 
+00062         virtual ~ISceneNode()
+00063         {
+00064             // delete all children
+00065             removeAll();
+00066 
+00067             // delete all animators
+00068             ISceneNodeAnimatorList::Iterator ait = Animators.begin();
+00069             for (; ait != Animators.end(); ++ait)
+00070                 (*ait)->drop();
+00071 
+00072             if (TriangleSelector)
+00073                 TriangleSelector->drop();
+00074         }
+00075 
+00076 
+00078 
+00091         virtual void OnRegisterSceneNode()
+00092         {
+00093             if (IsVisible)
+00094             {
+00095                 ISceneNodeList::Iterator it = Children.begin();
+00096                 for (; it != Children.end(); ++it)
+00097                     (*it)->OnRegisterSceneNode();
+00098             }
+00099         }
+00100 
+00101 
+00103 
+00108         virtual void OnAnimate(u32 timeMs)
+00109         {
+00110             if (IsVisible)
+00111             {
+00112                 // animate this node with all animators
+00113 
+00114                 ISceneNodeAnimatorList::Iterator ait = Animators.begin();
+00115                 while (ait != Animators.end())
+00116                     {
+00117                     // continue to the next node before calling animateNode()
+00118                     // so that the animator may remove itself from the scene
+00119                     // node without the iterator becoming invalid
+00120                     ISceneNodeAnimator* anim = *ait;
+00121                     ++ait;
+00122                     anim->animateNode(this, timeMs);
+00123                 }
+00124 
+00125                 // update absolute position
+00126                 updateAbsolutePosition();
+00127 
+00128                 // perform the post render process on all children
+00129 
+00130                 ISceneNodeList::Iterator it = Children.begin();
+00131                 for (; it != Children.end(); ++it)
+00132                     (*it)->OnAnimate(timeMs);
+00133             }
+00134         }
+00135 
+00136 
+00138         virtual void render() = 0;
+00139 
+00140 
+00142 
+00143         virtual const c8* getName() const
+00144         {
+00145             return Name.c_str();
+00146         }
+00147 
+00148 
+00150 
+00151         virtual void setName(const c8* name)
+00152         {
+00153             Name = name;
+00154         }
+00155 
+00156 
+00158 
+00159         virtual void setName(const core::stringc& name)
+00160         {
+00161             Name = name;
+00162         }
+00163 
+00164 
+00166 
+00173         virtual const core::aabbox3d<f32>& getBoundingBox() const = 0;
+00174 
+00175 
+00177 
+00178         virtual const core::aabbox3d<f32> getTransformedBoundingBox() const
+00179         {
+00180             core::aabbox3d<f32> box = getBoundingBox();
+00181             AbsoluteTransformation.transformBoxEx(box);
+00182             return box;
+00183         }
+00184 
+00185 
+00187 
+00193         virtual const core::matrix4& getAbsoluteTransformation() const
+00194         {
+00195             return AbsoluteTransformation;
+00196         }
+00197 
+00198 
+00200 
+00204         virtual core::matrix4 getRelativeTransformation() const
+00205         {
+00206             core::matrix4 mat;
+00207             mat.setRotationDegrees(RelativeRotation);
+00208             mat.setTranslation(RelativeTranslation);
+00209 
+00210             if (RelativeScale != core::vector3df(1.f,1.f,1.f))
+00211             {
+00212                 core::matrix4 smat;
+00213                 smat.setScale(RelativeScale);
+00214                 mat *= smat;
+00215             }
+00216 
+00217             return mat;
+00218         }
+00219 
+00220 
+00222 
+00226         virtual bool isVisible() const
+00227         {
+00228             _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
+00229             return IsVisible;
+00230         }
+00231 
+00233 
+00235         virtual bool isTrulyVisible() const
+00236         {
+00237             _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
+00238             if(!IsVisible)
+00239                 return false;
+00240 
+00241             if(!Parent)
+00242                 return true;
+00243 
+00244             return Parent->isTrulyVisible();
+00245         }
+00246 
+00248 
+00252         virtual void setVisible(bool isVisible)
+00253         {
+00254             IsVisible = isVisible;
+00255         }
+00256 
+00257 
+00259 
+00261         virtual s32 getID() const
+00262         {
+00263             return ID;
+00264         }
+00265 
+00266 
+00268 
+00270         virtual void setID(s32 id)
+00271         {
+00272             ID = id;
+00273         }
+00274 
+00275 
+00277 
+00280         virtual void addChild(ISceneNode* child)
+00281         {
+00282             if (child && (child != this))
+00283             {
+00284                 // Change scene manager?
+00285                 if (SceneManager != child->SceneManager)
+00286                     child->setSceneManager(SceneManager);
+00287 
+00288                 child->grab();
+00289                 child->remove(); // remove from old parent
+00290                 Children.push_back(child);
+00291                 child->Parent = this;
+00292             }
+00293         }
+00294 
+00295 
+00297 
+00302         virtual bool removeChild(ISceneNode* child)
+00303         {
+00304             ISceneNodeList::Iterator it = Children.begin();
+00305             for (; it != Children.end(); ++it)
+00306                 if ((*it) == child)
+00307                 {
+00308                     (*it)->Parent = 0;
+00309                     (*it)->drop();
+00310                     Children.erase(it);
+00311                     return true;
+00312                 }
+00313 
+00314             _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
+00315             return false;
+00316         }
+00317 
+00318 
+00320 
+00323         virtual void removeAll()
+00324         {
+00325             ISceneNodeList::Iterator it = Children.begin();
+00326             for (; it != Children.end(); ++it)
+00327             {
+00328                 (*it)->Parent = 0;
+00329                 (*it)->drop();
+00330             }
+00331 
+00332             Children.clear();
+00333         }
+00334 
+00335 
+00337 
+00339         virtual void remove()
+00340         {
+00341             if (Parent)
+00342                 Parent->removeChild(this);
+00343         }
+00344 
+00345 
+00347 
+00348         virtual void addAnimator(ISceneNodeAnimator* animator)
+00349         {
+00350             if (animator)
+00351             {
+00352                 Animators.push_back(animator);
+00353                 animator->grab();
+00354             }
+00355         }
+00356 
+00357 
+00359 
+00360         const core::list<ISceneNodeAnimator*>& getAnimators() const
+00361         {
+00362             return Animators;
+00363         }
+00364 
+00365 
+00367 
+00370         virtual void removeAnimator(ISceneNodeAnimator* animator)
+00371         {
+00372             ISceneNodeAnimatorList::Iterator it = Animators.begin();
+00373             for (; it != Animators.end(); ++it)
+00374             {
+00375                 if ((*it) == animator)
+00376                 {
+00377                     (*it)->drop();
+00378                     Animators.erase(it);
+00379                     return;
+00380                 }
+00381             }
+00382         }
+00383 
+00384 
+00386 
+00388         virtual void removeAnimators()
+00389         {
+00390             ISceneNodeAnimatorList::Iterator it = Animators.begin();
+00391             for (; it != Animators.end(); ++it)
+00392                 (*it)->drop();
+00393 
+00394             Animators.clear();
+00395         }
+00396 
+00397 
+00399 
+00406         virtual video::SMaterial& getMaterial(u32 num)
+00407         {
+00408             return video::IdentityMaterial;
+00409         }
+00410 
+00411 
+00413 
+00414         virtual u32 getMaterialCount() const
+00415         {
+00416             return 0;
+00417         }
+00418 
+00419 
+00421 
+00425         void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue)
+00426         {
+00427             for (u32 i=0; i<getMaterialCount(); ++i)
+00428                 getMaterial(i).setFlag(flag, newvalue);
+00429         }
+00430 
+00431 
+00433 
+00436         void setMaterialTexture(u32 textureLayer, video::ITexture* texture)
+00437         {
+00438             if (textureLayer >= video::MATERIAL_MAX_TEXTURES)
+00439                 return;
+00440 
+00441             for (u32 i=0; i<getMaterialCount(); ++i)
+00442                 getMaterial(i).setTexture(textureLayer, texture);
+00443         }
+00444 
+00445 
+00447 
+00448         void setMaterialType(video::E_MATERIAL_TYPE newType)
+00449         {
+00450             for (u32 i=0; i<getMaterialCount(); ++i)
+00451                 getMaterial(i).MaterialType = newType;
+00452         }
+00453 
+00454 
+00456 
+00460         virtual const core::vector3df& getScale() const
+00461         {
+00462             return RelativeScale;
+00463         }
+00464 
+00465 
+00467 
+00468         virtual void setScale(const core::vector3df& scale)
+00469         {
+00470             RelativeScale = scale;
+00471         }
+00472 
+00473 
+00475 
+00479         virtual const core::vector3df& getRotation() const
+00480         {
+00481             return RelativeRotation;
+00482         }
+00483 
+00484 
+00486 
+00488         virtual void setRotation(const core::vector3df& rotation)
+00489         {
+00490             RelativeRotation = rotation;
+00491         }
+00492 
+00493 
+00495 
+00498         virtual const core::vector3df& getPosition() const
+00499         {
+00500             return RelativeTranslation;
+00501         }
+00502 
+00503 
+00505 
+00507         virtual void setPosition(const core::vector3df& newpos)
+00508         {
+00509             RelativeTranslation = newpos;
+00510         }
+00511 
+00512 
+00514 
+00522         virtual core::vector3df getAbsolutePosition() const
+00523         {
+00524             return AbsoluteTransformation.getTranslation();
+00525         }
+00526 
+00527 
+00529 
+00534         void setAutomaticCulling( u32 state)
+00535         {
+00536             AutomaticCullingState = state;
+00537         }
+00538 
+00539 
+00541 
+00542         u32 getAutomaticCulling() const
+00543         {
+00544             return AutomaticCullingState;
+00545         }
+00546 
+00547 
+00549 
+00552         virtual void setDebugDataVisible(u32 state)
+00553         {
+00554             DebugDataVisible = state;
+00555         }
+00556 
+00558 
+00560         u32 isDebugDataVisible() const
+00561         {
+00562             return DebugDataVisible;
+00563         }
+00564 
+00565 
+00567 
+00569         void setIsDebugObject(bool debugObject)
+00570         {
+00571             IsDebugObject = debugObject;
+00572         }
+00573 
+00574 
+00576 
+00579         bool isDebugObject() const
+00580         {
+00581             _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX;
+00582             return IsDebugObject;
+00583         }
+00584 
+00585 
+00587 
+00588         const core::list<ISceneNode*>& getChildren() const
+00589         {
+00590             return Children;
+00591         }
+00592 
+00593 
+00595 
+00596         virtual void setParent(ISceneNode* newParent)
+00597         {
+00598             grab();
+00599             remove();
+00600 
+00601             Parent = newParent;
+00602 
+00603             if (Parent)
+00604                 Parent->addChild(this);
+00605 
+00606             drop();
+00607         }
+00608 
+00609 
+00611 
+00620         virtual ITriangleSelector* getTriangleSelector() const
+00621         {
+00622             return TriangleSelector;
+00623         }
+00624 
+00625 
+00627 
+00635         virtual void setTriangleSelector(ITriangleSelector* selector)
+00636         {
+00637             if (TriangleSelector != selector)
+00638             {
+00639                 if (TriangleSelector)
+00640                     TriangleSelector->drop();
+00641 
+00642                 TriangleSelector = selector;
+00643                 if (TriangleSelector)
+00644                     TriangleSelector->grab();
+00645             }
+00646         }
+00647 
+00648 
+00650 
+00652         virtual void updateAbsolutePosition()
+00653         {
+00654             if (Parent)
+00655             {
+00656                 AbsoluteTransformation =
+00657                     Parent->getAbsoluteTransformation() * getRelativeTransformation();
+00658             }
+00659             else
+00660                 AbsoluteTransformation = getRelativeTransformation();
+00661         }
+00662 
+00663 
+00665 
+00666         scene::ISceneNode* getParent() const
+00667         {
+00668             return Parent;
+00669         }
+00670 
+00671 
+00673 
+00674         virtual ESCENE_NODE_TYPE getType() const
+00675         {
+00676             return ESNT_UNKNOWN;
+00677         }
+00678 
+00679 
+00681 
+00687         virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const
+00688         {
+00689             if (!out)
+00690                 return;
+00691             out->addString  ("Name", Name.c_str());
+00692             out->addInt ("Id", ID );
+00693 
+00694             out->addVector3d("Position", getPosition() );
+00695             out->addVector3d("Rotation", getRotation() );
+00696             out->addVector3d("Scale", getScale() );
+00697 
+00698             out->addBool    ("Visible", IsVisible );
+00699             out->addInt ("AutomaticCulling", AutomaticCullingState);
+00700             out->addInt ("DebugDataVisible", DebugDataVisible );
+00701             out->addBool    ("IsDebugObject", IsDebugObject );
+00702         }
+00703 
+00704 
+00706 
+00712         virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)
+00713         {
+00714             if (!in)
+00715                 return;
+00716             Name = in->getAttributeAsString("Name");
+00717             ID = in->getAttributeAsInt("Id");
+00718 
+00719             setPosition(in->getAttributeAsVector3d("Position"));
+00720             setRotation(in->getAttributeAsVector3d("Rotation"));
+00721             setScale(in->getAttributeAsVector3d("Scale"));
+00722 
+00723             IsVisible = in->getAttributeAsBool("Visible");
+00724             s32 tmpState = in->getAttributeAsEnumeration("AutomaticCulling",
+00725                     scene::AutomaticCullingNames);
+00726             if (tmpState != -1)
+00727                 AutomaticCullingState = (u32)tmpState;
+00728             else
+00729                 AutomaticCullingState = in->getAttributeAsInt("AutomaticCulling");
+00730 
+00731             DebugDataVisible = in->getAttributeAsInt("DebugDataVisible");
+00732             IsDebugObject = in->getAttributeAsBool("IsDebugObject");
+00733 
+00734             updateAbsolutePosition();
+00735         }
+00736 
+00738 
+00741         virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0)
+00742         {
+00743             return 0; // to be implemented by derived classes
+00744         }
+00745 
+00747 
+00748         virtual ISceneManager* getSceneManager(void) const { return SceneManager; }
+00749 
+00750     protected:
+00751 
+00753 
+00757         void cloneMembers(ISceneNode* toCopyFrom, ISceneManager* newManager)
+00758         {
+00759             Name = toCopyFrom->Name;
+00760             AbsoluteTransformation = toCopyFrom->AbsoluteTransformation;
+00761             RelativeTranslation = toCopyFrom->RelativeTranslation;
+00762             RelativeRotation = toCopyFrom->RelativeRotation;
+00763             RelativeScale = toCopyFrom->RelativeScale;
+00764             ID = toCopyFrom->ID;
+00765             setTriangleSelector(toCopyFrom->TriangleSelector);
+00766             AutomaticCullingState = toCopyFrom->AutomaticCullingState;
+00767             DebugDataVisible = toCopyFrom->DebugDataVisible;
+00768             IsVisible = toCopyFrom->IsVisible;
+00769             IsDebugObject = toCopyFrom->IsDebugObject;
+00770 
+00771             if (newManager)
+00772                 SceneManager = newManager;
+00773             else
+00774                 SceneManager = toCopyFrom->SceneManager;
+00775 
+00776             // clone children
+00777 
+00778             ISceneNodeList::Iterator it = toCopyFrom->Children.begin();
+00779             for (; it != toCopyFrom->Children.end(); ++it)
+00780                 (*it)->clone(this, newManager);
+00781 
+00782             // clone animators
+00783 
+00784             ISceneNodeAnimatorList::Iterator ait = toCopyFrom->Animators.begin();
+00785             for (; ait != toCopyFrom->Animators.end(); ++ait)
+00786             {
+00787                 ISceneNodeAnimator* anim = (*ait)->createClone(this, SceneManager);
+00788                 if (anim)
+00789                 {
+00790                     addAnimator(anim);
+00791                     anim->drop();
+00792                 }
+00793             }
+00794         }
+00795 
+00798         void setSceneManager(ISceneManager* newManager)
+00799         {
+00800             SceneManager = newManager;
+00801 
+00802             ISceneNodeList::Iterator it = Children.begin();
+00803             for (; it != Children.end(); ++it)
+00804                 (*it)->setSceneManager(newManager);
+00805         }
+00806 
+00808         core::stringc Name;
+00809 
+00811         core::matrix4 AbsoluteTransformation;
+00812 
+00814         core::vector3df RelativeTranslation;
+00815 
+00817         core::vector3df RelativeRotation;
+00818 
+00820         core::vector3df RelativeScale;
+00821 
+00823         ISceneNode* Parent;
+00824 
+00826         core::list<ISceneNode*> Children;
+00827 
+00829         core::list<ISceneNodeAnimator*> Animators;
+00830 
+00832         ISceneManager* SceneManager;
+00833 
+00835         ITriangleSelector* TriangleSelector;
+00836 
+00838         s32 ID;
+00839 
+00841         u32 AutomaticCullingState;
+00842 
+00844         u32 DebugDataVisible;
+00845 
+00847         bool IsVisible;
+00848 
+00850         bool IsDebugObject;
+00851     };
+00852 
+00853 
+00854 } // end namespace scene
+00855 } // end namespace irr
+00856 
+00857 #endif
+00858 
+
+
+ + + + + -- cgit v1.1