Sirikata
|
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