#ifndef _MISC_PLAYER_IMMUNITY_HPP_
#define _MISC_PLAYER_IMMUNITY_HPP_

// ------------------------------------------------------------------------------------------------
#include "Common.hpp"

// ------------------------------------------------------------------------------------------------
namespace SqMod {

/* ------------------------------------------------------------------------------------------------
 * ...
*/
struct CPlayerImmunity
{
    /* --------------------------------------------------------------------------------------------
     * ...
    */
    CPlayerImmunity();

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    CPlayerImmunity(SQInt32 flags);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    CPlayerImmunity(const CPlayerImmunity & x);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    CPlayerImmunity(CPlayerImmunity && x);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    ~CPlayerImmunity();

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    CPlayerImmunity & operator = (const CPlayerImmunity & x);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    CPlayerImmunity & operator = (CPlayerImmunity && x);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool operator == (const CPlayerImmunity & x) const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool operator != (const CPlayerImmunity & x) const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool operator < (const CPlayerImmunity & x) const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool operator > (const CPlayerImmunity & x) const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool operator <= (const CPlayerImmunity & x) const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool operator >= (const CPlayerImmunity & x) const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    SQInteger Cmp(const CPlayerImmunity & x) const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    operator SQInt32 () const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    operator bool () const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    SQInt32 GetFlags() const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void SetFlags(SQInt32 flags);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    CPlayerImmunity & SetnGet(SQInt32 flags);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void Apply(const CPlayer & player) const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool GetBullet() const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void SetBullet(bool toggle);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool GetFire() const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void SetFire(bool toggle);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool GetExplosion() const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void SetExplosion(bool toggle);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool GetCollision() const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void SetCollision(bool toggle);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    bool GetMelee() const;

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void SetMelee(bool toggle);

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void EnableAll();

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    void DisableAll();

protected:

    /* --------------------------------------------------------------------------------------------
     * ...
    */
    SQInt32 m_Flags;
};

} // Namespace:: SqMod

#endif // _MISC_PLAYER_IMMUNITY_HPP_