00001
00008 #ifndef _CWORLD_H
00009 #define _CWORLD_H
00010
00021 typedef unsigned long long OID;
00022
00023 class cWorld;
00024 #include "psi3d/macros.h"
00025 #include "cObject.h"
00026
00027 #include <list>
00028 #include <map>
00029 #include <string>
00030 #include <vector>
00031
00032 #include <kdtree.h>
00033
00034 class cBackground;
00035 class cObject;
00036 class cMission;
00037
00042 class cWorld {
00043 public:
00044
00045
00046 struct rMessage {
00047 OID mSerial;
00048
00049
00050 std::string mText;
00051 };
00052
00053 std::list<rMessage*> mMessages;
00054
00057 static cWorld* instance;
00058
00060 cBackground* mBackground;
00061
00062
00063
00064
00065
00067 cMission* mMission;
00068
00070 std::vector<float> mGravity;
00071
00073 float mAirdensity;
00074
00076 float mGndfriction;
00077
00079 std::map<OID, cObject*> mIndex;
00080
00082 std::list<cObject*> mObjects;
00083
00085 std::list<cObject*> mCorpses;
00086
00088 kdtree<cObject*>* mCluster;
00089
00091 float mViewdistance;
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00111 unsigned int mYear;
00112
00114 unsigned int mDay;
00115
00117 unsigned int mHour;
00118
00120 unsigned int mMinute;
00121
00123 unsigned int mSecond;
00124
00126 unsigned int mMSec;
00127
00129 unsigned int mFrame;
00130
00132 unsigned int mDeltacycle;
00133
00135 float mSPF;
00136
00138 float mFPS;
00139
00140 public:
00141
00142 cWorld();
00143
00144 public:
00145
00147 OID getOID();
00148
00149 public:
00150
00151 void sendMessage(const char* format, ...);
00152 void sendMessageT(const char* text);
00153
00154 public:
00155
00162 void spawnObject(cObject *object);
00163
00174 void fragObject(cObject *object);
00175
00181 void bagFragged();
00182
00183 public:
00184
00186 void advanceTime(int deltamsec);
00188 void animateObjects();
00190 void transformObjects();
00192 void drawBack();
00194 void drawSolid(cObject* camera, std::list<cObject*>* objects = NULL);
00196 void drawEffect(cObject* camera, std::list<cObject*>* objects = NULL);
00197
00198 public:
00199
00205 std::string getNames(std::list<cObject*>* objects = NULL);
00206
00212 std::list<cObject*>* filterByRole(cObject* ex, unsigned long rolemask, bool all, int maxamount, std::list<cObject*>* objects = NULL);
00213
00217 std::list<cObject*>* filterByRange(cObject* ex, float* origin, float minrange, float maxrange, int maxamount, std::list<cObject*>* objects = NULL);
00218
00223 std::list<cObject*>* filterByName(cObject* ex, char* name, int maxamount, std::list<cObject*>* objectlist = NULL);
00224
00230 std::list<cObject*>* filterByBeam(cObject* ex, float* pointa, float* pointb, float radius, int maxamount, std::list<cObject*>* objects = NULL);
00231 };
00232
00233 #endif