iengine/sector.h
Go to the documentation of this file.00001 /* 00002 Crystal Space 3D engine 00003 Copyright (C) 1998-2001 by Jorrit Tyberghein 00004 2004 by Marten Svanfeldt 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License as published by the Free Software Foundation; either 00009 version 2 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public 00017 License along with this library; if not, write to the Free 00018 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00019 */ 00020 00021 #ifndef __CS_IENGINE_SECTOR_H__ 00022 #define __CS_IENGINE_SECTOR_H__ 00023 00031 #include "csutil/cscolor.h" 00032 #include "csutil/scf.h" 00033 #include "csutil/set.h" 00034 #include "csgeom/vector3.h" 00035 00036 struct iMeshWrapper; 00037 struct iMeshGenerator; 00038 struct iMeshList; 00039 struct iLightList; 00040 struct iLight; 00041 struct iVisibilityCuller; 00042 00043 struct iObject; 00044 00045 struct iRenderView; 00046 struct iRenderLoop; 00047 struct iFrustumView; 00048 struct iSector; 00049 struct iDocumentNode; 00050 00051 struct iShaderVariableContext; 00052 00053 class csBox3; 00054 class csRenderMeshList; 00055 class csReversibleTransform; 00056 class csVector3; 00057 00058 enum csFogMode 00059 { 00060 CS_FOG_MODE_NONE = 0, 00061 CS_FOG_MODE_LINEAR, 00062 CS_FOG_MODE_EXP, 00063 CS_FOG_MODE_EXP2, 00064 CS_FOG_MODE_CRYSTALSPACE 00065 }; 00066 00070 struct csFog 00071 { 00073 float density; 00075 csColor color; 00077 float start; 00079 float end; 00081 csFogMode mode; 00082 00083 csFog() : density (0), color (0, 0, 0), start (0), end (0), 00084 mode (CS_FOG_MODE_NONE) {} 00085 }; 00086 00095 struct iSectorCallback : public virtual iBase 00096 { 00097 SCF_INTERFACE (iSectorCallback, 0, 0, 1); 00098 00103 virtual void Traverse (iSector* sector, iBase* context) = 0; 00104 }; 00105 00113 struct iSectorMeshCallback : public virtual iBase 00114 { 00115 SCF_INTERFACE (iSectorMeshCallback, 0, 0, 1); 00116 00121 virtual void NewMesh (iSector* sector, iMeshWrapper* mesh) = 0; 00122 00126 virtual void RemoveMesh (iSector* sector, iMeshWrapper* mesh) = 0; 00127 }; 00128 00135 struct iLightVisibleCallback : public virtual iBase 00136 { 00137 SCF_INTERFACE (iLightVisibleCallback, 0, 0, 1); 00138 00140 virtual void LightVisible (iSector* sector, iLight* light) = 0; 00141 }; 00142 00146 struct csSectorHitBeamResult 00147 { 00149 iMeshWrapper* mesh; 00150 00152 csVector3 isect; 00153 00155 int polygon_idx; 00156 00161 iSector* final_sector; 00162 }; 00163 00187 struct iSector : public virtual iBase 00188 { 00189 SCF_INTERFACE(iSector,2,1,0); 00191 virtual iObject *QueryObject () = 0; 00192 00195 00196 virtual iMeshList* GetMeshes () = 0; 00197 00204 virtual csRenderMeshList* GetVisibleMeshes (iRenderView *) = 0; 00205 00212 virtual const csSet<csPtrKey<iMeshWrapper> >& GetPortalMeshes () const = 0; 00213 00220 virtual void UnlinkObjects () = 0; 00221 00226 virtual void AddSectorMeshCallback (iSectorMeshCallback* cb) = 0; 00227 00231 virtual void RemoveSectorMeshCallback (iSectorMeshCallback* cb) = 0; 00236 00237 virtual void Draw (iRenderView* rview) = 0; 00238 00243 virtual void PrepareDraw (iRenderView* rview) = 0; 00244 00248 virtual int GetRecLevel () const = 0; 00249 00253 virtual void IncRecLevel () = 0; 00254 00258 virtual void DecRecLevel () = 0; 00259 00264 virtual void SetRenderLoop (iRenderLoop* rl) = 0; 00265 00271 virtual iRenderLoop* GetRenderLoop () = 0; 00279 virtual iMeshGenerator* CreateMeshGenerator (const char* name) = 0; 00280 00284 virtual size_t GetMeshGeneratorCount () const = 0; 00285 00289 virtual iMeshGenerator* GetMeshGenerator (size_t idx) = 0; 00290 00294 virtual iMeshGenerator* GetMeshGeneratorByName (const char* name) = 0; 00295 00299 virtual void RemoveMeshGenerator (size_t idx) = 0; 00300 00304 virtual void RemoveMeshGenerators () = 0; 00309 00310 virtual bool HasFog () const = 0; 00312 virtual const csFog& GetFog () const = 0; 00314 virtual void SetFog (float density, const csColor& color) = 0; 00316 virtual void SetFog (const csFog& fog) = 0; 00318 virtual void DisableFog () = 0; 00326 virtual iLightList* GetLights () = 0; 00327 00329 virtual void ShineLights () = 0; 00331 virtual void ShineLights (iMeshWrapper*) = 0; 00332 00337 virtual void SetDynamicAmbientLight (const csColor& color) = 0; 00338 00340 virtual csColor GetDynamicAmbientLight () const = 0; 00341 00346 virtual uint GetDynamicAmbientVersion () const = 0; 00356 virtual void CalculateSectorBBox (csBox3& bbox, 00357 bool do_meshes) const = 0; 00358 00366 virtual bool SetVisibilityCullerPlugin (const char* name, 00367 iDocumentNode* culler_params = 0) = 0; 00373 virtual iVisibilityCuller* GetVisibilityCuller () = 0; 00374 00379 virtual void CheckFrustum (iFrustumView* lview) = 0; 00380 00381 00391 CS_DEPRECATED_METHOD_MSG("Use the csSectorHitBeamResult version instead") 00392 virtual iMeshWrapper* HitBeamPortals ( 00393 const csVector3& start, const csVector3& end, csVector3& isect, 00394 int* polygon_idx, iSector** final_sector = 0) = 0; 00395 00404 CS_DEPRECATED_METHOD_MSG("Use the csSectorHitBeamResult version instead") 00405 virtual iMeshWrapper* HitBeam (const csVector3& start, 00406 const csVector3& end, csVector3& intersect, int* polygon_idx, 00407 bool accurate = false) = 0; 00408 00418 virtual csSectorHitBeamResult HitBeamPortals (const csVector3& start, 00419 const csVector3& end) = 0; 00420 00429 virtual csSectorHitBeamResult HitBeam (const csVector3& start, 00430 const csVector3& end, bool accurate = false) = 0; 00431 00450 virtual iSector* FollowSegment (csReversibleTransform& t, 00451 csVector3& new_position, bool& mirror, bool only_portals = false) = 0; 00460 virtual void SetSectorCallback (iSectorCallback* cb) = 0; 00461 00465 virtual void RemoveSectorCallback (iSectorCallback* cb) = 0; 00466 00468 virtual int GetSectorCallbackCount () const = 0; 00469 00471 virtual iSectorCallback* GetSectorCallback (int idx) const = 0; 00484 virtual void SetLightCulling (bool enable) = 0; 00486 virtual bool IsLightCullingEnabled () const = 0; 00491 virtual void AddLightVisibleCallback (iLightVisibleCallback* cb) = 0; 00495 virtual void RemoveLightVisibleCallback (iLightVisibleCallback* cb) = 0; 00498 00499 virtual iShaderVariableContext* GetSVContext() = 0; 00500 }; 00501 00502 00513 struct iSectorList : public virtual iBase 00514 { 00515 SCF_INTERFACE(iSectorList, 2,0,0); 00517 virtual int GetCount () const = 0; 00518 00520 virtual iSector *Get (int n) const = 0; 00521 00523 virtual int Add (iSector *obj) = 0; 00524 00526 virtual bool Remove (iSector *obj) = 0; 00527 00529 virtual bool Remove (int n) = 0; 00530 00532 virtual void RemoveAll () = 0; 00533 00535 virtual int Find (iSector *obj) const = 0; 00536 00538 virtual iSector *FindByName (const char *Name) const = 0; 00539 }; 00540 00541 00549 struct iSectorIterator : public virtual iBase 00550 { 00551 SCF_INTERFACE(iSectorIterator,2,0,0); 00553 virtual bool HasNext () const = 0; 00554 00556 virtual iSector* Next () = 0; 00557 00562 virtual const csVector3& GetLastPosition () const = 0; 00563 00565 virtual void Reset () = 0; 00566 }; 00567 00570 #endif // __CS_IENGINE_SECTOR_H__
Generated for Crystal Space by doxygen 1.4.7