Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jul 8, 2005, 7:02:18 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: moved the weaponManager out of Weapon
we have files enough. one more is not too much :)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/world_entities/weapons/weapon.cc

    r4758 r4826  
    1 
    21
    32/*
     
    1110   any later version.
    1211
    13    ### File Specific
     12### File Specific
    1413   main-programmer: Patrick Boenzli
    1514   co-programmer:
    1615*/
    1716
    18 #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
    19 
     17#include "weapon_manager.h"
    2018#include "weapon.h"
    2119#include "stdincl.h"
     
    2725#include "world.h"
    2826
    29 using namespace std;
    30 
    31 
    32 
    33 /**
    34    \brief this initializes the weaponManager for a given nnumber of weapon slots
    35    \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 are
    56      worldentities and therefore in the entities list of the world.
    57      world will clean them up for me
    58   */
    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 slot
    70    \param the weapon to add
    71    \param an identifier for the slot: number between 0..7 if not specified: slotID=next free slot
    72    \param an identifier for the weapon configuration, number between 0..3
    73 
    74    if you add explicitly a weapon at config:n, slot:m, the weapon placed at this location will be
    75    replaced by the weapon specified. if you use the W_FREE_SLOT, the manager will look for a free
    76    slot in this weaponconfiguration. if there is non, the weapon won't be added and there will be
    77    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 configuration
    108 
    109    if there are multiple weapon configurations defined by the manager, use this to switch between them
    110    this function will deactivate the weapons first, change the config and reactivate them later
    111 */
    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       else
    134         {
    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 weaponconfig
    153 */
    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 weaponconfig
    167    \param second passed since last tick
    168 */
    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 weaponconfig
    182 */
    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 weaponconfig
    196    \param the selected weaponconfig
    197 */
    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 
    21327/**
    21428   \brief standard constructor
Note: See TracChangeset for help on using the changeset viewer.