OgreMovableObject.h

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2006 Torus Knot Software Ltd
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software; you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation; either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 
00024 You may alternatively use this source under the terms of a specific version of
00025 the OGRE Unrestricted License provided you have obtained such a license from
00026 Torus Knot Software Ltd.
00027 -----------------------------------------------------------------------------
00028 */
00029 
00030 #ifndef __MovableObject_H__
00031 #define __MovableObject_H__
00032 
00033 // Precompiler options
00034 #include "OgrePrerequisites.h"
00035 #include "OgreRenderQueue.h"
00036 #include "OgreAxisAlignedBox.h"
00037 #include "OgreSphere.h"
00038 #include "OgreShadowCaster.h"
00039 #include "OgreFactoryObj.h"
00040 #include "OgreAnimable.h"
00041 #include "OgreAny.h"
00042 #include "OgreUserDefinedObject.h"
00043 
00044 namespace Ogre {
00045 
00046     // Forward declaration
00047     class MovableObjectFactory;
00048 
00054     class _OgreExport MovableObject : public ShadowCaster, public AnimableObject, public MovableAlloc
00055     {
00056     public:
00059         class _OgreExport Listener
00060         {
00061         public:
00062             Listener(void) {}
00063             virtual ~Listener() {}
00065             virtual void objectDestroyed(MovableObject*) {}
00067             virtual void objectAttached(MovableObject*) {}
00069             virtual void objectDetached(MovableObject*) {}
00071             virtual void objectMoved(MovableObject*) {}
00076             virtual bool objectRendering(const MovableObject*, const Camera*) { return true; }
00099             virtual const LightList* objectQueryLights(const MovableObject*) { return 0; }
00100         };
00101 
00102     protected:
00104         String mName;
00106         MovableObjectFactory* mCreator;
00108         SceneManager* mManager;
00110         Node* mParentNode;
00111         bool mParentIsTagPoint;
00113         bool mVisible;
00115         bool mDebugDisplay;
00117         Real mUpperDistance;
00118         Real mSquaredUpperDistance;
00120         bool mBeyondFarDistance;
00122         Any mUserAny;
00124         uint8 mRenderQueueID;
00126         bool mRenderQueueIDSet;
00128         uint32 mQueryFlags;
00130         uint32 mVisibilityFlags;
00132         mutable AxisAlignedBox mWorldAABB;
00133         // Cached world bounding sphere
00134         mutable Sphere mWorldBoundingSphere;
00136         mutable AxisAlignedBox mWorldDarkCapBounds;
00138         bool mCastShadows;
00139 
00141         bool mRenderingDisabled;
00143         Listener* mListener;
00144 
00146         mutable LightList mLightList;
00148         mutable ulong mLightListUpdated;
00149 
00150         // Static members
00152         static uint32 msDefaultQueryFlags;
00154         static uint32 msDefaultVisibilityFlags;
00155 
00156 
00157 
00158     public:
00160         MovableObject();
00161 
00163         MovableObject(const String& name);
00166         virtual ~MovableObject();
00167 
00169         virtual void _notifyCreator(MovableObjectFactory* fact) { mCreator = fact; }
00171         virtual MovableObjectFactory*  _getCreator(void) const { return mCreator; }
00173         virtual void _notifyManager(SceneManager* man) { mManager = man; }
00175         virtual SceneManager* _getManager(void) const { return mManager; }
00176 
00178         virtual const String& getName(void) const { return mName; }
00179 
00181         virtual const String& getMovableType(void) const = 0;
00182 
00189         virtual Node* getParentNode(void) const;
00190 
00198         virtual SceneNode* getParentSceneNode(void) const;
00199 
00202         virtual void _notifyAttached(Node* parent, bool isTagPoint = false);
00203 
00205         virtual bool isAttached(void) const;
00206 
00208         virtual void detatchFromParent(void);
00209 
00213         virtual bool isInScene(void) const;
00214 
00217         virtual void _notifyMoved(void);
00218 
00224         virtual void _notifyCurrentCamera(Camera* cam);
00225 
00230         virtual const AxisAlignedBox& getBoundingBox(void) const = 0;
00231 
00235         virtual Real getBoundingRadius(void) const = 0;
00236 
00238         virtual const AxisAlignedBox& getWorldBoundingBox(bool derive = false) const;
00240         virtual const Sphere& getWorldBoundingSphere(bool derive = false) const;
00246         virtual void _updateRenderQueue(RenderQueue* queue) = 0;
00247 
00262         virtual void setVisible(bool visible);
00263 
00268         virtual bool getVisible(void) const;
00269 
00274         virtual bool isVisible(void) const;
00275 
00280         virtual void setRenderingDistance(Real dist) { 
00281             mUpperDistance = dist; 
00282             mSquaredUpperDistance = mUpperDistance * mUpperDistance;
00283         }
00284 
00286         virtual Real getRenderingDistance(void) const { return mUpperDistance; }
00287 
00294         virtual void setUserObject(UserDefinedObject* obj) { mUserAny = Any(obj); }
00298         virtual UserDefinedObject* getUserObject(void) 
00299         { 
00300             return mUserAny.isEmpty() ? 0 : any_cast<UserDefinedObject*>(mUserAny); 
00301         }
00302 
00310         virtual void setUserAny(const Any& anything) { mUserAny = anything; }
00311 
00314         virtual const Any& getUserAny(void) const { return mUserAny; }
00315 
00327         virtual void setRenderQueueGroup(uint8 queueID);
00328 
00330         virtual uint8 getRenderQueueGroup(void) const;
00331 
00333         virtual const Matrix4& _getParentNodeFullTransform(void) const;
00334 
00342         virtual void setQueryFlags(uint32 flags) { mQueryFlags = flags; }
00343 
00346         virtual void addQueryFlags(uint32 flags) { mQueryFlags |= flags; }
00347             
00350         virtual void removeQueryFlags(unsigned long flags) { mQueryFlags &= ~flags; }
00351         
00353         virtual uint32 getQueryFlags(void) const { return mQueryFlags; }
00354 
00357         static void setDefaultQueryFlags(uint32 flags) { msDefaultQueryFlags = flags; }
00358 
00361         static uint32 getDefaultQueryFlags() { return msDefaultQueryFlags; }
00362 
00363         
00370         virtual void setVisibilityFlags(uint32 flags) { mVisibilityFlags = flags; }
00371 
00374         virtual void addVisibilityFlags(uint32 flags) { mVisibilityFlags |= flags; }
00375             
00378         virtual void removeVisibilityFlags(uint32 flags) { mVisibilityFlags &= ~flags; }
00379         
00381         virtual uint32 getVisibilityFlags(void) const { return mVisibilityFlags; }
00382 
00385         static void setDefaultVisibilityFlags(uint32 flags) { msDefaultVisibilityFlags = flags; }
00386         
00389         static uint32 getDefaultVisibilityFlags() { return msDefaultVisibilityFlags; }
00390 
00396         virtual void setListener(Listener* listener) { mListener = listener; }
00397 
00400         virtual Listener* getListener(void) const { return mListener; }
00401 
00420         virtual const LightList& queryLights(void) const;
00421 
00428         virtual LightList* _getLightList() { return &mLightList; }
00429 
00431         EdgeData* getEdgeList(void) { return NULL; }
00433         bool hasEdgeList(void) { return false; }
00435         ShadowRenderableListIterator getShadowVolumeRenderableIterator(
00436             ShadowTechnique shadowTechnique, const Light* light, 
00437             HardwareIndexBufferSharedPtr* indexBuffer, 
00438             bool extrudeVertices, Real extrusionDist, unsigned long flags = 0);
00439         
00441         const AxisAlignedBox& getLightCapBounds(void) const;
00443         const AxisAlignedBox& getDarkCapBounds(const Light& light, Real dirLightExtrusionDist) const;
00456         void setCastShadows(bool enabled) { mCastShadows = enabled; }
00458         bool getCastShadows(void) const { return mCastShadows; }
00462         bool getReceivesShadows();
00463             
00465         Real getPointExtrusionDistance(const Light* l) const;
00476         virtual uint32 getTypeFlags(void) const;
00477 
00489         virtual void visitRenderables(Renderable::Visitor* visitor, 
00490             bool debugRenderables = false) = 0;
00491 
00500         virtual void setDebugDisplayEnabled(bool enabled) { mDebugDisplay = enabled; }
00502         virtual bool isDebugDisplayEnabled(void) const { return mDebugDisplay; }
00503 
00504 
00505 
00506 
00507 
00508     };
00509 
00515     class _OgreExport MovableObjectFactory : public MovableAlloc
00516     {
00517     protected:
00519         unsigned long mTypeFlag;
00520 
00522         virtual MovableObject* createInstanceImpl(
00523             const String& name, const NameValuePairList* params = 0) = 0;
00524     public:
00525         MovableObjectFactory() : mTypeFlag(0xFFFFFFFF) {}
00526         virtual ~MovableObjectFactory() {}
00528         virtual const String& getType(void) const = 0;
00529 
00537         virtual MovableObject* createInstance(
00538             const String& name, SceneManager* manager, 
00539             const NameValuePairList* params = 0);
00541         virtual void destroyInstance(MovableObject* obj) = 0;
00542 
00556         virtual bool requestTypeFlags(void) const { return false; }
00565         void _notifyTypeFlags(unsigned long flag) { mTypeFlag = flag; }
00566 
00572         unsigned long getTypeFlags(void) const { return mTypeFlag; }
00573 
00574     };
00575 
00576 }
00577 #endif

Copyright © 2008 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 27 22:02:24 2009