Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/vs-enhencements/src/world_entities/weapons/weapon_manager.h @ 10669

Last change on this file since 10669 was 10669, checked in by nicolasc, 17 years ago

some modularisaztion hacking
hardlinked armor to WE Health

File size: 5.5 KB
Line 
1/*!
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.
10 */
11
12#ifndef _WEAPON_MANAGER_H
13#define _WEAPON_MANAGER_H
14
15#include "base_object.h"
16
17#include "crosshair.h"
18#include "weapon.h"
19
20#include "count_pointer.h"
21#include "ammo_container.h"
22
23
24// FORWARD DECLARATION
25template <class T> class tAnimation;
26class WeaponSlot;
27
28#define    WM_MAX_SLOTS            10             //!< How many slots the WeaponManager has at its max
29#define    WM_MAX_CONFIGS          4              //!< The maximum number of predefined Configurations
30#define    WM_MAX_LOADED_WEAPONS   20             //!< The
31
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.
39 * 2. define weapons. connect them to the WeaponManager's configurations (have a look at "player.cc", to see how it works)
40 * 3. go on and run :)....
41 */
42class WeaponManager : public BaseObject {
43  ObjectListDeclaration(WeaponManager);
44
45  public:
46    WeaponManager(WorldEntity* parent);
47    WeaponManager(const TiXmlElement* root);
48    virtual ~WeaponManager();
49
50    void init();
51    virtual void loadParams(const TiXmlElement* root);
52    void loadWeapons(const TiXmlElement* root);
53
54    void showCrosshair();
55    void hideCrosshair();
56    void setRotationSpeed(float speed);
57
58    void setSlotCount(unsigned int slotCount);
59    unsigned int getSlotCount() const { return this->slotCount; };
60    // setting up the WeaponManager with the following functions
61    void setSlotPosition(int slot, const Vector& position, PNode* parent = NULL);
62//     inline void setSlotPosition(float slot, float x, float y,float z) {setSlotPosition((int)slot, Vector(x,y,z));};
63    void setSlotDirection(int slot, const Quaternion& rotation);
64    /** @param slot the slot to get the relative position from @returns the relative position of the Carrier to the Slot */
65    const Vector& getSlotPosition(int slot) const;
66    void setSlotCapability(int slot, unsigned long slotCapability);
67    /** @param slot the slot to get the capabilities from @returns the capabilies */
68    long getSlotCapability(int slot) const;
69
70    void setParentEntity(WorldEntity* parent);
71    WorldEntity* getParentEntity() const { return this->parentEntity; };
72
73    void setParentNode(PNode* node);
74    /** @returns the Parent (carrier) of this WeaponManager */
75    PNode* getParentNode() const { return this->parentNode; };
76
77    bool addWeapon(Weapon* weapon, int configID = -1, int slotID = -1);
78    void removeWeapon(Weapon* weapon, int configID = -1);
79
80    inline void createWeaponSlot(int slot, float x, float y, float z, long capability) {
81        this->setSlotPosition(slot, Vector( x, y, z));
82        this->setSlotCapability(slot, capability); };
83
84    inline void addWeaponToSlot(int config, int slot, const std::string& weaponName){
85      this->addWeapon( Weapon::createWeapon( weaponName ), config, slot); };
86
87
88    Weapon* getWeapon(int slotID) const;
89
90    // FIXME ::
91//    bool hasFreeSlot(int configID, long capability = WTYPE_ALL) { return ( getNextFreeSlot(configID, capability ) != -1)? true : false; };
92
93    void nextWeaponConfig();
94    void previousWeaponConfig();
95    void changeWeaponConfig(int weaponConfig);
96
97    float increaseAmmunition(const ClassID& projectileType, float ammo);
98    float increaseAmmunition(const Weapon* weapon, float ammo);
99
100    /** @returns a fixed target namely the Crosshair's 3D position */
101    inline PNode* getFixedTarget() const { return this->crosshair; };
102
103    void fire();
104    //! @TODO: implement this function (maybe also in Weapon itself)
105    void releaseFire();
106    //inline void setFire() { this->bFire = true; };
107
108    void tick(float dt);
109    void draw() const;
110
111    void debug() const;
112
113 // private:
114    int getNextFreeSlot(int configID, long capability = WTYPE_ALL);
115    CountPointer<AmmoContainer>& getAmmoContainer(const ClassID& projectileType);
116    CountPointer<AmmoContainer>& getAmmoContainer(const Weapon* weapon);
117
118  private:
119    WorldEntity*            parentEntity;                             //!< The parent, this WeaponManager is connected to.
120    PNode*                  parentNode;                               //!< The parented Node the WeaponManager is connected to. (by default == parentEntity).
121
122    int                     slotCount;                                //!< number of weapon slots the ship has.
123    int                     currentConfigID;                          //!< the currently selected config.
124    Weapon*                 configs[WM_MAX_CONFIGS][WM_MAX_SLOTS];    //!< An array of predefined configurations and assigned weapon.
125    WeaponSlot*             currentSlotConfig[WM_MAX_SLOTS];          //!< The currentConfigureation.
126
127    Weapon*                 availiableWeapons[WM_MAX_LOADED_WEAPONS]; //!< The availiable Weapons of this WeaponManager
128
129    bool                    weaponChange;
130
131    Crosshair*              crosshair;                                //!< an aim.
132    tAnimation<Crosshair>*  crossHairSizeAnim;                        //!< An animation for the crosshair (scaling)
133
134    std::vector<CountPointer<AmmoContainer> > ammo;                   //!< Containers
135
136    bool                    bFire;
137};
138
139
140#endif /* _WEAPON_MANAGER_H */
Note: See TracBrowser for help on using the repository browser.