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
BeamXML Namespace Reference

Enumerations

enum  Names {
  UNKNOWN, WEAPONS, BEAM, BALL,
  BOLT, PROJECTILE, APPEARANCE, ENERGY,
  DAMAGE, DISTANCE, NAME, SOUNDMP3,
  SOUNDWAV, WEAPSIZE, XFILE, RED,
  GREEN, BLUE, ALPHA, SPEED,
  OFFSETX, OFFSETY, OFFSETZ, PULSESPEED,
  RADIALSPEED, RANGE, RADIUS, RATE,
  STABILITY, LONGRANGE, CONSUMPTION, REFIRE,
  LENGTH, PHASEDAMAGE, VOLUME, DETONATIONRADIUS,
  LOCKTIME, ROLE, ANTIROLE, TEXTURESTRETCH
}
 

Functions

void beginElementXML_Char (void *userData, const XML_Char *name, const XML_Char **atts)
 
void beginElement (void *userData, const char *name, const char **atts)
 
void endElement (void *userData, const XML_Char *name)
 

Variables

const EnumMap::Pair element_names []
 
const EnumMap::Pair attribute_names []
 
const EnumMap element_map (element_names, 10)
 
const EnumMap attribute_map (attribute_names, 32)
 
Hashtable< string, weapon_info, 257 > lookuptable
 
string curname
 
weapon_info tmpweapon (weapon_info::BEAM)
 
int level = -1
 

Enumeration Type Documentation

Enumerator
UNKNOWN 
WEAPONS 
BEAM 
BALL 
BOLT 
PROJECTILE 
APPEARANCE 
ENERGY 
DAMAGE 
DISTANCE 
NAME 
SOUNDMP3 
SOUNDWAV 
WEAPSIZE 
XFILE 
RED 
GREEN 
BLUE 
ALPHA 
SPEED 
OFFSETX 
OFFSETY 
OFFSETZ 
PULSESPEED 
RADIALSPEED 
RANGE 
RADIUS 
RATE 
STABILITY 
LONGRANGE 
CONSUMPTION 
REFIRE 
LENGTH 
PHASEDAMAGE 
VOLUME 
DETONATIONRADIUS 
LOCKTIME 
ROLE 
ANTIROLE 
TEXTURESTRETCH 

Definition at line 129 of file weapon_xml.cpp.

130 {
131  UNKNOWN,
132  WEAPONS,
133  BEAM,
134  BALL,
135  BOLT,
136  PROJECTILE,
137  APPEARANCE,
138  ENERGY,
139  DAMAGE,
140  DISTANCE,
141  NAME,
142  SOUNDMP3,
143  SOUNDWAV,
144  WEAPSIZE,
145  XFILE,
146  RED,
147  GREEN,
148  BLUE,
149  ALPHA,
150  SPEED,
152  PULSESPEED,
153  RADIALSPEED,
154  RANGE,
155  RADIUS,
156  RATE,
157  STABILITY,
158  LONGRANGE,
159  CONSUMPTION,
160  REFIRE,
161  LENGTH,
162  PHASEDAMAGE,
163  VOLUME,
165  LOCKTIME,
166  ROLE, ANTIROLE,
168 
169 };

Function Documentation

void BeamXML::beginElement ( void *  userData,
const char *  name,
const char **  atts 
)

Definition at line 242 of file weapon_xml.cpp.

References weapon_info::a, ALPHA, ANTIROLE, APPEARANCE, attribute_map, AUDCreateSoundMP3(), AUDCreateSoundWAV(), weapon_info::b, weapon_info::BALL, BALL, weapon_info::BEAM, BEAM, BLUE, weapon_info::BOLT, BOLT, color_step, CONSUMPTION, counts, curname, weapon_info::Damage, DAMAGE, DETONATIONRADIUS, DISTANCE, element_map, ENERGY, weapon_info::EnergyRate, weapon_info::file, weapon_info::g, Gamma_Needed, VegaConfig::getVariable(), GREEN, int, weapon_info::Length, LENGTH, level, weapon_info::LockTime, LOCKTIME, weapon_info::Longrange, LONGRANGE, XMLSupport::EnumMap::lookup(), lookupMountSize(), weapon_info::MntSize(), NAME, weapon_info::offset, OFFSETX, OFFSETY, OFFSETZ, XMLSupport::parse_bool(), XMLSupport::parse_float(), weapon_info::PhaseDamage, PHASEDAMAGE, weapon_info::PROJECTILE, PROJECTILE, weapon_info::PulseSpeed, PULSESPEED, weapon_info::r, weapon_info::RadialSpeed, RADIALSPEED, weapon_info::Radius, RADIUS, weapon_info::Range, RANGE, RATE, ROLES::readBitmask(), RED, REFIRE, ROLE, weapon_info::role_bits, weapon_info::sound, SOUNDMP3, SOUNDWAV, weapon_info::Speed, SPEED, weapon_info::Stability, STABILITY, weapon_info::TextureStretch, TEXTURESTRETCH, tmpweapon, weapon_info::type, weapon_info::Type(), weapon_info::UNKNOWN, UNKNOWN, weapon_info::volume, VOLUME, vs_config, VSFileSystem::vs_fprintf(), weapon_info::weapon_name, WEAPONS, WEAPSIZE, and XFILE.

Referenced by beginElementXML_Char(), and LoadAccounts().

243 {
244  static float game_speed = XMLSupport::parse_float( vs_config->getVariable( "physics", "game_speed", "1" ) );
245  static bool adj_gun_speed =
246  XMLSupport::parse_bool( vs_config->getVariable( "physics", "gun_speed_adjusted_game_speed", "false" ) );
247  static float gun_speed =
248  XMLSupport::parse_float( vs_config->getVariable( "physics", "gun_speed", "1" ) )*(adj_gun_speed ? game_speed : 1);
249  static int gamma = (int) ( 20*XMLSupport::parse_float( vs_config->getVariable( "graphics", "weapon_gamma", "1.35" ) ) );
250  AttributeList attributes( atts );
251  enum weapon_info::WEAPON_TYPE weaptyp;
252  Names elem = (Names) element_map.lookup( string( name ) );
253 #ifdef TESTBEAMSONLY
254  if (elem == BOLT)
255  elem = BEAM;
256 #endif
257  AttributeList::const_iterator iter;
258  switch (elem)
259  {
260  case UNKNOWN:
261  break;
262  case WEAPONS:
263  level++;
264  break;
265  case BOLT:
266  case BEAM:
267  case BALL:
268  case PROJECTILE:
269  level++;
270  switch (elem)
271  {
272  case BOLT:
273  weaptyp = weapon_info::BOLT;
274  break;
275  case BEAM:
276  weaptyp = weapon_info::BEAM;
277  break;
278  case BALL:
279  weaptyp = weapon_info::BALL;
280  break;
281  case PROJECTILE:
282  weaptyp = weapon_info::PROJECTILE;
283  break;
284  default:
285  weaptyp = weapon_info::UNKNOWN;
286  break;
287  }
288  tmpweapon.Type( weaptyp );
289  for (iter = attributes.begin(); iter != attributes.end(); iter++) {
290  switch ( attribute_map.lookup( (*iter).name ) )
291  {
292  case UNKNOWN:
293  VSFileSystem::vs_fprintf( stderr, "Unknown Weapon Element %s", (*iter).name.c_str() );
294  break;
295  case NAME:
296  curname = (*iter).value;
298  break;
299  case ROLE:
300  tmpweapon.role_bits = ROLES::readBitmask( iter->value );
301  break;
302  case ANTIROLE:
303  tmpweapon.role_bits = ROLES::readBitmask( iter->value );
305  break;
306  case WEAPSIZE:
307  tmpweapon.MntSize( lookupMountSize( (*iter).value.c_str() ) );
308  break;
309  default:
310  break;
311  }
312  }
313  break;
314  case APPEARANCE:
315  level++;
316  counts++;
317  for (iter = attributes.begin(); iter != attributes.end(); iter++) {
318  switch ( attribute_map.lookup( (*iter).name ) )
319  {
320  case UNKNOWN:
321  VSFileSystem::vs_fprintf( stderr, "Unknown Weapon Element %s", (*iter).name.c_str() );
322  break;
323  case XFILE:
324  tmpweapon.file = (*iter).value;
325  break;
326  case SOUNDMP3:
328  break;
329  case SOUNDWAV:
331  break;
332  case OFFSETX:
333  tmpweapon.offset.i = XMLSupport::parse_float( iter->value );
334  break;
335  case OFFSETY:
336  tmpweapon.offset.j = XMLSupport::parse_float( iter->value );
337  break;
338  case OFFSETZ:
339  tmpweapon.offset.k = XMLSupport::parse_float( iter->value );
340  break;
341  case RED:
342  tmpweapon.r = XMLSupport::parse_float( (*iter).value );
343  break;
344  case GREEN:
345  tmpweapon.g = XMLSupport::parse_float( (*iter).value );
346  break;
347  case BLUE:
348  tmpweapon.b = XMLSupport::parse_float( (*iter).value );
349  break;
350  case ALPHA:
351  tmpweapon.a = XMLSupport::parse_float( (*iter).value );
352  break;
353  case TEXTURESTRETCH:
355  XMLSupport::parse_float( (*iter).value );
356  break;
357  default:
358  break;
359  }
360  }
361  if ( (gamma > 0) && Gamma_Needed( gamma, counts, 32 ) ) {
362  //approximate the color func
363  tmpweapon.b = (tmpweapon.b+color_step*5)/255.;
364  tmpweapon.g = (tmpweapon.g+color_step/5)/255.;
365  tmpweapon.r = (tmpweapon.r+color_step*2)/255.;
366  }
367  break;
368  case ENERGY:
369  level++;
370  for (iter = attributes.begin(); iter != attributes.end(); iter++) {
371  switch ( attribute_map.lookup( (*iter).name ) )
372  {
373  case UNKNOWN:
374  VSFileSystem::vs_fprintf( stderr, "Unknown Weapon Element %s", (*iter).name.c_str() );
375  break;
376  case CONSUMPTION:
377  tmpweapon.EnergyRate = XMLSupport::parse_float( (*iter).value );
378  break;
379  case RATE:
380  tmpweapon.EnergyRate = XMLSupport::parse_float( (*iter).value );
381  break;
382  case STABILITY:
383  tmpweapon.Stability = XMLSupport::parse_float( (*iter).value );
384  break;
385  case REFIRE:
386  tmpweapon.RefireRate = XMLSupport::parse_float( (*iter).value );
387  break;
388  case LOCKTIME:
389  tmpweapon.LockTime = XMLSupport::parse_float( (*iter).value );
390  break;
391  default:
392  break;
393  }
394  }
395  break;
396  case DAMAGE:
397  {
398  static float damagemodifier =
399  XMLSupport::parse_float( vs_config->getVariable( "physics", "weapon_damage_efficiency", "1.0" ) );
400  level++;
401  for (iter = attributes.begin(); iter != attributes.end(); iter++) {
402  switch ( attribute_map.lookup( (*iter).name ) )
403  {
404  case UNKNOWN:
405  VSFileSystem::vs_fprintf( stderr, "Unknown Weapon Element %s", (*iter).name.c_str() );
406  break;
407  case DAMAGE:
408  tmpweapon.Damage = damagemodifier*XMLSupport::parse_float( (*iter).value );
409  break;
410  case RADIUS:
411  tmpweapon.Radius = XMLSupport::parse_float( (*iter).value );
412  break;
413  case RADIALSPEED:
414  tmpweapon.RadialSpeed = XMLSupport::parse_float( (*iter).value );
415  break;
416  case PHASEDAMAGE:
417  tmpweapon.PhaseDamage = damagemodifier*XMLSupport::parse_float( (*iter).value );
418  break;
419  case RATE:
420  tmpweapon.Damage = damagemodifier*XMLSupport::parse_float( (*iter).value );
421  break;
422  case LONGRANGE:
423  tmpweapon.Longrange = XMLSupport::parse_float( (*iter).value );
424  break;
425  default:
426  break;
427  }
428  }
429  break;
430  }
431  case DISTANCE:
432  level++;
433  for (iter = attributes.begin(); iter != attributes.end(); iter++) {
434  switch ( attribute_map.lookup( (*iter).name ) )
435  {
436  case UNKNOWN:
437  VSFileSystem::vs_fprintf( stderr, "Unknown Weapon Element %s", (*iter).name.c_str() );
438  break;
439  case VOLUME:
440  tmpweapon.volume = XMLSupport::parse_float( (*iter).value );
441  break;
442  case SPEED:
443  tmpweapon.Speed = XMLSupport::parse_float( (*iter).value );
444  if (tmpweapon.Speed < 1000) {
445  tmpweapon.Speed = tmpweapon.Speed*(adj_gun_speed ? (1.0+gun_speed/1.25) : gun_speed);
446  } else {
447  if (tmpweapon.Speed < 2000) {
448  tmpweapon.Speed = tmpweapon.Speed*( adj_gun_speed ? (1.0+gun_speed/2.5) : (gun_speed) );
449  } else {
450  if (tmpweapon.Speed < 4000)
451  tmpweapon.Speed = tmpweapon.Speed*( adj_gun_speed ? (1.0+gun_speed/6.0) : (gun_speed) );
452  else if (tmpweapon.Speed < 8000)
453  tmpweapon.Speed = tmpweapon.Speed*( adj_gun_speed ? (1.0+gun_speed/17.0) : (gun_speed) );
454  }
455  }
456  break;
457  case PULSESPEED:
459  tmpweapon.PulseSpeed = XMLSupport::parse_float( (*iter).value );
460  break;
461  case DETONATIONRADIUS:
463  tmpweapon.PulseSpeed = XMLSupport::parse_float( (*iter).value );
464  break;
465  case RADIALSPEED:
466  tmpweapon.RadialSpeed = XMLSupport::parse_float( (*iter).value );
467  break;
468  case RANGE:
469  tmpweapon.Range = ( adj_gun_speed ? (1.0+gun_speed/16.0) : (gun_speed) )*XMLSupport::parse_float(
470  (*iter).value );
471  break;
472  case RADIUS:
473  tmpweapon.Radius = XMLSupport::parse_float( (*iter).value );
474  break;
475  case LENGTH:
476  tmpweapon.Length = XMLSupport::parse_float( (*iter).value );
477  break;
478  default:
479  break;
480  }
481  }
482  break;
483  default:
484  break;
485  }
486 }
void BeamXML::beginElementXML_Char ( void *  userData,
const XML_Char *  name,
const XML_Char **  atts 
)

Definition at line 226 of file weapon_xml.cpp.

References beginElement().

Referenced by LoadWeapons().

227 {
228  beginElement( userData, (const XML_Char*) name, (const XML_Char**) atts );
229 }
void BeamXML::endElement ( void *  userData,
const XML_Char *  name 
)

Definition at line 490 of file weapon_xml.cpp.

References APPEARANCE, BALL, BEAM, BOLT, curname, DAMAGE, DISTANCE, element_map, ENERGY, weapon_info::init(), level, XMLSupport::EnumMap::lookup(), lookuptable, PROJECTILE, strtoupper(), tmpweapon, UNKNOWN, and WEAPONS.

Referenced by LoadAccounts(), and LoadWeapons().

491 {
492  Names elem = (Names) element_map.lookup( name );
493  switch (elem)
494  {
495  case UNKNOWN:
496  break;
497  case WEAPONS:
498  level--;
499  break;
500  case BEAM:
501  case BOLT:
502  case BALL:
503  case PROJECTILE:
504  level--;
506  tmpweapon.init();
507  break;
508  case ENERGY:
509  case DAMAGE:
510  case DISTANCE:
511  case APPEARANCE:
512  level--;
513  break;
514  default:
515  break;
516  }
517 }

Variable Documentation

const EnumMap BeamXML::attribute_map(attribute_names, 32)

Referenced by beginElement().

const EnumMap::Pair BeamXML::attribute_names[]

Definition at line 184 of file weapon_xml.cpp.

string BeamXML::curname

Definition at line 222 of file weapon_xml.cpp.

Referenced by beginElement(), and endElement().

const EnumMap BeamXML::element_map(element_names, 10)

Referenced by beginElement(), and endElement().

const EnumMap::Pair BeamXML::element_names[]
Initial value:
= {
EnumMap::Pair( "UNKNOWN", UNKNOWN ),
EnumMap::Pair( "Beam", BEAM ),
EnumMap::Pair( "Ball", BALL ),
EnumMap::Pair( "Bolt", BOLT ),
EnumMap::Pair( "Missile", PROJECTILE ),
EnumMap::Pair( "Weapons", WEAPONS ),
EnumMap::Pair( "Appearance", APPEARANCE ),
EnumMap::Pair( "Energy", ENERGY ),
EnumMap::Pair( "Damage", DAMAGE ),
EnumMap::Pair( "Distance", DISTANCE )
}

Definition at line 171 of file weapon_xml.cpp.

Hashtable< string, weapon_info, 257 > BeamXML::lookuptable

Definition at line 221 of file weapon_xml.cpp.

Referenced by endElement(), and getTemplate().

weapon_info BeamXML::tmpweapon(weapon_info::BEAM)

Referenced by beginElement(), and endElement().