Changeset 4826 in orxonox.OLD for orxonox/trunk/src/world_entities/weapons/weapon.cc
- Timestamp:
- Jul 8, 2005, 7:02:18 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/trunk/src/world_entities/weapons/weapon.cc
r4758 r4826 1 2 1 3 2 /* … … 11 10 any later version. 12 11 13 12 ### File Specific 14 13 main-programmer: Patrick Boenzli 15 14 co-programmer: 16 15 */ 17 16 18 #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON 19 17 #include "weapon_manager.h" 20 18 #include "weapon.h" 21 19 #include "stdincl.h" … … 27 25 #include "world.h" 28 26 29 using namespace std;30 31 32 33 /**34 \brief this initializes the weaponManager for a given nnumber of weapon slots35 \param number of weapon slots of the model/ship <= 8 (limitied)36 */37 WeaponManager::WeaponManager(int nrOfSlots)38 {39 this->setClassID(CL_WEAPON_MANAGER, "WeaponManager");40 41 for(int i = 0; i < W_MAX_CONFIGS; ++i)42 {43 this->configs[i].bUsed = false;44 for(int j = 0; j < W_MAX_SLOTS; ++j)45 this->configs[i].slots[j] = NULL;46 }47 this->nrOfSlots = nrOfSlots;48 this->currConfID = W_CONFIG0;49 }50 51 52 WeaponManager::~WeaponManager()53 {54 /*55 i dont have to delete the weapons itself, because they are56 worldentities and therefore in the entities list of the world.57 world will clean them up for me58 */59 for(int i = 0; i < W_MAX_CONFIGS; ++i)60 {61 this->configs[i].bUsed = false;62 for(int j = 0; j < W_MAX_SLOTS; ++j)63 this->configs[i].slots[j] = NULL;64 }65 }66 67 68 /**69 \brief adds a weapon to the selected weaponconfiguration into the selected slot70 \param the weapon to add71 \param an identifier for the slot: number between 0..7 if not specified: slotID=next free slot72 \param an identifier for the weapon configuration, number between 0..373 74 if you add explicitly a weapon at config:n, slot:m, the weapon placed at this location will be75 replaced by the weapon specified. if you use the W_FREE_SLOT, the manager will look for a free76 slot in this weaponconfiguration. if there is non, the weapon won't be added and there will be77 a error message.78 */79 void WeaponManager::addWeapon(Weapon* weapon, int configID, int slotID)80 {81 if( slotID == W_FREE_SLOT)82 {83 int freeSlot = this->getNextFreeSlot( configID);84 if( freeSlot < 0 || freeSlot >= this->nrOfSlots)85 {86 PRINTF(0)("There is no free slot in this WeaponConfig to dock this weapon at! Aborting\n");87 return;88 }89 PRINTF(3)("Added new Weapon to Config:%i/Slot:%i\n", configID, freeSlot);90 this->configs[configID].bUsed = true;91 this->configs[configID].slots[freeSlot] = weapon;92 return;93 }94 this->configs[configID].bUsed = true;95 this->configs[configID].slots[slotID] = weapon;96 PRINTF(3)("Added a new Weapon to the WeaponManager: config %i/ slot %i\n", configID, slotID);97 }98 99 100 void WeaponManager::removeWeapon(Weapon* weapon, int configID)101 {102 /* empty */103 }104 105 106 /**107 \brief changes to the next weapon configuration108 109 if there are multiple weapon configurations defined by the manager, use this to switch between them110 this function will deactivate the weapons first, change the config and reactivate them later111 */112 void WeaponManager::nextWeaponConf()113 {114 PRINTF(4)("Changing weapon configuration: from %i to next\n", this->currConfID);115 116 int i, lastConfID;117 lastConfID = this->currConfID;118 for(i = this->currConfID + 1; i < W_MAX_CONFIGS && !this->configs[i].bUsed; ++i);119 if( i == W_MAX_CONFIGS) this->currConfID = W_CONFIG0;120 else this->currConfID = i;121 122 123 Weapon *w1, *w2;124 for(int j = 0; j < W_MAX_SLOTS; ++j)125 {126 w1 = this->configs[lastConfID].slots[j];127 w2 = this->configs[this->currConfID].slots[j];128 129 if( w1 == w2)130 {131 printf("no need for change\n");132 }133 else134 {135 if( w1 != NULL )136 {137 w1->deactivate();138 printf("deactivating %i,%i\n", j,lastConfID);139 }140 if( w2 != NULL)141 {142 w2->activate();143 printf("activating %i,%i\n", j, this->currConfID);144 }145 }146 }147 }148 149 150 151 /**152 \brief triggers fire of all weapons in the current weaponconfig153 */154 void WeaponManager::fire()155 {156 Weapon* firingWeapon;157 for(int i = 0; i < W_MAX_SLOTS; ++i)158 {159 firingWeapon = this->configs[this->currConfID].slots[i];160 if( firingWeapon != NULL) firingWeapon->fire();161 }162 }163 164 165 /**166 \brief triggers tick of all weapons in the current weaponconfig167 \param second passed since last tick168 */169 void WeaponManager::tick(float sec)170 {171 Weapon* w;172 for(int i = 0; i < W_MAX_SLOTS; ++i)173 {174 w = this->configs[this->currConfID].slots[i];175 if( w != NULL) w->tick(sec);176 }177 }178 179 180 /**181 \brief triggers draw of all weapons in the current weaponconfig182 */183 void WeaponManager::draw()184 {185 Weapon* w;186 for(int i = 0; i < W_MAX_SLOTS; ++i)187 {188 w = this->configs[this->currConfID].slots[i];189 if( w != NULL) w->draw();190 }191 }192 193 194 /**195 \brief private gets the next free slot in a certain weaponconfig196 \param the selected weaponconfig197 */198 int WeaponManager::getNextFreeSlot(int configID)199 {200 for( int i = 0; i < W_MAX_SLOTS; ++i)201 {202 if( this->configs[configID].slots[i] == NULL)203 return i;204 }205 return -1;206 }207 208 209 210 211 212 213 27 /** 214 28 \brief standard constructor
Note: See TracChangeset
for help on using the changeset viewer.