Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 21, 2007, 12:44:02 AM (16 years ago)
Author:
rgrieder
Message:
  • modified the AmmunitionDump to hold different types of ammo
  • converted the RunManager into a Singleton
  • added some methods to address ammo by string
  • created a BaseWeapon class
  • derived BarrelGun from BaseWeapon
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/main_reto_vs05/src/weapon/ammunition_dump.cc

    r198 r232  
    2626 */
    2727
     28#include "run_manager.h"
     29
    2830#include "ammunition_dump.h"
    2931
     
    3234namespace weapon {
    3335
    34   AmmunitionDump::AmmunitionDump(int capacity)
    35         : stock_(0), capacity_(capacity)
     36  AmmunitionDump::AmmunitionDump()
     37    : numberOfAmmos_(RunManager::getSingletonPtr()->getNumberOfAmmos()),
     38      stock_(new int[numberOfAmmos_]),
     39      capacity_(new int[numberOfAmmos_])
    3640  {
     41    for (int i = 0; i < numberOfAmmos_; i++)
     42    {
     43      stock_[i] = 0;
     44      capacity_[i] = 0;
     45    }
    3746  }
    3847
     
    4049  AmmunitionDump::~AmmunitionDump()
    4150  {
     51    if (stock_)
     52      delete stock_;
     53    if (capacity_)
     54      delete capacity_;
     55  }
     56
     57  void AmmunitionDump::setDumpSize(const Ogre::String &name, int size)
     58  {
     59    if (size < 0)
     60      return;
     61    int id = RunManager::getSingletonPtr()->getAmmunitionID(name);
     62    if (id == -1)
     63      return;
     64    capacity_[id] = size;
    4265  }
    4366
    4467 
    45   void AmmunitionDump::store(int quantity)
     68  int AmmunitionDump::store(const Ogre::String &name, int quantity)
    4669  {
    47     stock_ += quantity;
    48     if (stock_ > capacity_)
    49       stock_ = capacity_;
     70    int id = RunManager::getSingletonPtr()->getAmmunitionID(name);
     71    if (id == -1)
     72      return quantity;
     73    stock_[id] += quantity;
     74    if (stock_[id] > capacity_[id])
     75    {
     76      quantity = capacity_[id] - stock_[id];
     77      stock_[id] = capacity_[id];
     78      return quantity;
     79    }
     80    else
     81      return 0;
    5082  }
    5183
    5284
    53   int AmmunitionDump::getAmmunition(int quantity)
     85  int AmmunitionDump::getAmmunition(const Ogre::String &name, int quantity)
    5486  {
    55     if (stock_ >= quantity)
    56     {
    57       stock_ -= quantity;
    58       return quantity;
    59     }
     87    int id = RunManager::getSingletonPtr()->getAmmunitionID(name);
     88    if (id == -1)
     89      return 0;
     90    if (stock_[id] >= quantity)
     91      stock_[id] -= quantity;
    6092    else
    6193    {
    62       quantity = stock_;
    63       stock_ = 0;
    64       return quantity;
     94      quantity = stock_[id];
     95      stock_[id] = 0;
    6596    }
     97    return quantity;
    6698  }
    6799
    68100
    69   int AmmunitionDump::getStockSize()
     101  int AmmunitionDump::getStockSize(const Ogre::String &name)
    70102  {
    71     return stock_;
     103    int id = RunManager::getSingletonPtr()->getAmmunitionID(name);
     104    if (id = -1)
     105      return -1;
     106    return stock_[id];
    72107  }
    73108}
Note: See TracChangeset for help on using the changeset viewer.