Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

base/Universe

Go to the documentation of this file.
00001 /****************************************************************************
00002   Copyright (C)1996 David Jung <opensim@pobox.com>
00003 
00004   This program/file is free software; you can redistribute it and/or modify
00005   it under the terms of the GNU General Public License as published by
00006   the Free Software Foundation; either version 2 of the License, or
00007   (at your option) any later version.
00008         
00009   This program 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
00012   GNU General Public License for more details. (http://www.gnu.org)
00013         
00014   You should have received a copy of the GNU General Public License
00015   along with this program; if not, write to the Free Software
00016   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018   $Id: Universe 1029 2004-02-11 20:45:54Z jungd $
00019   $Revision: 1.4 $
00020   $Date: 2004-02-11 15:45:54 -0500 (Wed, 11 Feb 2004) $
00021   $Author: jungd $
00022  
00023 ****************************************************************************/
00024 
00025 #ifndef _BASE_UNIVERSE_
00026 #define _BASE_UNIVERSE_
00027 
00028 #include <base/base>
00029 #include <base/reflist>
00030 #include <base/Object>
00031 #include <base/Simulatable>
00032 #include <base/VFileSystem>
00033 #include <base/Cache>
00034 #include <base/PathName>
00035 #include <base/World>
00036 
00037 #include <list>
00038 
00039 
00040 namespace base {
00041 
00042 
00043 class Universe : public Simulatable
00044 {
00045 public:
00046   Universe(ref<VFileSystem> fs, const String& resourceDirectoryName, const String& cacheDirectoryName="cache");
00047   virtual ~Universe();
00048   
00049   virtual String className() const { return String("Universe"); }
00050   virtual Object& clone() const { return *(Object*)this; } // singelton, just return THE instance 
00051 
00052 
00053   // Simulatable
00054   virtual void preSimulate();
00055   virtual void simulateForSimTime(const Time& dt);
00056   virtual void simulateForRealTime(const Time& dt, Real simTimeStepSize = minSimStepSize);
00057 
00058   void setResourceDirectory(const PathName& resourceDirectory);
00059   void setCacheDirectory(const PathName& cacheDirectory);
00060   ref<Cache> cache() { return masterCache; }
00061   ref<VFileSystem> filesystem() { return vfilesystem; }
00062 
00063   void addWorld(ref<World> world);
00064   ref<World> removeWorld(ref<World> world);
00065 
00066   void renderWorlds(); ///< render a single frame of  all Worlds ( renderFrame() )
00067 
00068   long renderedFrameCount() const { return frameCount; }
00069   static const int maxDisplayFrameRate = 30; // Hz
00070 
00071   void enableSimulationRendering(bool renderWorlds) { renderWorldsDuringSim=renderWorlds; }
00072   
00073   void addSimulatable(ref<Simulatable> simulatable);
00074   ref<Simulatable> removeSimulatable(ref<Simulatable> simulatable);
00075   
00076   Time simTime;
00077   
00078 protected:
00079 
00080 private:
00081   Universe(Universe& u) 
00082     : vfilesystem(u.vfilesystem), 
00083     renderWorldsDuringSim(true)
00084   {
00085     masterCache = ref<Cache>( NewNamedObj("masterCache") Cache(u.vfilesystem, u.masterCache->resourceDirectory(), u.masterCache->cacheDirectory() ) );
00086   }
00087 
00088 
00089   ref<VFileSystem> vfilesystem;
00090   ref<Cache>       masterCache;
00091 
00092   bool renderWorldsDuringSim;  // render Worlds during simulation?
00093 
00094   reflist<World> worlds;
00095   reflist<Simulatable> simulatables;
00096 
00097   Time startRealTime;
00098   long frameCount;
00099 
00100 };
00101 
00102 
00103 } // base
00104 
00105 #endif

Generated on Thu Jul 29 15:56:16 2004 for OpenSim by doxygen 1.3.6