Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10314 in orxonox.OLD for trunk/src/world_entities/world_entity.cc


Ignore:
Timestamp:
Jan 24, 2007, 12:45:39 AM (17 years ago)
Author:
patrick
Message:

merged branche mount_point to trunk. this will add mount point abilities, bsp transparency fix and some other smaller stuff to this trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/world_entities/world_entity.cc

    r10147 r10314  
    1212
    1313   ### File Specific:
    14    main-programmer: Patrick Boenzli, Benjamin Grauer
    15    co-programmer: Christian Meier
     14   main-programmer: Patrick Boenzli
     15   main-programmer: Benjamin Grauer
     16   co-programmer:   Christian Meier
    1617*/
    1718#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
     
    7374  this->scaling = 1.0f;
    7475  this->oiFile = NULL;
     76  // add 10 members to this array
     77  this->mountPoints.reserve(10);
    7578
    7679  /* OSOLETE */
     
    141144  .describe("the fileName of the model, that should be loaded onto this world-entity. (must be relative to the data-dir)")
    142145  .defaultValues("", 1.0f, 0);
     146
     147  LoadParam(root, "mountpoints", this, WorldEntity, loadMountPoints)
     148  .describe("the fileName of the object information file (optional)");
    143149
    144150  LoadParam(root, "maxHealth", this, WorldEntity, setHealthMax)
     
    204210      StaticModel* model = new StaticModel();
    205211      *model = ResourceOBJ(fileName, this->scaling);
     212
     213      // check if ther is a valid model and load other stuff
    206214      if (model->getVertexCount() > 0)
    207215      {
    208216        this->setModel(model, modelNumber);
    209         if( modelNumber == 0 /* FIXME && !this->isA(CL_WEAPON) */)
     217
     218        if( modelNumber == 0)
     219        {
    210220          this->buildObbTree(obbTreeDepth);
     221        }
    211222      }
    212223      else
    213224        delete model;
    214 
    215       // now get the object information file for this model, if any
    216       std::string oifName = fileName.substr(0, fileName.length() - 4) + ".oif";
    217       this->loadObjectInformationFile( oifName);
    218225    }
    219226    /// LOADING AN MD2-model
     
    269276 * @param fileName the name of the file
    270277 */
    271 void WorldEntity::loadObjectInformationFile(const std::string& fileName)
    272 {
    273   PRINTF(4)("loading the oif File: %s\n", fileName.c_str());
    274 
     278void WorldEntity::loadMountPoints(const std::string& fileName)
     279{
     280  PRINTF(5)("loading the oif File: %s\n", fileName.c_str());
     281
     282  // now load the object information file
    275283  this->oiFile = new ObjectInformationFile(fileName);
     284
     285  // get the model to load
     286  Model* model = this->getModel();
     287
     288  // extract the mount points
     289  model->extractMountPoints();
     290
     291  // first get all mount points from the model
     292  const std::list<mountPointSkeleton> mpList = model->getMountPoints();
     293  // for each skeleton create a mounting point world entity
     294  std::list<mountPointSkeleton>::const_iterator it = mpList.begin();
     295
     296  for( ; it != mpList.end(); it++)
     297  {
     298    // create the mount points world entity
     299    MountPoint* mp = new MountPoint( (*it).up, (*it).forward, (*it).center, (*it).name);
     300    // parent it to this WE
     301    mp->setParent( this);
     302    // now add to the right group
     303    mp->toList( (OM_LIST)(this->getOMListNumber()+1));
     304    // now get the number and add the mount point to the slot
     305    std::string nrStr = (*it).name.substr(3, 2);
     306    // add the mount point
     307    this->addMountPoint(atoi(nrStr.c_str()), mp);
     308
     309    // now fill the mount point
     310    mp->initMountPoint( this->oiFile->getMountPointDescription());
     311  }
     312
    276313}
    277314
     
    337374void WorldEntity::addMountPoint(int slot, MountPoint* mountPoint)
    338375{
    339   if( this->mountPoints[slot] != NULL)
    340   {
    341     PRINTF(0)("adding a mount point to a slot, that already exists! ignoring - maybe some object do not get connected well (object: %s)\n", this->getClassCName());
     376  if( this->mountPoints.capacity() < (unsigned int)slot)
     377  {
     378    // reserve 5 more slots than needed so this function is called as rare as possible
     379    this->mountPoints.reserve(slot + 5);
     380  }
     381  else if( this->mountPoints[slot] != NULL)
     382  {
     383    PRINTF(4)("adding a mount point to a slot, that already is occupied! ignoring - maybe some object did not get connected well (object: %s)\n", this->getClassCName());
    342384  }
    343385
     
    794836
    795837
     838
     839/**
     840 * draw the mounting points
     841 */
     842void WorldEntity::debugDrawMountPoints() const
     843{
     844
     845  std::vector<MountPoint*>::const_iterator it = this->mountPoints.begin();
     846  for( ; it < this->mountPoints.end(); it++)
     847  {
     848    if( (*it) != NULL)
     849    {
     850      (*it)->debugDraw();
     851    }
     852  }
     853}
     854
     855
    796856/**
    797857 * Debug the WorldEntity
Note: See TracChangeset for help on using the changeset viewer.