Sirikata
libogre/include/sirikata/ogre/ResourceDownloadPlanner.hpp
Go to the documentation of this file.
00001 // Copyright (c) 2009 Sirikata Authors. All rights reserved.
00002 // Use of this source code is governed by a BSD-style license that can
00003 // be found in the LICENSE file.
00004 
00005 #ifndef _RESOURCE_DOWNLOAD_PLANNER_HPP
00006 #define _RESOURCE_DOWNLOAD_PLANNER_HPP
00007 
00008 #include <sirikata/core/service/PollingService.hpp>
00009 #include <sirikata/core/service/Context.hpp>
00010 #include <sirikata/ogre/Camera.hpp>
00011 #include <sirikata/core/transfer/URI.hpp>
00012 #include <sirikata/proxyobject/ProxyObject.hpp>
00013 
00014 namespace Sirikata {
00015 namespace Graphics {
00016 
00017 class Entity;
00018 
00026 class SIRIKATA_OGRE_EXPORT ResourceDownloadPlanner : public PollingService
00027 {
00028 public:
00029     ResourceDownloadPlanner(Context* c, OgreRenderer* renderer);
00030     ~ResourceDownloadPlanner();
00031 
00032     virtual void addNewObject(Graphics::Entity *ent, const Transfer::URI& mesh);
00033     virtual void addNewObject(ProxyObjectPtr p, Graphics::Entity *mesh);
00034     virtual void updateObject(ProxyObjectPtr p);
00035     virtual void removeObject(ProxyObjectPtr p);
00036     virtual void removeObject(Graphics::Entity* mesh);
00037     virtual void setCamera(Graphics::Camera *entity);
00038 
00039     //PollingService interface
00040     virtual void poll();
00041     virtual void start();
00042     virtual void stop();
00043 
00044     virtual int32 maxObjects();
00045     virtual void setMaxObjects(int32 new_max);
00046 
00047     OgreRenderer* getScene() const { return mScene; }
00048 
00049     struct Stats {
00050         uint32 totalObjects;
00051         uint32 unloadedObjects;
00052         uint32 loadingObjects;
00053         uint32 loadedObjects;
00054 
00055         uint32 totalAssets;
00056         uint32 loadingAssets;
00057         uint32 loadedAssets;
00058     };
00059     virtual Stats stats() = 0;
00060 protected:
00061     Context* mContext;
00062     OgreRenderer* mScene;
00063     Graphics::Camera *camera;
00064     int32 mMaxLoaded;
00065 
00066     typedef boost::recursive_mutex RMutex;
00067     //prevents multiple threads from simultaneously accessing
00068     //mObjects,mLoadedObjects,mWatingObjects,and assetMap.  can always split
00069     //this into multiple mutexes if performance suffers.
00070     RMutex mDlPlannerMutex;
00071 };
00072 
00073 } // namespace Graphics
00074 } // namespace Sirikata
00075 
00076 #endif