CEL

Public API Reference

celtool/camera.h

00001 /*
00002     Crystal Space Entity Layer
00003     Copyright (C) 2005 by Jorrit Tyberghein
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public
00016     License along with this library; if not, write to the Free
00017     Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00018 */
00019 
00020 #ifndef __CEL_PF_CAMFACT__
00021 #define __CEL_PF_CAMFACT__
00022 
00023 #include "cstypes.h"
00024 #include "csutil/scf.h"
00025 #include "physicallayer/propclas.h"
00026 #include "physicallayer/propfact.h"
00027 #include "physicallayer/facttmpl.h"
00028 #include "celtool/stdpcimp.h"
00029 #include "ivaria/reporter.h"
00030 #include "propclass/camera.h"
00031 
00032 struct iCelEntity;
00033 struct iObjectRegistry;
00034 struct iGraphics3D;
00035 struct iEngine;
00036 struct iVirtualClock;
00037 struct iCamera;
00038 struct iView;
00039 struct iPcRegion;
00040 struct iPcZoneManager;
00041 class csView;
00042 
00046 struct celPcCameraCommon: public celPcCommon
00047 {
00048 protected:
00049   csRef<iGraphics3D> g3d;
00050   csRef<iEngine> engine;
00051   csRef<iVirtualClock> vc;
00052   csRef<iView> view;
00053   bool rect_set;
00054   int rect_x, rect_y, rect_w, rect_h;
00055 
00056   // Fields for the far plane.
00057   struct
00058   {
00059 #define FP_MAX_DIST 10000.0     // Maximum visibile distance.
00060 #define FP_INIT_DIST 200.0      // We start from this value.
00061     bool use_farplane;          // If true then we use a farplane.
00062     float fixed_distance;       // If < 0 then we use adaptive system.
00063     // All fields below are for adaptive only.
00064     float min_fps, max_fps;     // Acceptable FPS interval.
00065     float min_dist;             // Minimum acceptiable distance.
00066     bool fps_valid;             // First frame we don't know fps yet.
00067     float smooth_fps;           // To have less chaotic FPS changes.
00068     float current_distance;     // Remember current distance.
00069     csTicks accumulated_elapsed;// Accumulated elapsed time.
00070   } fp;
00071 
00072   csWeakRef<iPcRegion> region;
00073   csWeakRef<iPcZoneManager> zonemgr;
00074 
00075   bool clear_zbuf, clear_screen;
00076 
00077 public:
00078   static void Report(iObjectRegistry* reg, const char* msg, ...);
00079 
00080   celPcCameraCommon (iObjectRegistry* object_reg);
00081   virtual ~celPcCameraCommon ();
00082 
00083   bool SetRegion (iPcRegion* region, bool point, const char* name);
00084   bool SetZoneManager (iPcZoneManager* zonemgr, bool point,
00085         const char* regionname, const char* name);
00086   bool SetZoneManager (const char* entityname, bool point,
00087         const char* regionname, const char* name);
00088   void SetRectangle (int x, int y, int w, int h);
00089 
00090   iCamera* GetCamera () const;
00091   iView* GetView () const { return view; }
00092 
00093   void SetClearZBuffer (bool flag) { clear_zbuf = flag; }
00094   bool GetClearZBuffer () const { return clear_zbuf; }
00095   void SetClearScreen (bool flag) { clear_screen = flag; }
00096   bool GetClearScreen () const { return clear_screen; }
00097 
00098   // For distance clipping.
00099   void SetDistanceClipping (float dist);
00100   void AdaptDistanceClipping (csTicks elapsed_time);
00101 
00102   void DisableDistanceClipping ();
00103   void EnableFixedDistanceClipping (float dist);
00104   void EnableAdaptiveDistanceClipping (float min_fps,
00105         float max_fps, float min_dist);
00106   bool UseDistanceClipping () const { return fp.use_farplane; }
00107   bool UseFixedDistanceClipping () const
00108   {
00109     return fp.use_farplane && fp.fixed_distance >= 0.0f;
00110   }
00111   float GetFixedDistance () const { return fp.fixed_distance; }
00112   float GetAdaptiveMinFPS () const { return fp.min_fps; }
00113   float GetAdaptiveMaxFPS () const { return fp.max_fps; }
00114   float GetAdaptiveMinDistance () const { return fp.min_dist; }
00115 
00116   void SetAutoDraw (bool auto_draw);
00117 
00122   void SaveCommon (iCelDataBuffer* databuf);
00127   bool LoadCommon (iCelDataBuffer* databuf);
00128 
00129   virtual void Draw ();
00130 
00131   virtual const char* GetName () const { return "pccamera"; }
00132   virtual csPtr<iCelDataBuffer> Save ();
00133   virtual bool Load (iCelDataBuffer* databuf);
00134   virtual void TickEveryFrame ();
00135 };
00136 
00137 #endif // __CEL_PF_CAMFACT__
00138 

Generated for CEL: Crystal Entity Layer by doxygen 1.4.7