| 8 | | == list == |
| 9 | | There is a list template called "tList" use it as follows: |
| 10 | | |
| 11 | | === Use in Functions without Global Reference === |
| 12 | | It you just want to create a new list and just quickly use it make it as follows: |
| 13 | | {{{ |
| 14 | | #include "list.h" /* include the header */ |
| 15 | | #include "debug.h" /* for use of PRINTF */ |
| 16 | | . |
| 17 | | . |
| 18 | | . |
| 19 | | tList<char>* nameList = new tList<char>(); /* create the new list*/ |
| 20 | | |
| 21 | | nameList->add("Pumba"); /* add some elements*/ |
| 22 | | nameList->add("Mogli"); |
| 23 | | nameList->add("Timon"); |
| 24 | | |
| 25 | | tIterator<char>* nameIterator = nameList->getIterator(); /* get the iterator - JAVA style */ |
| 26 | | char name* = nameIterator->nextElement(); /* this returns the FIRST element */ |
| 27 | | while( name != NULL) /* nextElement() will return NULL at the end */ |
| 28 | | { |
| 29 | | PRINTF(3)("found name: %s in list\n", name); |
| 30 | | name = nameIterator->nextElement(); /* give back the next element or NULL if last */ |
| 31 | | } |
| 32 | | delete nameIterator; /* don't forget to delete the iterator reference again |
| 33 | | . |
| 34 | | . |
| 35 | | }}} |
| 36 | | This code will have an output like this: |
| 37 | | {{{ |
| 38 | | found name: Pumpa in list |
| 39 | | found name: Mogli in list |
| 40 | | found name: Timon in list |
| 41 | | }}} |
| 42 | | You can make lists of whatever you want eg also from WorldEntities: |
| 43 | | {{{ |
| 44 | | #include "list.h" |
| 45 | | . |
| 46 | | . |
| 47 | | tList<WorldEntity>* entityList = new tList<WorldEntity>(); /* crete new list*/ |
| 48 | | entityList->add(new WorldEntity()); /* just adds an new entity */ |
| 49 | | . |
| 50 | | . |
| 51 | | }}} |
| 52 | | And you can make Lists of Lists :)) |
| 53 | | {{{ |
| 54 | | #include "list.h" |
| 55 | | . |
| 56 | | . |
| 57 | | tList<char>* nameList = new tList<char>(); |
| 58 | | tList<tList<char> >* nameListList = new tList<tList<char> >(); /* don't forget the space (_): >_> |
| 59 | | otherwhise it will be interpreted |
| 60 | | as an operator |
| 61 | | */ |
| 62 | | . |
| 63 | | . |
| 64 | | }}} |
| 65 | | Now I hear you screem: "ENOUGH"! And you are right...:) |
| 66 | | |
| 67 | | === Use in Header Files === |
| 68 | | If you want a list as a class attribute you have to make a forward declaration of the list: |
| 69 | | {{{ |
| 70 | | |
| 71 | | #inlcude "list.h" /* include the header of the list */ |
| 72 | | |
| 73 | | template<class T> class tList; /* forward declaration of the list */ |
| 74 | | |
| 75 | | class ExampleClass |
| 76 | | { |
| 77 | | private: |
| 78 | | tList<> |
| 79 | | }; |
| 80 | | |
| 81 | | }}} |
| 82 | | |
| 83 | | == Resource Manager == |
| 84 | | There is a filehandler, that loades stores and unloades resources, like .obj-models, wav's, ogg's, textures and so on |
| 85 | | |
| 86 | | == usage in a WorldEntity like the Player == |
| 87 | | {{{ |
| 88 | | #include "resource_manager.h" /* includes the headers of the ResourceManager */ |
| 89 | | |
| 90 | | Player::Player() /* in the initialisation we load the module */ |
| 91 | | { |
| 92 | | . |
| 93 | | . |
| 94 | | . |
| 95 | | /* the following loads an OBJ-file named models/reaplow.obj |
| 96 | | * The type is OBJ (if no type is specified the model will try to determine it for itself) |
| 97 | | * RP_CAMPAIGN tells the ResourceManager when, and if it will be allowed to delete the Model |
| 98 | | */ |
| 99 | | this->model = (Model*)ResourceManager::load("models/reaplow.obj", OBJ, RP_CAMPAIGN); |
| 100 | | } |
| 101 | | |
| 102 | | Player::~Player() |
| 103 | | { |
| 104 | | /* here we would unload the Resource, that we allocated, but because WorldEntity |
| 105 | | * is doing it anyway, we do not have to concern ourselves with this. |
| 106 | | * But one could do something like: ResourceManager::unload(this->model); to do it |
| 107 | | */ |
| 108 | | } |
| 109 | | |
| 110 | | /* and thats it */ |
| 111 | | }}} |
| 112 | | |
| 113 | | == settings == |
| 114 | | As we see in the Player::Player() example, there are some options to be considered when |
| 115 | | allocating a resource: |
| 116 | | |
| 117 | | __RESOURCE TYPES__: different types known to the resourceManager |
| 118 | | {{{ |
| 119 | | /** |
| 120 | | OBJ: a .obj-file |
| 121 | | PRIM: a Model primitive (CUBE, CYLINDER, SPHERE and so on...) |
| 122 | | WAV: a wave-file |
| 123 | | OGG: i think you get it |
| 124 | | */ |
| 125 | | enum ResourceType {OBJ, PRIM, WAV, MP3, OGG, IMAGE}; |
| 126 | | }}} |
| 127 | | |
| 128 | | __RESOURCE PRIORITIES__: different unload-stages |
| 129 | | {{{ |
| 130 | | /** |
| 131 | | RP_NO: will be unloaded on request |
| 132 | | RP_LEVEL: will be unloaded at the end of a Level |
| 133 | | RP_CAMPAIGN: will be unloaded at the end of a Campaign |
| 134 | | RP_GAME: will be unloaded at the end of the whole Game (when exiting orxonox) |
| 135 | | */ |
| 136 | | enum ResourcePriority {RP_NO = 0, RP_LEVEL = 1, RP_CAMPAIGN = 2, RP_GAME = 3}; |
| 137 | | }}} |
| 138 | | |