00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_ENGINE_PORTAL_H__
00020 #define __CS_ENGINE_PORTAL_H__
00021
00022 #include "csutil/scf.h"
00023 #include "iutil/objref.h"
00024
00025 class csReversibleTransform;
00026 class csPlane3;
00027
00033 #define CS_PORTAL_CLIPDEST 0x00000001
00034
00043 #define CS_PORTAL_ZFILL 0x00000002
00044
00051 #define CS_PORTAL_WARP 0x00000004
00052
00058 #define CS_PORTAL_MIRROR 0x00000008
00059
00066 #define CS_PORTAL_STATICDEST 0x00000010
00067
00077 #define CS_PORTAL_FLOAT 0x00000020
00078
00079 class csTransform;
00080 class csMatrix3;
00081 class csVector3;
00082 class csFlags;
00083 struct iTextureHandle;
00084 struct iSector;
00085 struct iPolygon3D;
00086 struct iPortal;
00087 struct iFrustumView;
00088 struct iObject;
00089
00090 SCF_VERSION (iPortalCallback, 0, 0, 1);
00091
00099 struct iPortalCallback : public iBase
00100 {
00105 virtual bool Traverse (iPortal* portal, iBase* context) = 0;
00106 };
00107
00108 SCF_VERSION (iPortal, 0, 3, 0);
00109
00117 struct iPortal : public iReference
00118 {
00120 virtual iObject *QueryObject () = 0;
00121
00123 virtual iSector* GetSector () const = 0;
00124
00129 virtual const csVector3* GetVertices () const = 0;
00130
00135 virtual int* GetVertexIndices () const = 0;
00136
00140 virtual int GetVertexIndicesCount () const = 0;
00141
00146 virtual void SetSector (iSector* s) = 0;
00147
00149 virtual csFlags& GetFlags () = 0;
00150
00157 virtual void SetMaximumSectorVisit (int msv) = 0;
00159 virtual int GetMaximumSectorVisit () const = 0;
00160
00167 virtual void SetPortalCallback (iPortalCallback* cb) = 0;
00168
00172 virtual void RemovePortalCallback (iPortalCallback* cb) = 0;
00173
00175 virtual int GetPortalCallbackCount () const = 0;
00176
00178 virtual iPortalCallback* GetPortalCallback (int idx) const = 0;
00179
00186 virtual void SetMissingSectorCallback (iPortalCallback* cb) = 0;
00187
00191 virtual void RemoveMissingSectorCallback (iPortalCallback* cb) = 0;
00192
00194 virtual int GetMissingSectorCallbackCount () const = 0;
00195
00197 virtual iPortalCallback* GetMissingSectorCallback (int idx) const = 0;
00198
00200 virtual void SetFilter (iTextureHandle* ft) = 0;
00202 virtual iTextureHandle* GetTextureFilter () const = 0;
00203
00205 virtual void SetFilter (float r, float g, float b) = 0;
00207 virtual void GetColorFilter (float &r, float &g, float &b) const = 0;
00208
00209
00210
00215 virtual void SetWarp (const csMatrix3 &m_w, const csVector3 &v_w_before,
00216 const csVector3 &v_w_after) = 0;
00221 virtual void SetWarp (const csTransform& t) = 0;
00222
00224 virtual void SetMirror (const csPlane3& plane) = 0;
00225
00227 virtual const csReversibleTransform &GetWarp () const = 0;
00228
00230 virtual void HardTransform (const csReversibleTransform& t) = 0;
00231
00236 virtual void ObjectToWorld (const csReversibleTransform& t,
00237 csReversibleTransform& warp_wor) const = 0;
00238
00243 virtual csVector3 Warp (const csReversibleTransform& t,
00244 const csVector3& pos) const = 0;
00245
00257 virtual void WarpSpace (const csReversibleTransform& warp_wor,
00258 csReversibleTransform& t, bool& mirror) const = 0;
00259
00260
00261
00267 virtual bool CompleteSector (iBase* context) = 0;
00268
00275 virtual void CheckFrustum (iFrustumView* lview,
00276 const csReversibleTransform& t, int alpha) = 0;
00277
00287 virtual iPolygon3D* HitBeam (const csReversibleTransform& t,
00288 const csVector3& start, const csVector3& end,
00289 csVector3& isect) = 0;
00290
00291 };
00292
00293 #endif // __CS_ENGINE_PORTAL_H__
00294