#ifndef __AFTERBURNERIGC_H_
#define __AFTERBURNERIGC_H_
class CafterburnerIGC : public IafterburnerIGC
{
public:
CafterburnerIGC(void);
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_afterburner;
}
virtual ImissionIGC* GetMission(void) const
{
return m_pMission;
}
virtual EquipmentType GetEquipmentType(void) const
{
return ET_Afterburner;
}
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_fActive;
}
virtual void Activate(void)
{
assert (m_ship);
if (!m_fActive)
{
m_ship->ChangeSignature(m_typeData->signature);
m_fActive = true;
m_power = 0.0f;
}
}
virtual void Deactivate(void)
{
assert (m_ship);
if (m_fActive)
{
m_ship->ChangeSignature(-m_typeData->signature);
m_fActive = false;
m_power = 0.0f;
}
}
virtual void Reset()
{
}
virtual float GetMass(void) const
{
return m_typeData->mass;
}
virtual Money GetPrice(void) const
{
return m_typeData->price;
}
virtual float GetFuelConsumption(void) const
{
return m_typeData->fuelConsumption;
}
virtual float GetMaxThrust(void) const
{
return m_typeData->maxThrust;
}
virtual float GetOnRate(void) const
{
return m_typeData->onRate;
}
virtual float GetOffRate(void) const
{
return m_typeData->offRate;
}
virtual float GetPower(void) const
{
return m_power;
}
virtual void SetPower(float p)
{
assert (p >= 0.0f);
assert (p <= 1.0f);
if (p != 0.0f)
Activate();
m_power = p;
}
virtual void IncrementalUpdate(Time lastUpdate, Time now, bool bUseFuel);
virtual SoundID GetInteriorSound(void) const
{
return m_typeData->interiorSound;
}
virtual SoundID GetExteriorSound(void) const
{
return m_typeData->exteriorSound;
}
virtual float GetMountedFraction(void) const
{
return m_mountedFraction;
}
virtual void SetMountedFraction(float f)
{
m_mountedFraction = f;
if (f != 1.0f)
Deactivate();
}
virtual void Arm(void)
{
m_mountedFraction = 1.0f;
}
private:
ImissionIGC* m_pMission;
const DataAfterburnerTypeIGC* m_typeData;
IpartTypeIGC* m_partType;
IshipIGC* m_ship;
float m_power;
float m_mountedFraction;
Mount m_mountID;
bool m_fActive;
};
#endif