Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/world_entities/weapons/weapon_manager.h @ 10437

Last change on this file since 10437 was 10437, checked in by patrick, 17 years ago

weapon slot is now moved outside

File size: 5.0 KB
RevLine 
[4826]1/*!
[4954]2 * @file weapon_manager.h
3 * every big WorldEntity has the ability to carry many different Weapons.
4 * for this to be easy there is the WeaponManager, that handels these weapons,
5 * and changes between them.
6 *
7 *
8 *
9 * @TODO 1. WeaponManager should also handle a List of availiableWeapons.
[4826]10 */
11
[6444]12#ifndef _WEAPON_MANAGER_H
13#define _WEAPON_MANAGER_H
14
[4826]15#include "base_object.h"
16
[4955]17#include "crosshair.h"
[4959]18#include "weapon.h"
[4826]19
[6669]20#include "count_pointer.h"
21#include "ammo_container.h"
22
[10437]23
[4826]24// FORWARD DECLARATION
[4837]25template <class T> class tAnimation;
[10437]26class WeaponSlot;
[4826]27
[5435]28#define    WM_MAX_SLOTS            10             //!< How many slots the WeaponManager has at its max
[4951]29#define    WM_MAX_CONFIGS          4              //!< The maximum number of predefined Configurations
30#define    WM_MAX_LOADED_WEAPONS   20             //!< The
[4826]31
[4953]32//! This is a special class, that can handle many different Weapons of a ship/man/whatever.
33/**
34 * this class is designed to interactively changeing multiple weapons (or just one),
35 * and to allow the Weapon itself to enable/disable itself.
36 *
37 * How to configure
38 * 1. set the default values.
[4972]39 * 2. define weapons. connect them to the WeaponManager's configurations (have a look at "player.cc", to see how it works)
[4953]40 * 3. go on and run :)....
41 */
[4826]42class WeaponManager : public BaseObject {
[9869]43  ObjectListDeclaration(WeaponManager);
[6055]44
[4826]45  public:
[6142]46    WeaponManager(WorldEntity* parent);
[4826]47    WeaponManager(const TiXmlElement* root);
[6981]48    virtual ~WeaponManager();
[4826]49
50    void init();
[6512]51    virtual void loadParams(const TiXmlElement* root);
[4834]52    void loadWeapons(const TiXmlElement* root);
[4826]53
[10368]54    void showCrosshair();
55    void hideCrosshair();
56    void setRotationSpeed(float speed);
57
[4964]58    void setSlotCount(unsigned int slotCount);
[6442]59    unsigned int getSlotCount() const { return this->slotCount; };
[4951]60    // setting up the WeaponManager with the following functions
[6803]61    void setSlotPosition(int slot, const Vector& position, PNode* parent = NULL);
[4969]62    void setSlotDirection(int slot, const Quaternion& rotation);
[4954]63    /** @param slot the slot to get the relative position from @returns the relative position of the Carrier to the Slot */
[10437]64    const Vector& getSlotPosition(int slot) const;
[4954]65    void setSlotCapability(int slot, long slotCapability);
66    /** @param slot the slot to get the capabilities from @returns the capabilies */
[10437]67    long getSlotCapability(int slot) const;
[4954]68
[8844]69    void setParentEntity(WorldEntity* parent);
70    WorldEntity* getParentEntity() const { return this->parentEntity; };
71
72    void setParentNode(PNode* node);
[4954]73    /** @returns the Parent (carrier) of this WeaponManager */
[8844]74    PNode* getParentNode() const { return this->parentNode; };
[4834]75
[6679]76    bool addWeapon(Weapon* weapon, int configID = -1, int slotID = -1);
[4951]77    void removeWeapon(Weapon* weapon, int configID = -1);
[6669]78
[10437]79    Weapon* getWeapon(int slotID) const;
[4951]80
[5750]81    // FIXME ::
82//    bool hasFreeSlot(int configID, long capability = WTYPE_ALL) { return ( getNextFreeSlot(configID, capability ) != -1)? true : false; };
[4955]83
[4954]84    void nextWeaponConfig();
[4952]85    void previousWeaponConfig();
86    void changeWeaponConfig(int weaponConfig);
[4826]87
[9869]88    float increaseAmmunition(const ClassID& projectileType, float ammo);
[10368]89    float increaseAmmunition(const Weapon* weapon, float ammo);
[6669]90
[4955]91    /** @returns a fixed target namely the Crosshair's 3D position */
[5750]92    inline PNode* getFixedTarget() const { return this->crosshair; };
93
[4826]94    void fire();
[5750]95    //! @TODO: implement this function (maybe also in Weapon itself)
96    void releaseFire();
[10368]97    //inline void setFire() { this->bFire = true; };
[4951]98
[4833]99    void tick(float dt);
[4951]100    void draw() const;
[4826]101
[4951]102    void debug() const;
103
[5750]104 // private:
[5440]105    int getNextFreeSlot(int configID, long capability = WTYPE_ALL);
[9869]106    CountPointer<AmmoContainer>& getAmmoContainer(const ClassID& projectileType);
[6972]107    CountPointer<AmmoContainer>& getAmmoContainer(const Weapon* weapon);
[4834]108
[4837]109  private:
[8844]110    WorldEntity*            parentEntity;                             //!< The parent, this WeaponManager is connected to.
111    PNode*                  parentNode;                               //!< The parented Node the WeaponManager is connected to. (by default == parentEntity).
[4826]112
[4954]113    int                     slotCount;                                //!< number of weapon slots the ship has.
114    int                     currentConfigID;                          //!< the currently selected config.
115    Weapon*                 configs[WM_MAX_CONFIGS][WM_MAX_SLOTS];    //!< An array of predefined configurations and assigned weapon.
[10437]116    WeaponSlot*             currentSlotConfig[WM_MAX_SLOTS];          //!< The currentConfigureation.
[4949]117
[4954]118    Weapon*                 availiableWeapons[WM_MAX_LOADED_WEAPONS]; //!< The availiable Weapons of this WeaponManager
[4951]119
120    bool                    weaponChange;
121
[4954]122    Crosshair*              crosshair;                                //!< an aim.
123    tAnimation<Crosshair>*  crossHairSizeAnim;                        //!< An animation for the crosshair (scaling)
[6669]124
125    std::vector<CountPointer<AmmoContainer> > ammo;                   //!< Containers
[10368]126
127    bool                    bFire;
[4826]128};
[6444]129
130
131#endif /* _WEAPON_MANAGER_H */
Note: See TracBrowser for help on using the repository browser.