Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
star_system_xml.cpp File Reference
#include <expat.h>
#include "xml_support.h"
#include "star_system_generic.h"
#include "cmd/planet_generic.h"
#include "cmd/unit_factory.h"
#include "vs_globals.h"
#include "vsfilesystem.h"
#include "configxml.h"
#include "vegastrike.h"
#include <assert.h>
#include "gfx/mesh.h"
#include "cmd/building_generic.h"
#include "cmd/ai/aggressive.h"
#include "cmd/ai/fire.h"
#include "cmd/nebula_generic.h"
#include "cmd/asteroid_generic.h"
#include "cmd/enhancement_generic.h"
#include "cmd/script/flightgroup.h"
#include "universe_util.h"
#include "cmd/atmosphere.h"
#include "options.h"
#include <stdlib.h>
#include <string>
#include <vector>
#include <map>

Go to the source code of this file.

Namespaces

 StarXML
 

Constant Groups

 StarXML
 

Enumerations

enum  StarXML::Names {
  StarXML::UNKNOWN, StarXML::XFILE, StarXML::X, StarXML::Y,
  StarXML::Z, StarXML::RI, StarXML::RJ, StarXML::RK,
  StarXML::SI, StarXML::SJ, StarXML::SK, StarXML::QI,
  StarXML::QJ, StarXML::QK, StarXML::NAME, StarXML::DIRECTION,
  StarXML::RADIUS, StarXML::GRAVITY, StarXML::YEAR, StarXML::DAY,
  StarXML::PPOSITION, StarXML::SYSTEM, StarXML::PLANET, StarXML::UNIT,
  StarXML::EMRED, StarXML::EMGREEN, StarXML::EMBLUE, StarXML::EMALPHA,
  StarXML::SRED, StarXML::SGREEN, StarXML::SBLUE, StarXML::SALPHA,
  StarXML::SPOWER, StarXML::BACKGROUND, StarXML::BACKGROUND_COLOR, StarXML::BACKGROUND_DEGAMMA,
  StarXML::STARS, StarXML::STARSPREAD, StarXML::NEARSTARS, StarXML::FADESTARS,
  StarXML::REFLECTIVITY, StarXML::ALPHA, StarXML::DESTINATION, StarXML::JUMP,
  StarXML::FACTION, StarXML::LIGHT, StarXML::COLL, StarXML::ATTEN,
  StarXML::DIFF, StarXML::SPEC, StarXML::AMB, StarXML::TERRAIN,
  StarXML::CONTTERRAIN, StarXML::MASS, StarXML::BUILDING, StarXML::VEHICLE,
  StarXML::ATMOSPHERE, StarXML::NEBULA, StarXML::NEBFILE, StarXML::ASTEROID,
  StarXML::SCALEX, StarXML::NUMWRAPS, StarXML::DIFFICULTY, StarXML::REFLECTNOLIGHT,
  StarXML::ENHANCEMENT, StarXML::SCALEATMOS, StarXML::SCALESYSTEM, StarXML::CITYLIGHTS,
  StarXML::INSIDEOUT, StarXML::INNERRADIUS, StarXML::OUTERRADIUS, StarXML::NUMSLICES,
  StarXML::RING, StarXML::SPACEELEVATOR, StarXML::WRAPX, StarXML::WRAPY,
  StarXML::FOG, StarXML::FOGELEMENT, StarXML::FOCUS, StarXML::CONCAVITY,
  StarXML::MINALPHA, StarXML::MAXALPHA, StarXML::DIRED, StarXML::DIGREEN,
  StarXML::DIBLUE, StarXML::DIALPHA, StarXML::TAILMODESTART, StarXML::TAILMODEEND,
  StarXML::OPTICALILLUSION, StarXML::SERIAL, StarXML::VARNAME, StarXML::VARVALUE,
  StarXML::CONDITION, StarXML::EXPRESSION, StarXML::TECHNIQUE, StarXML::OVERRIDE
}
 

Functions

const vector< string > & ParseDestinations (const string &value)
 
void bootstrap_draw (const string &message, Animation *SplashScreen=NULL)
 
void disableTerrainDraw (ContinuousTerrain *ct)
 
FlightgroupgetStaticBaseFlightgroup (int faction)
 
FlightgroupgetStaticNebulaFlightgroup (int faction)
 
FlightgroupgetStaticAsteroidFlightgroup (int faction)
 
template<typename T >
static bool EvalCondition (const char *op, const T &left, const T &right)
 
static bool ConfigCondition (const string &cond)
 
static bool ConfigAllows (string var, float val)
 
static Vector ComputeRotVel (float rotvel, const QVector &r, const QVector &s)
 
static void GetLights (const vector< GFXLight > &origlights, vector< GFXLightLocal > &curlights, const char *str, float lightSize)
 
UnitgetTopLevelOwner ()
 
BLENDFUNC parse_alpha (const char *)
 
static void SetSubunitRotation (Unit *un, float difficulty)
 
void parse_dual_alpha (const char *alpha, BLENDFUNC &blendSrc, BLENDFUNC &blendDst)
 
int GetNumNearStarsScale ()
 
int GetNumStarsScale ()
 
float GetStarSpreadScale ()
 
float ScaleOrbitDist (bool autogenerated)
 
float ScaleJumpRadius (float radius)
 

Variables

vs_options game_options
 needed for assert() calls. More...
 
const EnumMap::Pair StarXML::element_names []
 
const EnumMap::Pair StarXML::attribute_names []
 
const EnumMap StarXML::element_map (element_names, sizeof(element_names)/sizeof(element_names[0]))
 
const EnumMap StarXML::attribute_map (attribute_names, sizeof(attribute_names)/sizeof(attribute_names[0]))
 

Function Documentation

void bootstrap_draw ( const string &  message,
Animation SplashScreen = NULL 
)
static Vector ComputeRotVel ( float  rotvel,
const QVector r,
const QVector s 
)
static

Definition at line 370 of file star_system_xml.cpp.

References QVector, and Vector.

371 {
372  if ( (r.i || r.j || r.k) && (s.i || s.j || s.k) ) {
373  QVector retval = r.Cross( s );
374  retval.Normalize();
375  retval = retval*rotvel;
376  return retval.Cast();
377  } else {
378  return Vector( 0, rotvel, 0 );
379  }
380 }
static bool ConfigAllows ( string  var,
float  val 
)
static

Definition at line 355 of file star_system_xml.cpp.

References VegaConfig::getVariable(), invert(), XMLSupport::parse_floatf(), vs_config, and x.

356 {
357  bool invert = false;
358  if (var.length() == 0)
359  return true;
360  if (var[0] == '-') {
361  var = var.substr( 1 );
362  invert = true;
363  }
364  float x = XMLSupport::parse_floatf( vs_config->getVariable( "graphics", var, "0.0" ) );
365  if (var.length() == 0)
366  return true;
367  return invert ? -x >= val : x >= val;
368 }
static bool ConfigCondition ( const string &  cond)
static

Definition at line 324 of file star_system_xml.cpp.

References VegaConfig::getVariable(), XMLSupport::parse_floatf(), and vs_config.

325 {
326  if ( cond.empty() )
327  return true;
328  char varname[64];
329  char op[3];
330  char varval[64];
331  bool ok = 3 == sscanf( cond.c_str(), "%63[-a-zA-Z_0-9] %2[<>=!] %63[-0-9.Ee]",
332  varname,
333  op,
334  varval );
335  if (!ok)
336  return false;
337  //finalize character strings, for security
338  varname[sizeof (varname)/sizeof (*varname)-1] = 0;
339  op[sizeof (op)/sizeof (*op)-1] = 0;
340  varval[sizeof (varval)/sizeof (*varval)-1] = 0;
341  //try to parse varval - if not parseable as float, assume it's a string
342  char *endptr = 0;
343  bool rv;
344  if (endptr == varval) {
345  string sval = vs_config->getVariable( "graphics", varname, "0.0" );
346  rv = EvalCondition< string > ( op, sval, varval );
347  } else {
348  float fval = XMLSupport::parse_floatf( vs_config->getVariable( "graphics", varname, "0.0" ) );
349  float fref = XMLSupport::parse_floatf( varval );
350  rv = EvalCondition< float > ( op, fval, fref );
351  }
352  return rv;
353 }
void disableTerrainDraw ( ContinuousTerrain ct)

Definition at line 390 of file cont_terrain.cpp.

References ContinuousTerrain::DisableDraw().

391 {
392  ct->DisableDraw();
393 }
template<typename T >
static bool EvalCondition ( const char *  op,
const T &  left,
const T &  right 
)
static

Definition at line 272 of file star_system_xml.cpp.

273 {
274  switch (op[0])
275  {
276  case '>':
277  switch (op[1])
278  {
279  case 0:
280  return left > right;
281 
282  case '=':
283  return left >= right;
284 
285  default:
286  return false;
287  }
288  case '=':
289  switch (op[1])
290  {
291  case 0:
292  case '=':
293  return left == right;
294 
295  default:
296  return false;
297  }
298  case '<':
299  switch (op[1])
300  {
301  case 0:
302  return left < right;
303 
304  case '=':
305  return left <= right;
306 
307  default:
308  return false;
309  }
310  case '!':
311  switch (op[1])
312  {
313  case '=':
314  return left != right;
315 
316  default:
317  return false;
318  }
319  default:
320  return false;
321  }
322 }
static void GetLights ( const vector< GFXLight > &  origlights,
vector< GFXLightLocal > &  curlights,
const char *  str,
float  lightSize 
)
static

Definition at line 382 of file star_system_xml.cpp.

References GFXLightLocal::islocal, GFXLightLocal::ligh, and GFXLight::setSize().

383 {
384  int tint;
385  char isloc;
386  char *tmp = strdup( str );
387  GFXLightLocal lloc;
388  char *st = tmp;
389  int numel;
390  while ( ( numel = sscanf( st, "%d%c", &tint, &isloc ) ) > 0 ) {
391  assert( tint < (int) origlights.size() );
392  lloc.ligh = origlights[tint];
393  lloc.islocal = (numel > 1 && isloc == 'l');
394 
395  lloc.ligh.setSize(lightSize);
396 
397  curlights.push_back( lloc );
398  while ( isspace( *st ) )
399  ++st;
400  while ( isalnum( *st ) )
401  ++st;
402  }
403  free( tmp );
404 }
int GetNumNearStarsScale ( )

Definition at line 440 of file star_system_xml.cpp.

References vs_options::num_near_stars.

Referenced by StarSystem::LoadXML().

441 {
443 }
int GetNumStarsScale ( )

Definition at line 445 of file star_system_xml.cpp.

References vs_options::num_far_stars.

Referenced by StarSystem::LoadXML().

446 {
448 }
float GetStarSpreadScale ( )

Definition at line 450 of file star_system_xml.cpp.

References vs_options::game_speed, and vs_options::star_spreading.

Referenced by StarSystem::LoadXML().

451 {
453 }
Flightgroup* getStaticAsteroidFlightgroup ( int  faction)

Definition at line 195 of file star_system_generic.cpp.

References StarSystemGent::faction, and setStaticFlightgroup().

196 {
197  static vector< Flightgroup* >fg;
198  setStaticFlightgroup( fg, "Asteroid", faction );
199  return fg[faction];
200 }
Flightgroup* getStaticBaseFlightgroup ( int  faction)

Definition at line 172 of file star_system_generic.cpp.

References StarSystemGent::faction, and setStaticFlightgroup().

173 {
174  //warning mem leak...not big O(num factions)
175  static vector< Flightgroup* >fg;
176  setStaticFlightgroup( fg, "Base", faction );
177  return fg[faction];
178 }
Flightgroup* getStaticNebulaFlightgroup ( int  faction)

Definition at line 188 of file star_system_generic.cpp.

References StarSystemGent::faction, and setStaticFlightgroup().

189 {
190  static vector< Flightgroup* >fg;
191  setStaticFlightgroup( fg, "Nebula", faction );
192  return fg[faction];
193 }
Unit* getTopLevelOwner ( )

Definition at line 320 of file star_system_generic.cpp.

321 {
322  return (Unit*) 0x31337; //FIXME How about telling us a little story behind this function? --chuck_starchaser
323 }
BLENDFUNC parse_alpha ( const char *  )

Definition at line 146 of file mesh_xml.cpp.

References CONSTALPHA, CONSTCOLOR, DESTALPHA, DESTCOLOR, INVCONSTALPHA, INVCONSTCOLOR, INVDESTALPHA, INVDESTCOLOR, INVSRCALPHA, INVSRCCOLOR, ONE, SRCALPHA, SRCALPHASAT, SRCCOLOR, and ZERO.

147 {
148  if (strcmp( tmp, "ZERO" ) == 0)
149  return ZERO;
150  if (strcmp( tmp, "ONE" ) == 0)
151  return ONE;
152  if (strcmp( tmp, "SRCCOLOR" ) == 0)
153  return SRCCOLOR;
154  if (strcmp( tmp, "INVSRCCOLOR" ) == 0)
155  return INVSRCCOLOR;
156  if (strcmp( tmp, "SRCALPHA" ) == 0)
157  return SRCALPHA;
158  if (strcmp( tmp, "INVSRCALPHA" ) == 0)
159  return INVSRCALPHA;
160  if (strcmp( tmp, "DESTALPHA" ) == 0)
161  return DESTALPHA;
162  if (strcmp( tmp, "INVDESTALPHA" ) == 0)
163  return INVDESTALPHA;
164  if (strcmp( tmp, "DESTCOLOR" ) == 0)
165  return DESTCOLOR;
166  if (strcmp( tmp, "INVDESTCOLOR" ) == 0)
167  return INVDESTCOLOR;
168  if (strcmp( tmp, "SRCALPHASAT" ) == 0)
169  return SRCALPHASAT;
170  if (strcmp( tmp, "CONSTALPHA" ) == 0)
171  return CONSTALPHA;
172  if (strcmp( tmp, "INVCONSTALPHA" ) == 0)
173  return INVCONSTALPHA;
174  if (strcmp( tmp, "CONSTCOLOR" ) == 0)
175  return CONSTCOLOR;
176  if (strcmp( tmp, "INVCONSTCOLOR" ) == 0)
177  return INVCONSTCOLOR;
178  return ZERO;
179 }
void parse_dual_alpha ( const char *  alpha,
BLENDFUNC blendSrc,
BLENDFUNC blendDst 
)

Definition at line 420 of file star_system_xml.cpp.

References d, INVSRCALPHA, ONE, parse_alpha(), SRCALPHA, and ZERO.

421 {
422  blendSrc = ONE;
423  blendDst = ZERO;
424  if (alpha == NULL) {} else if (alpha[0] == '\0') {} else {
425  char *s = strdup( alpha );
426  char *d = strdup( alpha );
427  blendSrc = SRCALPHA;
428  blendDst = INVSRCALPHA;
429  if ( 2 == sscanf( alpha, "%s %s", s, d ) ) {
430  if (strcmp( s, "true" ) != 0) {
431  blendSrc = parse_alpha( s );
432  blendDst = parse_alpha( d );
433  }
434  }
435  free( s );
436  free( d );
437  }
438 }
const vector< string >& ParseDestinations ( const string &  value)

Definition at line 178 of file galaxy.cpp.

179 {
180  static vector< string >rv;
181  rv.clear();
182  string::size_type pos = 0, sep;
183  while ( ( sep = value.find( ' ', pos ) ) != string::npos ) {
184  rv.push_back( value.substr( pos, sep-pos ) );
185  pos = sep+1;
186  }
187  if ( pos < value.length() )
188  rv.push_back( value.substr( pos ) );
189  return rv;
190 }
float ScaleJumpRadius ( float  radius)

Definition at line 64 of file star_system_generic.cpp.

References VegaConfig::getVariable(), XMLSupport::parse_float(), and vs_config.

65 {
66  static float jump_radius_scale = parse_float( vs_config->getVariable( "physics", "jump_radius_scale", "2" ) );
67  static float game_speed = parse_float( vs_config->getVariable( "physics", "game_speed", "1" ) );
68  //need this because sys scale doesn't affect j-point size
69  radius *= jump_radius_scale*game_speed;
70  return radius;
71 }
float ScaleOrbitDist ( bool  autogenerated)

Definition at line 455 of file star_system_xml.cpp.

References vs_options::autogen_compactness, and vs_options::runtime_compactness.

456 {
457  if (autogenerated)
460 }
static void SetSubunitRotation ( Unit un,
float  difficulty 
)
static

Definition at line 408 of file star_system_xml.cpp.

References float, Unit::getSubUnits(), Unit::SetAngularVelocity(), Vector, x, y, and z.

409 {
410  Unit *unit;
411  for (un_iter iter = un->getSubUnits(); (unit = *iter); ++iter) {
412  float x = 2*difficulty*( (float) rand() )/RAND_MAX-difficulty;
413  float y = 2*difficulty*( (float) rand() )/RAND_MAX-difficulty;
414  float z = 2*difficulty*( (float) rand() )/RAND_MAX-difficulty;
415  unit->SetAngularVelocity( Vector( x, y, z ) );
416  SetSubunitRotation( unit, difficulty );
417  }
418 }

Variable Documentation

vs_options game_options

needed for assert() calls.

Draws cockpit parts Draws gauges, info strings, radar, ...

Definition at line 83 of file main.cpp.