ArtMOO
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
G:/dev/qt/MOO/ServerCore/objectmanager.h
Go to the documentation of this file.
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