00001
00009 #ifndef _CWORLD_H
00010 #define _CWORLD_H
00011
00022 typedef unsigned long long OID;
00023
00024 class cWorld;
00025 #include "psi3d/macros.h"
00026 #include "cObject.h"
00027
00028 #include <list>
00029 #include <set>
00030 #include <map>
00031 #include <string>
00032 #include <vector>
00033 #include <queue>
00034 #include <iostream>
00035
00036 #include "psi3d/kdtree.h"
00037
00038 class cBackground;
00039 class cObject;
00040 class cMission;
00041
00046 class cWorld {
00047 public:
00050 static cWorld* instance;
00051
00052 public:
00054
00055 struct rMessage {
00057 OID mSender;
00059 OID mReceiver;
00061 OID mGroup;
00063 OID mTimestamp;
00065 OID mBestbefore;
00067 std::string mText;
00069 void* mBlob;
00070
00072 bool operator()(rMessage const* a, rMessage const* b) const {
00073 return a->mTimestamp > b->mTimestamp;
00074 }
00075 };
00076
00078 std::priority_queue<rMessage*, std::vector<rMessage*>, cWorld::rMessage> mMessages;
00079 std::list<rMessage*> mDispatchedMessages;
00080
00082
00083 struct rGroup {
00085 OID mID;
00087 std::string mName;
00089 std::set<OID> mMembers;
00090 };
00091
00094 std::map<OID, rGroup*> mGroups;
00095
00097 cBackground* mBackground;
00098
00099
00100
00101
00102
00104 cMission* mMission;
00105
00107 std::vector<float> mGravity;
00108
00110 float mAirdensity;
00111
00113 float mGndfriction;
00114
00116 std::map<OID, cObject*> mIndex;
00117
00119 std::list<cObject*> mObjects;
00120
00122 std::list<cObject*> mCorpses;
00123
00125 kdtree<cObject*>* mCluster;
00126
00128 std::list<cObject*> mUncluster;
00129
00131 float mViewdistance;
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00151 unsigned int mYear;
00152
00154 unsigned int mDay;
00155
00157 unsigned int mHour;
00158
00160 unsigned int mMinute;
00161
00163 unsigned int mSecond;
00164
00166 unsigned int mMSec;
00167
00169 unsigned int mFrame;
00170
00172 unsigned int mDeltacycle;
00173
00175 float mSPF;
00176
00178 float mFPS;
00179
00180 public:
00181
00182 cWorld();
00183
00184 public:
00185
00187 OID getOID();
00188
00189 public:
00190
00199 void sendMessage(OID delay, OID sender , OID groupid , const char* format, ...);
00200
00209 void sendMessageT(OID delay, OID sender , OID groupid , std::string text, void* blob = NULL);
00210
00211 public:
00212
00219 void spawnObject(cObject *object);
00220
00231 void fragObject(cObject *object);
00232
00238 void bagFragged();
00239
00240 public:
00241
00243 void advanceTime(int deltamsec);
00245 void clusterObjects();
00247 void dispatchMessages();
00249 void animateObjects();
00251 void transformObjects();
00253 void drawBack();
00255 void drawSolid(cObject* camera, std::list<cObject*>* objects = NULL);
00257 void drawEffect(cObject* camera, std::list<cObject*>* objects = NULL);
00258
00259 public:
00260
00266 std::string getNames(std::list<cObject*>* objects = NULL);
00267
00273 std::list<cObject*>* filterByRole(cObject* ex, std::set<OID>* rolemask, bool all, int maxamount, std::list<cObject*>* objects = NULL);
00274
00278 std::list<cObject*>* filterByRange(cObject* ex, float* origin, float minrange, float maxrange, int maxamount, std::list<cObject*>* objects = NULL);
00279
00284 std::list<cObject*>* filterByName(cObject* ex, char* name, int maxamount, std::list<cObject*>* objectlist = NULL);
00285
00291 std::list<cObject*>* filterByBeam(cObject* ex, float* pointa, float* pointb, float radius, int maxamount, std::list<cObject*>* objects = NULL);
00292 };
00293
00294 #endif