00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __IENGINE_PORTAL_H__
00020 #define __IENGINE_PORTAL_H__
00021
00022 #include "csutil/scf.h"
00023 #include "iutil/objref.h"
00024
00025 class csReversibleTransform;
00026
00032 #define CS_PORTAL_CLIPDEST 0x00000001
00033
00042 #define CS_PORTAL_ZFILL 0x00000002
00043
00050 #define CS_PORTAL_WARP 0x00000004
00051
00057 #define CS_PORTAL_MIRROR 0x00000008
00058
00065 #define CS_PORTAL_STATICDEST 0x00000010
00066
00067 class csTransform;
00068 class csMatrix3;
00069 class csVector3;
00070 class csFlags;
00071 struct iTextureHandle;
00072 struct iSector;
00073 struct iPolygon3D;
00074 struct iPortal;
00075 struct iFrustumView;
00076 struct iObject;
00077
00078 SCF_VERSION (iPortalCallback, 0, 0, 1);
00079
00087 struct iPortalCallback : public iBase
00088 {
00090 virtual bool Traverse (iPortal* portal, iBase* context) = 0;
00091 };
00092
00093 SCF_VERSION (iPortal, 0, 0, 7);
00094
00102 struct iPortal : public iReference
00103 {
00105 virtual iObject *QueryObject () = 0;
00106
00108 virtual iSector* GetSector () const = 0;
00109
00114 virtual void SetSector (iSector* s) = 0;
00115
00117 virtual csFlags& GetFlags () = 0;
00118
00124 virtual void SetPortalCallback (iPortalCallback* cb) = 0;
00125
00127 virtual iPortalCallback* GetPortalCallback () const = 0;
00128
00134 virtual void SetMissingSectorCallback (iPortalCallback* cb) = 0;
00135
00137 virtual iPortalCallback* GetMissingSectorCallback () const = 0;
00138
00140 virtual void SetFilter (iTextureHandle* ft) = 0;
00142 virtual iTextureHandle* GetTextureFilter () const = 0;
00143
00145 virtual void SetFilter (float r, float g, float b) = 0;
00147 virtual void GetColorFilter (float &r, float &g, float &b) const = 0;
00148
00149
00150
00155 virtual void SetWarp (const csMatrix3 &m_w, const csVector3 &v_w_before,
00156 const csVector3 &v_w_after) = 0;
00161 virtual void SetWarp (const csTransform& t) = 0;
00162
00164 virtual void SetMirror (iPolygon3D *iPoly) = 0;
00165
00167 virtual const csReversibleTransform &GetWarp () const = 0;
00168
00170 virtual void ObjectToWorld (const csReversibleTransform& t) = 0;
00171
00173 virtual void HardTransform (const csReversibleTransform& t) = 0;
00174
00176 virtual csVector3 Warp (const csVector3& pos) const = 0;
00177
00188 virtual void WarpSpace (csReversibleTransform& t, bool& mirror) const = 0;
00189
00190
00191
00197 virtual bool CompleteSector (iBase* context) = 0;
00198
00204 virtual void CheckFrustum (iFrustumView* lview, int alpha) = 0;
00205 };
00206
00207 #endif // __IENGINE_PORTAL_H__