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 float mViewdistance;
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00148 unsigned int mYear;
00149
00151 unsigned int mDay;
00152
00154 unsigned int mHour;
00155
00157 unsigned int mMinute;
00158
00160 unsigned int mSecond;
00161
00163 unsigned int mMSec;
00164
00166 unsigned int mFrame;
00167
00169 unsigned int mDeltacycle;
00170
00172 float mSPF;
00173
00175 float mFPS;
00176
00177 public:
00178
00179 cWorld();
00180
00181 public:
00182
00184 OID getOID();
00185
00186 public:
00187
00196 void sendMessage(OID sender , OID groupid , const char* format, ...);
00197
00206 void sendMessageT(OID sender , OID groupid , const char* text, void* blob = NULL);
00207
00208 public:
00209
00216 void spawnObject(cObject *object);
00217
00228 void fragObject(cObject *object);
00229
00235 void bagFragged();
00236
00237 public:
00238
00240 void advanceTime(int deltamsec);
00242 void clusterObjects();
00244 void dispatchMessages();
00246 void animateObjects();
00248 void transformObjects();
00250 void drawBack();
00252 void drawSolid(cObject* camera, std::list<cObject*>* objects = NULL);
00254 void drawEffect(cObject* camera, std::list<cObject*>* objects = NULL);
00255
00256 public:
00257
00263 std::string getNames(std::list<cObject*>* objects = NULL);
00264
00270 std::list<cObject*>* filterByRole(cObject* ex, unsigned long rolemask, bool all, int maxamount, std::list<cObject*>* objects = NULL);
00271
00275 std::list<cObject*>* filterByRange(cObject* ex, float* origin, float minrange, float maxrange, int maxamount, std::list<cObject*>* objects = NULL);
00276
00281 std::list<cObject*>* filterByName(cObject* ex, char* name, int maxamount, std::list<cObject*>* objectlist = NULL);
00282
00288 std::list<cObject*>* filterByBeam(cObject* ex, float* pointa, float* pointb, float radius, int maxamount, std::list<cObject*>* objects = NULL);
00289 };
00290
00291 #endif