scene_user.h

Go to the documentation of this file.
00001 
00005 /* Copyright, 2001 Nevrax Ltd.
00006  *
00007  * This file is part of NEVRAX NEL.
00008  * NEVRAX NEL is free software; you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation; either version 2, or (at your option)
00011  * any later version.
00012 
00013  * NEVRAX NEL is distributed in the hope that it will be useful, but
00014  * WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00016  * General Public License for more details.
00017 
00018  * You should have received a copy of the GNU General Public License
00019  * along with NEVRAX NEL; see the file COPYING. If not, write to the
00020  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
00021  * MA 02111-1307, USA.
00022  */
00023 
00024 #ifndef NL_SCENE_USER_H
00025 #define NL_SCENE_USER_H
00026 
00027 #include "nel/misc/types_nl.h"
00028 #include "nel/3d/u_scene.h"
00029 #include "nel/3d/driver_user.h"
00030 #include "nel/3d/landscape_user.h"
00031 #include "nel/3d/cloud_scape_user.h"
00032 #include "nel/3d/instance_group_user.h"
00033 #include "nel/3d/visual_collision_manager_user.h"
00034 #include "nel/3d/play_list_manager_user.h"
00035 
00036 
00037 namespace NL3D {
00038 
00039 
00040 class UWaterEnvMap;
00041 
00048 class CSceneUser : public UScene
00049 {
00050 private:
00052     virtual void            updateWaitingInstances();
00053 protected:
00055     CDriverUser         *_DriverUser;
00057     CScene              _Scene;
00058 
00059 
00060     // Components List.
00061     typedef CPtrSet<CLandscapeUser>     TLandscapeSet;
00062     typedef CPtrSet<CCloudScapeUser>    TCloudScapeSet;
00063     typedef CPtrSet<CInstanceGroupUser> TInstanceGroupSet;
00064     typedef CPtrSet<CVisualCollisionManagerUser>    TVisualCollisionManagerSet;
00065     typedef CPtrSet<CPlayListManagerUser>   TPlayListManagerSet;
00066     TLandscapeSet               _Landscapes;
00067     TCloudScapeSet              _CloudScapes;
00068     TInstanceGroupSet           _InstanceGroups;
00069     TVisualCollisionManagerSet  _VisualCollisionManagers;
00070     TPlayListManagerSet         _PlayListManagers;
00071 
00072     std::map<UInstance*,CTransformShape*> _WaitingInstances;
00073 
00074     // IG that wait to be created and added to that scene
00075     struct CWaitingIG
00076     {
00077         UInstanceGroup  *IGToLoad;
00078         UInstanceGroup  **CallerPtr;
00079         NLMISC::CVector Pos;
00080         NLMISC::CQuat   Rot;
00081         uint            SelectedTexture;
00082         IAsyncLoadCallback *Callback;
00083         CWaitingIG(UInstanceGroup **callerPtr, const NLMISC::CVector &pos, const NLMISC::CQuat &rot, uint selectedTexture, IAsyncLoadCallback *pCB) : IGToLoad(NULL), CallerPtr(callerPtr), Pos(pos), Rot(rot), SelectedTexture(selectedTexture), Callback(pCB)
00084         {}
00085     };
00086     //
00087     typedef std::list<CWaitingIG> TWaitingIGList;
00088     TWaitingIGList        _WaitingIGs;
00089     UWaterEnvMap          *_WaterEnvMap;
00090 
00091 public:
00092 
00094     // @{
00095     CSceneUser(CDriverUser *drv, bool bSmallScene);
00096     virtual ~CSceneUser();
00097     // @}
00098 
00099 public:
00100 
00102 
00103     // render methods
00104     virtual void            render(bool updateWaitingInstances = true, bool restoreMatrixContextAfterRender = true);
00105     virtual void            beginPartRender();
00106     virtual void            renderPart(TRenderPart rp);
00107     virtual void            endPartRender(bool updateWaitingInstances = true, bool restoreMatrixContextAfterRender = true);
00108 
00109     // update async loading whithout a call to render
00110     virtual void            updateWaitingInstances(double ellapsedTime);
00111     virtual void            animate(TGlobalAnimationTime time);
00113 
00114 
00116 
00117     virtual void            setCam(UCamera cam);
00118     virtual UCamera         getCam();
00119     virtual void            setViewport(const class CViewport& viewport);
00120     virtual CViewport       getViewport();
00121     virtual UInstanceGroup  *findCameraClusterSystemFromRay(UInstanceGroup *startClusterSystem,
00122         const NLMISC::CVector &startPos, NLMISC::CVector &endPos);
00124 
00125 
00127 
00128 
00129     virtual UCamera         createCamera();
00130     virtual void            deleteCamera(UCamera &cam);
00131 
00132     virtual UInstance       createInstance(const std::string &shapeName);
00133     virtual void            createInstanceAsync(const std::string &shapeName, UInstance *ppInstance, const NLMISC::CVector &position, uint selectedTexture);
00134     virtual void            deleteInstance(UInstance &inst);
00135 
00136     virtual void createInstanceGroupAndAddToSceneAsync (const std::string &instanceGroup, UInstanceGroup **pIG, const NLMISC::CVector &pos,
00137                                                         const NLMISC::CQuat &rot, uint selectedTexture, IAsyncLoadCallback *pCB = NULL);
00138 
00139     virtual void stopCreatingAndAddingIG(UInstanceGroup **pIG);
00140     virtual void deleteInstanceGroup(UInstanceGroup *pIG);
00141 
00143     void    updateWaitingIG();
00144 
00145 
00146     virtual UTransform      createTransform();
00147     virtual void            deleteTransform(UTransform &tr);
00148 
00149     virtual USkeleton       createSkeleton(const std::string &shapeName);
00150     virtual void            deleteSkeleton(USkeleton &skel);
00151 
00152     virtual ULandscape      *createLandscape();
00153     virtual void            deleteLandscape(ULandscape *land);
00154 
00155     virtual UCloudScape     *createCloudScape();
00156     virtual void            deleteCloudScape(UCloudScape *cs);
00157 /*
00158 
00159     virtual UInstanceGroup  *createInstanceGroup (const std::string &instanceGroup);
00160     virtual void            deleteInstanceGroup (UInstanceGroup *group);
00161 */
00162 
00163     virtual void setToGlobalInstanceGroup(UInstanceGroup *pIG);
00164 
00165     virtual UPointLight     createPointLight();
00166     virtual void            deletePointLight(UPointLight &light);
00167 
00169 
00171     // @{
00174     virtual void                setAutomaticAnimationSet(UAnimationSet *as);
00176     virtual UPlayListManager    *createPlayListManager() ;
00178     virtual void                deletePlayListManager(UPlayListManager *playListManager) ;
00179     // @}
00180 
00182 
00183     virtual UVisualCollisionManager     *createVisualCollisionManager();
00184     virtual void                        deleteVisualCollisionManager(UVisualCollisionManager *mgr);
00186 
00187 
00189 
00190     virtual void                    setPolygonBalancingMode(TPolygonBalancingMode polBalMode);
00191     virtual TPolygonBalancingMode   getPolygonBalancingMode() const;
00192 
00193     virtual float               getNbFaceAsked () const;
00194 
00195     virtual void                setGroupLoadMaxPolygon(const std::string &group, uint nFaces);
00196     virtual uint                getGroupLoadMaxPolygon(const std::string &group);
00197     virtual float               getGroupNbFaceAsked (const std::string &group) const;
00198 
00199     virtual void                setMaxSkeletonsInNotCLodForm(uint m);
00200     virtual uint                getMaxSkeletonsInNotCLodForm() const;
00201 
00203 
00205 
00206     virtual void                setCoarseMeshManagerTexture (const char *sPath);
00207     virtual void                setCoarseMeshLightingUpdate(uint8 period);
00208     virtual uint8               getCoarseMeshLightingUpdate() const;
00210 
00212 
00213     virtual void  setLayersRenderingOrder(bool directOrder = true) { _Scene.setLayersRenderingOrder(directOrder); }
00214     virtual bool  getLayersRenderingOrder() const { return _Scene.getLayersRenderingOrder(); }
00216 
00218 
00219 
00220     virtual void                enableLightingSystem(bool enable);
00221 
00222     virtual void                setAmbientGlobal(NLMISC::CRGBA ambient);
00223     virtual void                setSunAmbient(NLMISC::CRGBA ambient);
00224     virtual void                setSunDiffuse(NLMISC::CRGBA diffuse);
00225     virtual void                setSunSpecular(NLMISC::CRGBA specular);
00226     virtual void                setSunDirection(const NLMISC::CVector &direction);
00227     virtual void                setLightGroupColor(uint lightmapGroup, NLMISC::CRGBA color);
00228 
00229     virtual NLMISC::CRGBA       getAmbientGlobal() const;
00230     virtual NLMISC::CRGBA       getSunAmbient() const;
00231     virtual NLMISC::CRGBA       getSunDiffuse() const;
00232     virtual NLMISC::CRGBA       getSunSpecular() const;
00233     virtual NLMISC::CVector     getSunDirection() const;
00234 
00235     virtual void                setMaxLightContribution(uint nlights);
00236     virtual uint                getMaxLightContribution() const;
00237 
00238     virtual void                setLightTransitionThreshold(float lightTransitionThreshold);
00239     virtual float               getLightTransitionThreshold() const;
00240 
00242 
00243 
00245 
00246 
00247     virtual void                setGlobalWindPower(float gwp);
00248     virtual float               getGlobalWindPower() const;
00249     virtual void                setGlobalWindDirection(const NLMISC::CVector &gwd);
00250     virtual const NLMISC::CVector       &getGlobalWindDirection() const;
00251 
00253 
00254 
00256 
00257     virtual void                resetCLodManager();
00258     virtual uint32              loadCLodShapeBank(const std::string &fileName);
00259     virtual void                deleteCLodShapeBank(uint32 bankId);
00260     virtual sint32              getCLodShapeIdByName(const std::string &name) const;
00261     virtual sint32              getCLodAnimIdByName(uint32 shapeId, const std::string &name) const;
00263 
00265     // @{
00266     virtual void                enableElementRender(TRenderFilter elt, bool state);
00267     virtual void                profileNextRender();
00268     virtual void                getProfileResults(CBenchResults &results);
00269     virtual void                profileQuadGridClipManager();
00270     // @}
00271 
00273     // @{
00274         virtual uint    getNumFlareContexts() const;
00275         virtual void    setFlareContext(uint context);
00276         virtual uint    getFlareContext() const;
00277     // @}
00278 
00280     // @{
00281     virtual uint            getShadowMapTextureSize() const;
00282     virtual void            setShadowMapTextureSize(uint size);
00283     virtual uint            getShadowMapBlurSize() const;
00284     virtual void            setShadowMapBlurSize(uint bs);
00285     virtual void            enableShadowPolySmooth(bool enable);
00286     virtual bool            getEnableShadowPolySmooth() const;
00287     virtual void            setShadowMapDistFadeStart(float dist);
00288     virtual float           getShadowMapDistFadeStart() const;
00289     virtual void            setShadowMapDistFadeEnd(float dist);
00290     virtual float           getShadowMapDistFadeEnd() const;
00291     virtual void            setShadowMapMaxCasterInScreen(uint num);
00292     virtual uint            getShadowMapMaxCasterInScreen() const;
00293     virtual void            setShadowMapMaxCasterAround(uint num);
00294     virtual uint            getShadowMapMaxCasterAround() const;
00295     virtual void            setVisualCollisionManagerForShadow(UVisualCollisionManager *vcm);
00296     // @}
00297 
00298     void                        setWaterCallback(IWaterSurfaceAddedCallback *wcb);
00299     IWaterSurfaceAddedCallback *getWaterCallback() const;
00300 
00301     void            setLandscapePolyDrawingCallback(ILandscapePolyDrawingCallback *lpd);
00302     ILandscapePolyDrawingCallback *getLandscapePolyDrawingCallback() const;
00303     //
00304     virtual void setupTransparencySorting(uint8 maxPriority = 0, uint NbDistanceEntries = 1024);
00305 
00307     // @{
00308     virtual void          setWaterEnvMap(UWaterEnvMap *waterEnvMap);
00309     virtual UWaterEnvMap *getWaterEnvMap() const { return _WaterEnvMap; }
00310     virtual void          updateWaterEnvMaps(TGlobalAnimationTime time);
00311     // @}
00312 
00313 public:
00315     // @{
00316     CScene      &getScene()
00317     {
00318         return _Scene;
00319     }
00320     // @}
00321 
00322 };
00323 
00324 
00325 } // NL3D
00326 
00327 
00328 #endif // NL_SCENE_USER_H
00329 
00330 /* End of scene_user.h */

Generated on Thu Jan 7 08:26:20 2010 for NeL by  doxygen 1.6.1