ArtMOO
|
00001 00002 00006 #ifndef OBJECTMANAGER_H 00007 #define OBJECTMANAGER_H 00008 00009 #include <QObject> 00010 #include <QMap> 00011 #include <QList> 00012 #include <QMutex> 00013 #include "object.h" 00014 #include "task.h" 00015 #include "taskentry.h" 00016 #include <QAbstractItemModel> 00017 00018 class ObjectManager : public QAbstractItemModel 00019 { 00020 Q_OBJECT 00021 00022 explicit ObjectManager( QObject *parent = 0 ); 00023 00024 public: 00025 typedef QMap<ObjectId,Object*> ObjectMap; 00026 typedef QList<Object *> ObjectList; 00027 typedef QList<ObjectId> ObjectIdList; 00028 00029 static ObjectManager *instance( void ); 00030 00031 ObjectId newObjectId( void ); 00032 00033 Object *newObject( void ); 00034 00035 void load( const QString &pDataFileName ); 00036 void save( const QString &pDataFileName ); 00037 void clear( void ); 00038 00039 static void reset( void ); 00040 00041 inline static Object *o( ObjectId pId ) 00042 { 00043 return( instance()->object( pId ) ); 00044 } 00045 00046 inline Object *object( ObjectId pIndex ) const 00047 { 00048 return( mObjMap.value( pIndex, 0 ) ); 00049 } 00050 00051 void recycle( Object *pObject ); 00052 00053 void recycleObjects( void ); 00054 00055 inline size_t objectCount( void ) const 00056 { 00057 return( mObjMap.size() ); 00058 } 00059 00060 inline ObjectId maxId( void ) const 00061 { 00062 return( mObjNum ); 00063 } 00064 00066 00067 inline const ObjectList &players( void ) const 00068 { 00069 return( mPlayers ); 00070 } 00071 00072 void addPlayer( Object *pPlayer ); 00073 void remPlayer( Object *pPlayer ); 00074 00075 void topAdd( Object *pTop ); 00076 void topRem( Object *pTop ); 00077 00078 void luaMinimal( void ); 00079 signals: 00080 00081 public slots: 00082 void onFrame( qint64 pTimeStamp ); 00083 void doTask( TaskEntry &pTask ); 00084 void queueTask( TaskEntry &pTask ); 00085 bool killTask( TaskId pTaskId ); 00086 00087 private: 00088 // QAbstractItemModel 00089 00090 virtual QModelIndex index( int row, int column, const QModelIndex & parent = QModelIndex() ) const; 00091 virtual QModelIndex parent ( const QModelIndex & index ) const; 00092 virtual int rowCount ( const QModelIndex & parent = QModelIndex() ) const; 00093 virtual int columnCount ( const QModelIndex & parent = QModelIndex() ) const; 00094 virtual QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const; 00095 00096 00097 private: 00098 static ObjectManager *mInstance; 00099 00100 ObjectId mObjNum; 00101 ObjectMap mObjMap; 00102 ObjectList mObjTop; 00103 ObjectList mPlayers; 00104 ObjectIdList mRecycled; 00105 00106 QMutex mTaskMutex; 00107 int mTaskListId; 00108 QList<TaskEntry> mTaskList1; 00109 QList<TaskEntry> mTaskList2; 00110 QList<TaskEntry> mTaskQueue; 00111 }; 00112 00113 #endif // OBJECTMANAGER_H