Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 4834 in orxonox.OLD


Ignore:
Timestamp:
Jul 11, 2005, 5:47:23 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: crosshair in WeaponManager (instead of World) and implemented easy Cyling for LoadParam

Location:
orxonox/trunk/src
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/glmenu/glmenu_imagescreen.cc

    r4597 r4834  
    184184void GLMenuImageScreen::step ()
    185185{
    186   this->currentValue++;
    187   this->draw();
     186  if (this->currentValue < this->maxValue)
     187  {
     188    this->currentValue++;
     189    this->draw();
     190  }
     191  else
     192    PRINTF(2)("ImageScreen-loadbar exceeds maximum value %d\n", this->maxValue);
    188193}
    189194
  • orxonox/trunk/src/lib/event/event_handler.h

    r4780 r4834  
    1212#include "event_def.h"
    1313
     14// FORWARD DECLARATION
    1415class EventListener;
    15 
     16template <class T> class tList;
    1617
    1718//! The one Event Handler from Orxonox
  • orxonox/trunk/src/lib/event/key_mapper.cc

    r4833 r4834  
    5757//! this is the mapping array from names to ids: enter all orxonox.conf keys here
    5858/** @todo use globals.h for this.... everything is done there for those Options,
    59  * and you do not have to care about The namings
     59 * and you do not have to care about The namings, as they might change
    6060 */
    6161orxKeyMapping map[] = {
    62   {&KeyMapper::PEV_UP,                   "Up"},
    63   {&KeyMapper::PEV_DOWN,                 "Down"},
    64   {&KeyMapper::PEV_LEFT,                 "Left"},
    65   {&KeyMapper::PEV_RIGHT,                "Right"},
     62  {&KeyMapper::PEV_UP,                   CONFIG_NAME_PLAYER_UP},
     63  {&KeyMapper::PEV_DOWN,                 CONFIG_NAME_PLAYER_DOWN},
     64  {&KeyMapper::PEV_LEFT,                 CONFIG_NAME_PLAYER_LEFT},
     65  {&KeyMapper::PEV_RIGHT,                CONFIG_NAME_PLAYER_RIGHT},
    6666  {&KeyMapper::PEV_STRAFE_LEFT,          "StrafeLeft"},
    6767  {&KeyMapper::PEV_STRAFE_RIGHT,         "StrafeRight"},
    6868
    69   {&KeyMapper::PEV_FIRE1,                "Fire"},
     69  {&KeyMapper::PEV_FIRE1,                CONFIG_NAME_PLAYER_FIRE},
    7070  {&KeyMapper::PEV_FIRE1,                "Fire1"},
    7171  {&KeyMapper::PEV_FIRE2,                "Fire2"},
     
    7474
    7575
    76   {&KeyMapper::PEV_VIEW0,                "view0"},
    77   {&KeyMapper::PEV_VIEW1,                "view1"},
    78   {&KeyMapper::PEV_VIEW2,                "view2"},
    79   {&KeyMapper::PEV_VIEW3,                "view3"},
    80   {&KeyMapper::PEV_VIEW4,                "view4"},
    81   {&KeyMapper::PEV_VIEW5,                "view5"},
    82 
    83   {&KeyMapper::PEV_NEXT_WORLD,           "Next-World"},
    84   {&KeyMapper::PEV_PREVIOUS_WORLD,       "Prev-World"},
    85 
    86   {&KeyMapper::PEV_PAUSE,                "Pause"},
    87   {&KeyMapper::PEV_QUIT,                 "Quit"},
     76  {&KeyMapper::PEV_VIEW0,                CONFIG_NAME_VIEW0},
     77  {&KeyMapper::PEV_VIEW1,                CONFIG_NAME_VIEW1},
     78  {&KeyMapper::PEV_VIEW2,                CONFIG_NAME_VIEW2},
     79  {&KeyMapper::PEV_VIEW3,                CONFIG_NAME_VIEW3},
     80  {&KeyMapper::PEV_VIEW4,                CONFIG_NAME_VIEW4},
     81  {&KeyMapper::PEV_VIEW5,                CONFIG_NAME_VIEW5},
     82
     83  {&KeyMapper::PEV_NEXT_WORLD,           CONFIG_NAME_NEXT_WORLD},
     84  {&KeyMapper::PEV_PREVIOUS_WORLD,       CONFIG_NAME_PREV_WORLD},
     85
     86  {&KeyMapper::PEV_PAUSE,                CONFIG_NAME_PAUSE},
     87  {&KeyMapper::PEV_QUIT,                 CONFIG_NAME_QUIT},
    8888  {NULL, NULL}
    8989};
  • orxonox/trunk/src/lib/graphics/graphics_engine.cc

    r4833 r4834  
    325325  glDisable(GL_CULL_FACE);
    326326  glDisable(GL_LIGHTING);  // will be set back when leaving 2D-mode
    327   glEnable(GL_TEXTURE_2D);
    328 
    329   /* This allows alpha blending of 2D textures with the scene */
    330   glEnable(GL_BLEND);
    331   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    332327
    333328  glViewport(0, 0, screen->w, screen->h);
     
    351346void GraphicsEngine::leave2DMode()
    352347{
     348  glMatrixMode(GL_PROJECTION);
     349  glPopMatrix();
     350
    353351  glMatrixMode(GL_MODELVIEW);
    354   glPopMatrix();
    355 
    356   glMatrixMode(GL_PROJECTION);
    357352  glPopMatrix();
    358353
     
    444439      this->geTextCFPS = TextEngine::getInstance()->createText("fonts/arial_black.ttf", 15, TEXT_DYNAMIC, 0, 255, 0);
    445440      this->geTextCFPS->setAlignment(TEXT_ALIGN_LEFT);
    446       this->geTextCFPS->setPosition(5, 500);
     441      this->geTextCFPS->setPosition(5, 5);
    447442      this->geTextMaxFPS = TextEngine::getInstance()->createText("fonts/arial_black.ttf", 15, TEXT_DYNAMIC, 0, 255, 0);
    448443      this->geTextMaxFPS->setAlignment(TEXT_ALIGN_LEFT);
    449       this->geTextMaxFPS->setPosition(5, 530);
     444      this->geTextMaxFPS->setPosition(5, 35);
    450445      this->geTextMinFPS = TextEngine::getInstance()->createText("fonts/arial_black.ttf", 35, TEXT_DYNAMIC, 0, 255, 0);
    451446      this->geTextMinFPS->setAlignment(TEXT_ALIGN_LEFT);
    452       this->geTextMinFPS->setPosition(5, 560);
     447      this->geTextMinFPS->setPosition(5, 65);
    453448#endif /* NO_TEXT */
    454449    }
  • orxonox/trunk/src/lib/graphics/graphics_engine.h

    r4833 r4834  
    6868
    6969    /** \brief swaps the GL_BUFFERS */
    70     static void swapBuffers() { SDL_GL_SwapBuffers(); };
     70    inline static void swapBuffers() { SDL_GL_SwapBuffers(); };
    7171
    7272    void process(const Event  &event);
  • orxonox/trunk/src/lib/graphics/importer/material.cc

    r4746 r4834  
    5757{
    5858  PRINTF(4)("delete Material %s.\n", this->getName());
     59
    5960  if (this->diffuseTexture)
    6061    ResourceManager::getInstance()->unload(this->diffuseTexture);
     62  if (this->ambientTexture)
     63    ResourceManager::getInstance()->unload(this->ambientTexture);
     64  if (this->specularTexture)
     65    ResourceManager::getInstance()->unload(this->specularTexture);
    6166}
    6267
     
    267272    ResourceManager::getInstance()->unload(this->diffuseTexture);
    268273
    269   //! \todo check if RESOURCE MANAGER is availiable
    270   //! \todo Textures from .mtl-file need special care.
    271   this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE);
     274  //! @todo check if RESOURCE MANAGER is availiable
     275  //! @todo Textures from .mtl-file need special care.
     276  if (dMap!= NULL)
     277    this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE);
     278  else
     279    this->diffuseTexture = NULL;
    272280}
    273281
  • orxonox/trunk/src/lib/graphics/importer/model.cc

    r4822 r4834  
    159159
    160160  this->materialList = new tList<Material>;
     161  this->materialsExtern = false;
    161162
    162163  if (this->type == MODEL_VERTEX_ARRAY)
     
    186187
    187188  // deleting the MaterialList
    188   PRINTF(5)("Deleting Materials.\n");
    189   tIterator<Material>* tmpIt = this->materialList->getIterator();
    190   Material* material = tmpIt->nextElement();
    191 
    192   //! \todo do we really have to delete this material??
    193   while(material)
     189  if (!this->materialsExtern)
     190  {
     191    PRINTF(5)("Deleting Materials.\n");
     192
     193    tIterator<Material>* tmpIt = this->materialList->getIterator();
     194    Material* material = tmpIt->nextElement();
     195  //! @todo do we really have to delete this material??
     196    while(material)
    194197    {
    195198      delete material;
    196199      material = tmpIt->nextElement();
    197200    }
    198   delete tmpIt;
     201    delete tmpIt;
     202  }
    199203  delete materialList;
    200204  delete this->pModelInfo;
     
    356360/**
    357361   \brief finalizes an Model.
    358    This funcion is needed, to delete all the Lists, and arrays that are no more needed because they are already imported into openGL. This will be applied at the end of the importing Process.
     362 * This funcion is needed, to delete all the Lists, and arrays that are no more
     363 * needed because they are already imported into openGL.
     364 * This will be applied at the end of the importing Process.
    359365*/
    360366bool Model::cleanup()
     
    372378   \param material the Material to add
    373379   \returns the added material
    374 
    375    !! beware the Material will be deleted when the Model gets deleted
     380 *
     381 * this also tells this Model, that all the Materials are handled externally
     382 * with this option set the Materials will not be deleted with the Model.
     383 * !! -> NO MATERIALS GET DELETED WITH ONE CALL TO THIS FUNCTION !!
    376384*/
    377385Material* Model::addMaterial(Material* material)
    378386{
    379387  this->materialList->add(material);
     388  this->materialsExtern = true;
    380389  return material;
    381390}
  • orxonox/trunk/src/lib/graphics/importer/model.h

    r4830 r4834  
    190190
    191191  tList<Material>* materialList;    //!< A list for all the Materials in this Model
     192  bool             materialsExtern; //!< If the materials given to this Object are extern.
    192193};
    193194
  • orxonox/trunk/src/lib/graphics/text_engine.cc

    r4830 r4834  
    919919  // entering 3D-mode
    920920  GraphicsEngine::enter2DMode();
     921  glEnable(GL_TEXTURE_2D);
     922  glEnable(GL_BLEND);
     923  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     924
    921925  // drawing all the texts
    922926  tIterator<Text>* textIterator = textList->getIterator();
  • orxonox/trunk/src/lib/particles/particle_engine.cc

    r4746 r4834  
    9696  }
    9797}
    98 
    99 
    10098
    10199/**
  • orxonox/trunk/src/story_entities/world.cc

    r4833 r4834  
    6969#include "class_list.h"
    7070
    71 #include "crosshair.h"
    72 Crosshair* crosshair=NULL;
    73 
    7471
    7572using namespace std;
     
    207204
    208205  ResourceManager::getInstance()->unloadAllByPriority(RP_LEVEL);
    209 
    210 
    211 
    212   crosshair=NULL;
    213206}
    214207
     
    242235  LoadParam<World>(root, "identifier", this, &World::setStoryID)
    243236    .describe("Sets the StoryID of this world");
     237
    244238  LoadParam<World>(root, "nextid", this, &World::setNextStoryID)
    245239    .describe("Sets the ID of the next world");
     240
    246241  LoadParam<World>(root, "path", this, &World::setPath)
    247242    .describe("The Filename of this World (relative from the data-dir)");
     
    278273
    279274  GraphicsEngine::getInstance()->displayFPS(true);
    280 
    281   if (!crosshair)
    282     crosshair = new Crosshair();
    283275}
    284276
     
    859851  ParticleEngine::getInstance()->draw();
    860852
    861   crosshair->draw();
    862853
    863854  TextEngine::getInstance()->draw();
     
    10551046
    10561047
    1057       crosshair->tick(this->dtS);
    1058 
    10591048      /** actualy the Graphics Engine should tick the world not the other way around...
    10601049         but since we like the things not too complicated we got it this way around
  • orxonox/trunk/src/util/loading/load_param.h

    r4746 r4834  
    3434//! macro that makes it even more easy to load a Parameter
    3535/**
    36    \param className the name of the class to load
    37    \param parameterName the name of the parameter to load as written in the XML-file
    38    \param function the function to call
    39 */
     36 * @param className the name of the class to load
     37 * @param parameterName the name of the parameter to load as written in the XML-file
     38 * @param function the function to call
     39 */
    4040#define LOAD_PARAM(className, parameterName, paramFunction) \
    4141        LoadParam<className>(root, #parameterName, this, &className::paramFunction)
     42
     43/**
     44 * this Starts a Cycle in the Loading Process
     45 * be aware, that in the cycle the first parameter of load_param should because
     46 * called element, and that you must say true at the Fith parameter, or it will fail
     47 * also you will have to close the Cycle again with LOAD_PARAM_END_CYCLE
     48 */
     49#define LOAD_PARAM_START_CYCLE   const TiXmlElement* element; \
     50                                 element = root->FirstChildElement(); \
     51                                 while( element != NULL) \
     52                                  {
     53/**
     54 * closes a LoadParam Loop
     55 * @see LOAD_PARAM_START_CYCLE
     56 */
     57#define LOAD_PARAM_END_CYCLE        element = element->NextSiblingElement(); \
     58                                  }
     59
     60
    4261
    4362/**
  • orxonox/trunk/src/util/track/track_manager.cc

    r4832 r4834  
    394394   \param root the TiXmlElement to load the Data from
    395395*/
    396 bool TrackManager::loadParams( TiXmlElement* root)
    397 {
    398   TiXmlElement* element;
    399   TiXmlNode* container;
     396bool TrackManager::loadParams(const TiXmlElement* root)
     397{
    400398  double x, y, z, d;
    401399
    402   element = root->FirstChildElement();
    403   while( element != NULL)
    404     {
     400  LOAD_PARAM_START_CYCLE
     401
    405402      LoadParam<TrackManager>(element, "WorkOn", this, &TrackManager::workOnS, true)
    406403        .describe("Selects a TrackElement (by name) to work on");
     
    448445        }
    449446      */
    450       element = element->NextSiblingElement();
    451     }
    452 
     447      LOAD_PARAM_END_CYCLE;
    453448}
    454449
  • orxonox/trunk/src/util/track/track_manager.h

    r4833 r4834  
    139139  inline static TrackManager* getInstance() { if (!singletonRef) singletonRef = new TrackManager();  return singletonRef; };
    140140
    141   bool loadParams(TiXmlElement* root);
     141  bool loadParams(const TiXmlElement* root);
    142142
    143143  // Methods to change the Path (initialisation)
  • orxonox/trunk/src/world_entities/player.cc

    r4826 r4834  
    5454
    5555  //weapons:
    56   this->weaponMan = new WeaponManager();
    5756  Weapon* wpRight = new TestGun(this, Vector(-2.6, 0.1, 3.0), Quaternion(), 0);
    5857  Weapon* wpLeft = new TestGun(this, Vector(-2.6, 0.1, -3.0), Quaternion(), 1);
     
    9089
    9190  //weapons:
    92   this->weaponMan = new WeaponManager();
    9391  Weapon* wpRight = new TestGun(this, Vector(-2.6, 0.1, 3.0), Quaternion(), 0);
    9492  Weapon* wpLeft = new TestGun(this, Vector(-2.6, 0.1, -3.0), Quaternion(), 1);
     
    114112  this->bWeaponChange = false;
    115113  acceleration = 10.0;
     114
     115
     116  this->weaponMan = new WeaponManager();
    116117}
    117118
  • orxonox/trunk/src/world_entities/player.h

    r4818 r4834  
    7575
    7676    Crosshair*  crosshair; //!< the crosshair of the player
    77 
    7877};
    7978
  • orxonox/trunk/src/world_entities/weapons/crosshair.cc

    r4832 r4834  
    4343}
    4444
    45 
    4645/**
    4746 * destroys a Crosshair
     
    6867
    6968  this->rotation = 0;
    70   this->rotationSpeed = 5;
     69  this->setRotationSpeed(5);
    7170  this->setSize(GraphicsEngine::getInstance()->getResolutionX()/10.0);
    7271
     
    155154void Crosshair::tick(float dt)
    156155{
     156  // let the crosshair rotate
    157157  this->rotation += dt * rotationSpeed;
    158158
    159159
    160 
    161 }
    162 
    163 /**
    164  * draws the crosshair
    165  */
    166 void Crosshair::draw()
    167 {
    168   /*
    169   const PNode* camera = State::getInstance()->getCamera();  //!< \todo MUST be different
    170   Vector cameraPos = camera->getAbsCoor();
    171   Vector cameraTargetPos = State::getInstance()->getCameraTarget()->getAbsCoor();
    172   Vector view = cameraTargetPos - cameraPos;
    173   Vector up = Vector(0, 1, 0);
    174   up = camera->getAbsDir().apply(up);
    175   Vector h = up.cross(view);
    176   Vector v = h.cross(view);
    177   h.normalize();
    178   v.normalize();
    179 
    180   float px = (position2D[0]-GraphicsEngine::getInstance()->getResolutionX()/2)*.05;
    181   float py = -(position2D[1]-GraphicsEngine::getInstance()->getResolutionY()/2)*.05;
    182 
    183   glBegin(GL_TRIANGLES);
    184   glVertex3f(cameraTargetPos.x - h.x*px - v.x*py,
    185   cameraTargetPos.y - h.y*px - v.y*py,
    186   cameraTargetPos.z - h.z*px - v.z*py);
    187 
    188   glVertex3f(cameraTargetPos.x - h.x*(px+1) - v.x*py,
    189   cameraTargetPos.y - h.y*(px+1) - v.y*py,
    190   cameraTargetPos.z - h.z*(px+1) - v.z*py);
    191 
    192   glVertex3f(cameraTargetPos.x - h.x*px - v.x*(py+1),
    193   cameraTargetPos.y - h.y*px - v.y*(py+1),
    194   cameraTargetPos.z - h.z*px - v.z*(py+1));
    195 
    196   glEnd();
    197 
    198   */
    199 
    200 
    201   GraphicsEngine::storeMatrices();
    202 
    203 ///  float z;
    204 //   glReadPixels ((int)position2D[0], GraphicsEngine::getInstance()->getResolutionY()-(int)position2D[1]-1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
    205 
    206 
    207   //cout << z <<"  "<< scale << "  "  << bias<< endl;
    208 
     160  float z;
     161  glReadPixels ((int)position2D[0], GraphicsEngine::getInstance()->getResolutionY()-(int)position2D[1]-1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
     162  //cout << z << endl;
    209163
    210164  GLdouble objX, objY, objZ;
     
    221175  this->setAbsCoor(objX, objY, objZ);
    222176
     177
     178}
     179
     180/**
     181 * draws the crosshair
     182 */
     183void Crosshair::draw()
     184{
     185  GraphicsEngine::storeMatrices();
     186
     187
     188
     189
    223190//   glBegin(GL_TRIANGLES);
    224191//   glColor3f(1,0,0);
     
    228195//   glEnd();
    229196
     197  this->debugDraw();
    230198
    231199  GraphicsEngine::enter2DMode();
     
    253221  glVertex2f(size, size);
    254222  glEnd();
    255   /*
    256   glBegin(GL_QUADS);
    257   {
    258     glColor4f(1,0,0,1);
    259     glVertex2f(position2D[0]-10, position2D[1]-10);
    260     glVertex2f(position2D[0]+10, position2D[1]-10);
    261     glVertex2f(position2D[0]+10, position2D[1]+10);
    262     glVertex2f(position2D[0]-10, position2D[1]+10);
    263 
    264     //     glVertex2f(pos[0]-10, pos[1]-10);
    265     //     glVertex2f(pos[0]-10, pos[1]+10);
    266     //     glVertex2f(pos[0]+10, pos[1]+10);
    267     //     glVertex2f(pos[0]+10, pos[1]-10);
    268   }
    269   glEnd();
    270   */
     223
    271224  GraphicsEngine::leave2DMode();
    272225}
  • orxonox/trunk/src/world_entities/weapons/weapon.cc

    r4832 r4834  
    1616
    1717#include "weapon.h"
    18 #include "weapon_manager.h"
    1918
     19#include "projectile.h"
     20
     21#include "load_param.h"
    2022#include "vector.h"
    21 #include "projectile.h"
    2223#include "list.h"
    2324#include "state.h"
  • orxonox/trunk/src/world_entities/weapons/weapon_manager.cc

    r4833 r4834  
    1919#include "weapon_manager.h"
    2020#include "weapon.h"
    21 
     21#include "crosshair.h"
     22
     23#include "load_param.h"
     24#include "factory.h"
    2225#include "vector.h"
    2326#include "list.h"
     
    5356      this->configs[i].slots[j] = NULL;
    5457  }
    55 }
    56 
     58
     59  // crosshair being a PNode it must not be deleted (this is because PNodes delete themselves.)
     60  //delete this->crosshair;
     61}
     62
     63/**
     64 * initializes the WeaponManager
     65 */
    5766void WeaponManager::init()
    5867{
     
    6675  }
    6776  this->currConfID = W_CONFIG0;
    68 
     77  this->crosshair = new Crosshair();
     78}
     79
     80/**
     81 *
     82 * @param root the XML-element to load from
     83 */
     84void WeaponManager::loadParams(const TiXmlElement* root)
     85{
     86  static_cast<BaseObject*>(this)->loadParams(root);
     87
     88  LoadParam<WeaponManager>(root, "slot-count", this, &WeaponManager::setSlotCount)
     89      .describe("how many slots(cannons) the WeaponManager can handle");
     90
     91  LOAD_PARAM_START_CYCLE;
     92
     93  LoadParam<WeaponManager>(root, "Weapons", this, &WeaponManager::loadWeapons)
     94      .describe("loads Weapons");
     95      // LoadParam<WeaponManager>(root, "Weapon", this, &WeaponManager::addWeapon);
     96
     97  LOAD_PARAM_END_CYCLE;
     98}
     99
     100/**
     101 * loads a Weapon onto the WeaponManager
     102 * @param root the XML-element to load the Weapons from
     103 */
     104void WeaponManager::loadWeapons(const TiXmlElement* root)
     105{
     106  LOAD_PARAM_START_CYCLE;
     107
     108  Weapon* newWeapon = dynamic_cast<Weapon*>(Factory::getFirst()->fabricate(element));
     109
     110
     111
     112  LOAD_PARAM_END_CYCLE;
     113}
     114
     115
     116/**
     117 * sets the number of Slots the WeaponManager has
     118 * @param nrOfSlots the number of slots
     119 */
     120void WeaponManager::setSlotCount(int nrOfSlots)
     121{
     122  this->nrOfSlots = nrOfSlots;
    69123}
    70124
     
    100154}
    101155
    102 
     156/**
     157 * removes a Weapon from the WeaponManager
     158 */
    103159void WeaponManager::removeWeapon(Weapon* weapon, int configID)
    104160{
     
    163219    if( firingWeapon != NULL) firingWeapon->fire();
    164220  }
     221  this->crosshair->setRotationSpeed(-500);
    165222}
    166223
     
    178235    if( w != NULL) w->tick(dt);
    179236  }
     237
     238  crosshair->tick(dt);
     239  crosshair->setRotationSpeed(5);
    180240}
    181241
     
    193253      w->draw();
    194254  }
     255  crosshair->draw();
    195256}
    196257
  • orxonox/trunk/src/world_entities/weapons/weapon_manager.h

    r4833 r4834  
    3232// FORWARD DECLARATION
    3333class Weapon;
     34class Crosshair;
    3435
    3536#define    W_MAX_SLOTS       8
     
    7172    void init();
    7273    void loadParams(const TiXmlElement* root);
     74    void loadWeapons(const TiXmlElement* root);
     75
     76    void setSlotCount(int nrOfSlots);
    7377
    7478    void addWeapon(Weapon* weapon, int configID = W_CONFIG0, int slotID = W_FREE_SLOT);
     
    8185
    8286  private:
     87    Crosshair*            crosshair;               //!< an aim.
     88
    8389    int                   nrOfSlots;               //<! number of weapon slots a ship has
    8490    int                   currConfID;              //<! the currently selected config
Note: See TracChangeset for help on using the changeset viewer.