Main Page   Class Hierarchy   Compound List   File List   Compound Members  

portal.h

00001 /*
00002     Copyright (C) 1998-2001 by Jorrit Tyberghein
00003   
00004     This library is free software; you can redistribute it and/or
00005     modify it under the terms of the GNU Library General Public
00006     License as published by the Free Software Foundation; either
00007     version 2 of the License, or (at your option) any later version.
00008   
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013   
00014     You should have received a copy of the GNU Library General Public
00015     License along with this library; if not, write to the Free
00016     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
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   //---- misc. manipulation functions ---------------------------------------
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   //---- space warping ------------------------------------------------------
00120 
00122   const csReversibleTransform& GetWarp () const;
00123 
00128   void SetWarp (const csTransform& t);
00129 
00130   /*
00131    * Set the warping transformation for this portal in object space and world
00132    * space.
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   //------------------- iPortal implementation -----------------------
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__

Generated for Crystal Space by doxygen 1.2.5 written by Dimitri van Heesch, ©1997-2000