/* ** Copyright (C) 1996, 1997 Microsoft Corporation. All Rights Reserved. ** ** File: shieldIGC.h ** ** Author: ** ** Description: ** Header for the CshieldIGC class. This file was initially created by ** the ATL wizard. ** ** History: */ // shieldIGC.h : Declaration of the CshieldIGC #ifndef __SHIELDIGC_H_ #define __SHIELDIGC_H_ ///////////////////////////////////////////////////////////////////////////// // CshieldIGC class CshieldIGC : public IshieldIGC { public: CshieldIGC(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_shield; } virtual ImissionIGC* GetMission(void) const { return m_pMission; } // IpartIGC virtual EquipmentType GetEquipmentType(void) const { return ET_Shield; } 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) { m_ship->ChangeSignature(m_typeData->signature); } virtual void Deactivate(void) { m_ship->ChangeSignature(-m_typeData->signature); m_ship->GetHitTest()->SetShape(c_htsConvexHullMax); } 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; m_fraction = 1.0f; } // IshieldIGC virtual float GetRegeneration(void) const { return m_ship ? (m_typeData->rateRegen * m_ship->GetSide()->GetGlobalAttributeSet().GetAttribute(c_gaShieldRegenerationShip)) : m_typeData->rateRegen; } virtual float GetMaxStrength(void) const { return m_ship ? (m_typeData->maxStrength * m_ship->GetSide()->GetGlobalAttributeSet().GetAttribute(c_gaMaxShieldShip)) : m_typeData->maxStrength; } virtual DefenseTypeID GetDefenseType(void) const { return m_typeData->defenseType; } virtual float GetFraction(void) const { return m_fraction; } virtual void SetFraction(float newVal) { float down = m_pMission->GetFloatConstant(c_fcidDownedShield); if (newVal <= down) { if (newVal < 0.0f) newVal = 0.0f; if (m_fraction > down) m_ship->GetHitTest()->SetShape(c_htsConvexHullMax); } else { if (newVal > 1.0f) newVal = 1.0f; if (m_fraction <= down) m_ship->GetHitTest()->SetShape(c_htsEllipse); } m_fraction = newVal; } virtual float ApplyDamage(Time timeCollision, DamageTypeID type, float amount, const Vector& deltaP); private: const DataShieldTypeIGC* m_typeData; IpartTypeIGC* m_partType; IshipIGC* m_ship; ImissionIGC* m_pMission; float m_fraction; float m_mountedFraction; Mount m_mountID; }; #endif //__SHIELDIGC_H_