/*
**  Copyright (C) 1996, 1997 Microsoft Corporation. All Rights Reserved.
**
**  File:	cloakIGC.h
**
**  Author: 
**
**  Description:
**      Header for the CcloakIGC class. This file was initially created by
**  the ATL wizard.
**
**  History:
*/
// cloakIGC.h : Declaration of the CcloakIGC

#ifndef __CLOAKIGC_H_
#define __CLOAKIGC_H_

/////////////////////////////////////////////////////////////////////////////
// CcloakIGC
class CcloakIGC : public IcloakIGC
{
    public:
        CcloakIGC(void);

// IbaseIGC
        virtual HRESULT Initialize(ImissionIGC* pMission, Time now, const void* data, int dataSize);
        virtual void    Terminate(void);
        virtual void    Update(Time now);

        virtual ObjectType  GetObjectType(void) const
        {
            return OT_cloak;
        }

        virtual ImissionIGC*    GetMission(void) const
        {
            return m_pMission;
        }

// IpartIGC
        virtual EquipmentType    GetEquipmentType(void) const
        {
            return ET_Cloak;
        }

        virtual IpartTypeIGC*    GetPartType(void) const
        {
            return m_partType;
        }

        virtual IshipIGC*        GetShip(void) const
        {
            return m_ship;
        }
        virtual void             SetShip(IshipIGC* newVal, Mount mount);

        virtual Mount            GetMountID(void) const
        {
            return m_mountID;
        }
        virtual void             SetMountID(Mount newVal);

        virtual bool             fActive(void) const
        {
            return (m_mountID == 0);
        }

        virtual void             Activate(void)
        {
            assert (m_ship);
            if (!m_fActive)
            {
                m_ship->ChangeSignature(m_typeData->signature);
                m_fActive = true;

                m_cloaking = 0.0f;
				assert (m_ship->GetCloaking() == 1.0f);
            }
        }
        virtual void             Deactivate(void)
        {
            assert (m_ship);

            if (m_fActive)
            {
                m_ship->ChangeSignature(-m_typeData->signature);
                m_fActive = false;

                m_ship->SetCloaking(1.0f);  //1.0 - m_cloaking
            }
        }
        virtual float            GetMass(void) const
        {
            return m_typeData->mass;
        }

        virtual Money            GetPrice(void) const
        {
            return m_typeData->price;
        }

        virtual float    GetMountedFraction(void) const
        {
            return m_mountedFraction;
        }
        virtual void     SetMountedFraction(float f)
        {
            m_mountedFraction = f;
        }

        virtual void    Arm(void)
        {
            m_mountedFraction = 1.0f;
        }

    // IcloakIGC
        virtual float    GetEnergyConsumption(void) const
        {
            return m_typeData->energyConsumption;
        }
        virtual float    GetMaxCloaking(void) const
        {
            return m_typeData->maxCloaking; 
            /*
            return m_ship
                   ? (m_typeData->rateRegen * m_ship->GetSide()->GetGlobalAttributeSet().GetAttribute(c_gaRegenerationShield))
                   : m_typeData->rateRegen;
            */
        }
        virtual float    GetOnRate(void) const
        {
            return m_typeData->onRate; 
        }
        virtual float    GetOffRate(void) const
        {
            return m_typeData->offRate; 
        }

        virtual SoundID  GetEngageSound() const
        {
            return m_typeData->engageSound;
        }
        virtual SoundID  GetDisengageSound() const
        {
            return m_typeData->disengageSound;
        }

    private:
        const DataCloakTypeIGC*     m_typeData;
        IpartTypeIGC*               m_partType;
        IshipIGC*                   m_ship;
        ImissionIGC*                m_pMission;

        float                       m_cloaking;
        float                       m_mountedFraction;

        Mount                       m_mountID;
        bool                        m_fActive;
};

#endif //__CLOAKIGC_H_