00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_PORTAL_H__
00020 #define __CS_PORTAL_H__
00021
00022 #include "csgeom/transfrm.h"
00023 #include "csutil/flags.h"
00024 #include "csutil/csobject.h"
00025 #include "imesh/thing/portal.h"
00026
00027 class csPolygon2D;
00028 class csPolygon3D;
00029 class csStatLight;
00030 class csObject;
00031 class csMeshWrapper;
00032 struct iRenderView;
00033 struct iFrustumView;
00034
00039 class csPortal : public csObject
00040 {
00041 private:
00043 iSector* sector;
00044
00045 public:
00047 csFlags flags;
00048
00049 protected:
00051 csReversibleTransform warp_obj;
00053 csReversibleTransform warp_wor;
00055 iPortalCallback* sector_cb;
00057 iPortalCallback* portal_cb;
00058
00063 iTextureHandle* filter_texture;
00064
00068 float filter_r, filter_g, filter_b;
00069
00070 public:
00072 csPortal ();
00073
00075 virtual ~csPortal ();
00076
00077
00078
00080 iReferencedObject* GetReferencedObject () const;
00081
00083 void SetReferencedObject (iReferencedObject* b);
00084
00086 iSector* GetSector () const;
00087
00092 void SetSector (iSector* s);
00093
00095 csFlags& GetFlags ();
00096
00098 void SetPortalCallback (iPortalCallback* cb);
00099
00101 iPortalCallback* GetPortalCallback () const;
00102
00104 void SetMissingSectorCallback (iPortalCallback* cb);
00105
00107 iPortalCallback* GetMissingSectorCallback () const;
00108
00110 void SetFilter (iTextureHandle* ft);
00112 iTextureHandle* GetTextureFilter () const;
00113
00115 void SetFilter (float r, float g, float b);
00117 void GetColorFilter (float &r, float &g, float &b) const;
00118
00119
00120
00122 const csReversibleTransform& GetWarp () const;
00123
00128 void SetWarp (const csTransform& t);
00129
00130
00131
00132
00133
00134 void SetWarp (const csMatrix3 &m_w, const csVector3 &v_w_before,
00135 const csVector3 &v_w_after);
00136
00138 void SetMirror (iPolygon3D *iPoly);
00139
00141 void ObjectToWorld (const csReversibleTransform& t);
00142
00144 void HardTransform (const csReversibleTransform& t);
00145
00147 csVector3 Warp (const csVector3& pos) const;
00148
00159 void WarpSpace (csReversibleTransform& t, bool& mirror) const;
00160
00161
00162
00181 bool Draw (csPolygon2D* new_clipper, csPolygon3D* portal_polygon,
00182 iRenderView* rview);
00183
00191 csPolygon3D* HitBeam (const csVector3& start, const csVector3& end,
00192 csVector3& isect);
00193
00201 csMeshWrapper* HitBeam (const csVector3& start, const csVector3& end,
00202 csVector3& isect, csPolygon3D** polygonPtr);
00203
00209 bool CompleteSector (iBase* context);
00210
00216 void CheckFrustum (iFrustumView* lview, int alpha);
00217
00218 SCF_DECLARE_IBASE_EXT (csObject);
00219
00220
00221 struct Portal : public iPortal
00222 {
00223 SCF_DECLARE_EMBEDDED_IBASE (csPortal);
00224 virtual iReferencedObject* GetReferencedObject () const
00225 { return scfParent->GetReferencedObject (); }
00226 virtual void SetReferencedObject (iReferencedObject* b)
00227 { scfParent->SetReferencedObject (b); }
00228 virtual iObject *QueryObject () { return scfParent; }
00229 virtual iSector* GetSector () const { return scfParent->GetSector (); }
00230 virtual void SetSector (iSector* s) { scfParent->SetSector (s); }
00231 virtual csFlags& GetFlags () { return scfParent->GetFlags (); }
00232 virtual void SetPortalCallback (iPortalCallback* cb)
00233 {
00234 scfParent->SetPortalCallback (cb);
00235 }
00236 virtual iPortalCallback* GetPortalCallback () const
00237 {
00238 return scfParent->GetPortalCallback ();
00239 }
00240 virtual void SetMissingSectorCallback (iPortalCallback* cb)
00241 {
00242 scfParent->SetMissingSectorCallback (cb);
00243 }
00244 virtual iPortalCallback* GetMissingSectorCallback () const
00245 {
00246 return scfParent->GetMissingSectorCallback ();
00247 }
00248 virtual void SetFilter (iTextureHandle* ft)
00249 {
00250 scfParent->SetFilter (ft);
00251 }
00252 virtual iTextureHandle* GetTextureFilter () const
00253 {
00254 return scfParent->GetTextureFilter ();
00255 }
00256 virtual void SetFilter (float r, float g, float b)
00257 {
00258 scfParent->SetFilter (r, g, b);
00259 }
00260 virtual void GetColorFilter (float &r, float &g, float &b) const
00261 {
00262 scfParent->GetColorFilter (r, g, b);
00263 }
00264 virtual void SetWarp (const csMatrix3 &m_w, const csVector3 &v_w_before,
00265 const csVector3 &v_w_after)
00266 {
00267 scfParent->SetWarp (m_w, v_w_before, v_w_after);
00268 }
00269 virtual void SetWarp (const csTransform& t)
00270 {
00271 scfParent->SetWarp (t);
00272 }
00273 virtual void SetMirror (iPolygon3D *iPoly)
00274 {
00275 scfParent->SetMirror (iPoly);
00276 }
00277 virtual const csReversibleTransform &GetWarp () const
00278 {
00279 return scfParent->GetWarp ();
00280 }
00281 virtual void ObjectToWorld (const csReversibleTransform& t)
00282 {
00283 scfParent->ObjectToWorld (t);
00284 }
00285 virtual void HardTransform (const csReversibleTransform& t)
00286 {
00287 scfParent->HardTransform (t);
00288 }
00289 virtual csVector3 Warp (const csVector3& pos) const
00290 {
00291 return scfParent->Warp (pos);
00292 }
00293 virtual void WarpSpace (csReversibleTransform& t, bool& mirror) const
00294 {
00295 scfParent->WarpSpace (t, mirror);
00296 }
00297 virtual bool CompleteSector (iBase* context)
00298 {
00299 return scfParent->CompleteSector (context);
00300 }
00301 virtual void CheckFrustum (iFrustumView* lview, int alpha)
00302 {
00303 scfParent->CheckFrustum (lview, alpha);
00304 }
00305 } scfiPortal;
00306 };
00307
00308 #endif // __CS_PORTAL_H__