vegastrike  0.5.1.r1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
star_system_generic.h
Go to the documentation of this file.
1 #ifndef _GENERICSYSTEM_H_
2 #define _GENERICSYSTEM_H_
3 #include "config.h"
4 #include <expat.h>
5 #include <string>
6 #include <vector>
7 #include "xml_support.h"
8 #include "gfxlib_struct.h"
9 #include "gfx/vec.h"
10 #include "cmd/collection.h"
11 #include "cmd/container.h"
12 #include <map>
13 class Stars;
14 class Planet;
15 class ClickList;
16 class Unit;
17 class Background;
18 class Terrain;
19 class ContinuousTerrain;
20 class Universe;
21 class CollideMap;
22 class Texture;
23 //class TextPlane;
25 {
26  std::string meshname;
27  double scale;
28  float er;
29  float eg;
30  float eb;
31  float ea;
32  float dr;
33  float dg;
34  float db;
35  float da;
36  double focus;
37  double concavity;
40  int min_alpha;
41  int max_alpha;
43 };
44 
46 //class Atmosphere;
52 const unsigned int SIM_QUEUE_SIZE = 128;
54 {
55 protected:
57  struct StarXML
58  {
59  Terrain *parentterrain;
60  ContinuousTerrain *ct;
61  int unitlevel;
62  std::vector< GFXLight >lights;
63  std::vector< Planet* > moons;
64  std::string backgroundname;
68  Vector cursun;
69  float timeofyear;
70  float reflectivity;
72  int numstars;
73  bool fade;
74  float starsp;
75  float scale;
76  std::vector< AtmosphericFogMesh >fog;
77  std::vector< bool >conditionStack;
79  }
80  *xml;
81  void LoadXML( const char*, const Vector &centroid, const float timeofyear );
82  void beginElement( const std::string &name, const AttributeList &attributes );
83  void endElement( const std::string &name );
84 
85 public:
86  struct Statistics
87  {
88  //neutral, friendly, enemy
89  std::vector< UnitContainer >navs[3];
90  vsUMap< std::string, UnitContainer >jumpPoints;
100  size_t checkIter;
101  size_t navCheckIter;
102  Statistics();
103  void AddUnit( Unit *un );
104  void RemoveUnit( Unit *un );
105  void CheckVitals( StarSystem *ss );
106  }
107  stats;
108  StarSystem();
109  StarSystem( const char *filename, const Vector &centroid = Vector( 0, 0, 0 ), const float timeofyear = 0 );
110  virtual ~StarSystem();
111 protected:
115 
117 
118 protected:
119  std::vector< Terrain* >terrains;
120  std::vector< ContinuousTerrain* >contterrains;
122  UnitCollection drawList;
123  UnitCollection GravitationalUnits;
124  UnitCollection physics_buffer[SIM_QUEUE_SIZE+1];
125  unsigned int current_sim_location;
127  unsigned char no_collision_time;
129  char *name;
130  std::string filename;
131  un_iter sigIter;
133  double time;
135 //Background * bg;
137  Stars *stars;
139 //Texture *LightMap[6];
140  void AddStarsystemToUniverse( const std::string &filename );
142  friend class Universe;
144  std::vector< class MissileEffect* >dischargedMissiles;
145  unsigned int zone; //short fix
146 public:
147  std::multimap< Unit*, Unit* >last_collisions;
148 //short fix
149  void SetZone( unsigned int zonenum )
150  {
151  this->zone = zonenum;
152  }
153  unsigned int GetZone()
154  {
155  //short fix
156  return this->zone;
157  }
158  virtual void AddMissileToQueue( class MissileEffect* );
159  virtual void UpdateMissiles();
160  void UpdateUnitPhysics( bool firstframe );
162  void RequestPhysics( Unit *un, unsigned int queue );
163  virtual void activateLightMap( int stage = 1 ) {}
164  virtual Texture * getLightMap()
165  {
166  return NULL;
167  }
169  virtual unsigned int numTerrain()
170  {
171  return 0;
172  }
173  virtual unsigned int numContTerrain()
174  {
175  return 0;
176  }
178  virtual void Draw( bool DrawCockpit = true ) {}
180  void Update( float priority, bool executeDirector );
181 //This one is temporarly used on server side
182  void Update( float priority );
184  virtual void SwapIn() {}
186  virtual void SwapOut() {}
187  virtual Terrain * getTerrain( unsigned int which )
188  {
189  return NULL;
190  }
191  virtual ContinuousTerrain * getContTerrain( unsigned int which )
192  {
193  return NULL;
194  }
195  virtual Background * getBackground()
196  {
197  return NULL;
198  }
199  virtual ClickList * getClickList()
200  {
201  return NULL;
202  }
204  unsigned int getCurrentSimFrame() const
205  {
206  return current_sim_location;
207  }
208 
209  void ExecuteUnitAI();
210  class CollideTable*collidetable;
211 //0 = UNIT_ONLY 1 = UNIT_BOLT...use enum from Unit::
212  CollideMap *collidemap[2];
213  class bolt_draw*bolts;
214  static void beginElement( void *userData, const XML_Char *name, const XML_Char **atts );
215  static void endElement( void *userData, const XML_Char *name );
216  std::string getFileName() const;
217  std::string getName();
219  UnitCollection& getUnitList()
220  {
221  return drawList;
222  }
223  UnitCollection& gravitationalUnits()
224  {
225  return GravitationalUnits;
226  }
227  Unit * nextSignificantUnit();
230  void AddUnit( Unit *unit );
232  bool RemoveUnit( Unit *unit );
233  bool JumpTo( Unit *unit, Unit *jumppoint, const std::string &system, bool force = false, bool save_coordinates = false /*for intersystem transit the long way*/ );
234  static void ProcessPendingJumps();
235  virtual void VolitalizeJumpAnimation( const int ani ) {}
236  virtual void DoJumpingComeSightAndSound( Unit *un ) {}
237  virtual int DoJumpingLeaveSightAndSound( Unit *un )
238  {
239  return -1;
240  }
241 //friend class Atmosphere;
243 };
244 bool PendingJumpsEmpty();
245 double calc_blend_factor( double frac, int priority, unsigned int when_it_will_be_simulated, int cur_simulation_frame );
246 #endif
247