Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Version 5 (modified by bensch, 20 years ago) (diff)

added resourceManager

Module Description

How to use certain modules in the Orxonox Framework [br] Currently we have following modules descriptions here:

  • list (list.h)
  • ResourceManager (resource_manager.h)

list

There is a list template called "tList" use it as follows:

Use in Functions without Global Reference

It you just want to create a new list and just quickly use it make it as follows:

#include "list.h"                           /* include the header */
#include "debug.h"                          /* for use of PRINTF */
.
.
.
tList<char>* nameList = new tList<char>(); /* create the new list*/

nameList->add("Pumba");                     /* add some elements*/
nameList->add("Mogli");
nameList->add("Timon");

tIterator<char>* nameIterator = nameList->getIterator(); /* get the iterator - JAVA style */
char name* = nameIterator->nextElement();   /* this returns the FIRST element */
while( name != NULL)                        /* nextElement() will return NULL at the end */
{
  PRINTF(3)("found name: %s in list\n", name);
  name = nameIterator->nextElement();       /* give back the next element or NULL if last */
}
delete nameIterator;                        /* don't forget to delete the iterator reference again
.
.

This code will have an output like this:

found name: Pumpa in list
found name: Mogli in list
found name: Timon in list

You can make lists of whatever you want eg also from WorldEntities:

#include "list.h"
.
.
tList<WorldEntity>* entityList = new tList<WorldEntity>();  /* crete new list*/
entityList->add(new WorldEntity());                         /* just adds an new entity */
.
.

And you can make Lists of Lists :))

#include "list.h"
.
.
tList<char>* nameList = new tList<char>();
tList<tList<char> >* nameListList = new tList<tList<char> >(); /* don't forget the space (_): >_> 
                                                                  otherwhise it will be interpreted 
                                                                  as an operator 
                                                               */
.
.

Now I hear you screem: "ENOUGH"! And you are right…:)

Use in Header Files

If you want a list as a class attribute you have to make a forward declaration of the list:

#inlcude "list.h"                 /* include the header of the list */

template<class T> class tList;    /* forward declaration of the list */

class ExampleClass
{
 private:
  tList<>
};

Resource Manager

There is a filehandler, that loades stores and unloades resources, like .obj-models, wav's, ogg's, textures and so on

usage in a WorldEntity like the Player

#include "resource_manager.h"     /* includes the headers of the ResourceManager */

Player::Player()         /* in the initialisation we load the module */
{
  .
  .
  .
  /* the following loads an OBJ-file named models/reaplow.obj
   * The type is OBJ (if no type is specified the model will try to determine it for itself)
   * RP_CAMPAIGN tells the ResourceManager when, and if it will be allowed to delete the Model
  */
  this->model = (Model*)ResourceManager::load("models/reaplow.obj", OBJ, RP_CAMPAIGN);
}

Player::~Player()
{
   /* here we would unload the Resource, that we allocated, but because WorldEntity
    * is doing it anyway, we do not have to concern ourselves with this.
    * But one could do something like: ResourceManager::unload(this->model); to do it
   */
}

/* and thats it */

settings

As we see in the Player::Player() example, there are some options to be considered when allocating a resource:

RESOURCE TYPES: different types known to the resourceManager

/**
   OBJ: a .obj-file
   PRIM: a Model primitive (CUBE, CYLINDER, SPHERE and so on...)
   WAV: a wave-file
   OGG: i think you get it
*/
enum ResourceType {OBJ, PRIM, WAV, MP3, OGG, IMAGE};

RESOURCE PRIORITIES: different unload-stages

/**
   RP_NO: will be unloaded on request
   RP_LEVEL: will be unloaded at the end of a Level
   RP_CAMPAIGN: will be unloaded at the end of a Campaign
   RP_GAME: will be unloaded at the end of the whole Game (when exiting orxonox)
*/
enum ResourcePriority {RP_NO = 0, RP_LEVEL = 1, RP_CAMPAIGN = 2, RP_GAME = 3};