////////////////////////////////////////////////// //Created by Erik of the GameLogic team ////////////////////////////////////////////////// #ifndef ATTATCHMENTMASSDRIVER_H #define ATTATCHMENTMASSDRIVER_H #include "IAttatchment.h" namespace GameLogic { const Oyster::Math::Float StandardMaxEnergy = 100.0f; const Oyster::Math::Float StandardrechargeRate = 0.5f; const Oyster::Math::Float Standardforce = 2000.0f; class AttatchmentMassDriver : public IAttatchment { public: AttatchmentMassDriver(void); AttatchmentMassDriver(Player &owner); ~AttatchmentMassDriver(void); void UseAttatchment(const WEAPON_FIRE &usage, float dt); void Update(float dt); private: /******************************************************** * Pushes objects and players in a cone in front of the player * @param usage: allows switching on different functionality in this specific function ********************************************************/ void ForcePush(const WEAPON_FIRE &usage, float dt); /******************************************************** * Pulls the player forward, this is a movement tool * @param usage: allows switching on different functionality in this specific function ********************************************************/ void ForceZip(const WEAPON_FIRE &usage, float dt); /******************************************************** * Sucks objects towards the player, the player can then pick up an object and throw it as a projectile * @param usage: allows switching on different functionality in this specific function ********************************************************/ void ForcePull(const WEAPON_FIRE &usage, float dt); /******************************************************** * Sucks objects towards the player, the player can then pick up an object and throw it as a projectile * @param usage: allows switching on different functionality in this specific function ********************************************************/ void PickUpObject(const WEAPON_FIRE &usage, float dt); static void ForcePushAction(Oyster::Physics::ICustomBody *obj, void* args); static void AttemptPickUp(Oyster::Physics::ICustomBody *obj, void* args); private: Oyster::Physics::ICustomBody *heldObject; bool hasObject; Oyster::Math::Float force; Oyster::Math::Float maxEnergy; Oyster::Math::Float currentEnergy; Oyster::Math::Float energyChange; // variable used to limit energy update messages Oyster::Math::Float rechargeRate; struct Aim { }; }; } #endif