#ifndef __STATIONTYPEIGC_H_
#define __STATIONTYPEIGC_H_
class CstationTypeIGC : public IstationTypeIGC
{
public:
CstationTypeIGC(void)
:
m_pstSuccessor(NULL)
{
}
~CstationTypeIGC(void)
{
}
public:
virtual HRESULT Initialize(ImissionIGC* pMission, Time now, const void* data, int dataSize);
virtual void Terminate(void);
virtual int Export(void* data) const;
virtual ObjectType GetObjectType(void) const
{
return OT_stationType;
}
virtual ObjectID GetObjectID(void) const
{
return m_data.stationTypeID;
}
virtual const void* GetData(void) const
{
return &m_data;
}
virtual const char* GetModelName(void) const
{
return m_data.modelName;
}
virtual const char* GetName(void) const
{
return m_data.name;
}
virtual const char* GetDescription(void) const
{
return m_data.description;
}
virtual Money GetPrice(void) const
{
return m_data.price;
}
virtual BuyableGroupID GetGroupID(void) const
{
return m_data.groupID;
};
virtual const TechTreeBitMask& GetRequiredTechs(void) const
{
return m_data.ttbmRequired;
}
virtual const TechTreeBitMask& GetEffectTechs(void) const
{
return m_data.ttbmEffects;
}
virtual DWORD GetTimeToBuild(void) const
{
return m_data.timeToBuild;
}
virtual float GetSignature(void) const
{
return m_data.signature;
}
virtual float GetRadius(void) const
{
return m_data.radius;
}
virtual float GetScannerRange(void) const
{
return m_data.scannerRange;
}
virtual HitPoints GetMaxArmorHitPoints(void) const
{
return m_data.maxArmorHitPoints;
}
virtual DefenseTypeID GetArmorDefenseType(void) const
{
return m_data.defenseTypeArmor;
}
virtual HitPoints GetMaxShieldHitPoints(void) const
{
return m_data.maxShieldHitPoints;
}
virtual DefenseTypeID GetShieldDefenseType(void) const
{
return m_data.defenseTypeShield;
}
virtual float GetArmorRegeneration(void) const
{
return m_data.armorRegeneration;
}
virtual float GetShieldRegeneration(void) const
{
return m_data.shieldRegeneration;
}
virtual Money GetIncome(void) const
{
return m_data.income;
}
virtual const TechTreeBitMask& GetLocalTechs(void) const
{
return m_data.ttbmLocal;
}
virtual StationAbilityBitMask GetCapabilities(void) const
{
return m_data.sabmCapabilities;
}
bool HasCapability(StationAbilityBitMask sabm) const
{
return (m_data.sabmCapabilities & sabm) != 0;
}
virtual const char* GetTextureName(void) const
{
return m_data.textureName;
}
virtual const char* GetBuilderName(void) const
{
return m_data.builderName;
}
virtual const char* GetIconName(void) const
{
return m_data.iconName;
}
virtual IstationTypeIGC* GetSuccessorStationType(const IsideIGC* pside)
{
if (m_pstSuccessor != NULL)
{
if (m_pstSuccessor->GetRequiredTechs() <= (m_data.ttbmRequired |
pside->GetDevelopmentTechs()))
return m_pstSuccessor->GetSuccessorStationType(pside);
}
return this;
}
virtual AsteroidAbilityBitMask GetBuildAABM(void) const
{
return m_data.aabmBuild;
}
virtual int GetLaunchSlots(void) const
{
return m_nLaunchSlots;
}
virtual const Vector& GetLaunchPosition(int slotID) const
{
assert (slotID >= 0);
assert (slotID < m_nLaunchSlots);
return m_positionLaunches[slotID];
}
virtual const Vector& GetLaunchDirection(int slotID) const
{
assert (slotID >= 0);
assert (slotID < m_nLaunchSlots);
return m_directionLaunches[slotID];
}
virtual int GetLandSlots(void) const
{
return m_nLandSlots;
}
virtual int GetCapLandSlots(void) const
{
return m_nCapLandSlots;
}
virtual int GetLandPlanes(int slotID) const
{
assert (slotID >= 0);
assert (slotID < m_nLandSlots);
return m_nLandPlanes[slotID];
}
virtual const Vector& GetLandPosition(int slotID, int planeID) const
{
assert (slotID >= 0);
assert (slotID < m_nLandSlots);
assert (planeID >= 0);
assert (planeID <= m_nLandPlanes[slotID]);
return m_positionLandPlanes[slotID][planeID];
}
virtual const Vector& GetLandDirection(int slotID, int planeID) const
{
assert (slotID >= 0);
assert (slotID < m_nLandSlots);
assert (planeID >= 0);
assert (planeID <= m_nLandPlanes[slotID]);
return m_directionLandPlanes[slotID][planeID];
}
virtual SoundID GetInteriorSound() const
{
return m_data.interiorSound;
}
virtual SoundID GetInteriorAlertSound() const
{
return m_data.interiorAlertSound;
}
virtual SoundID GetExteriorSound() const
{
return m_data.exteriorSound;
}
virtual SoundID GetConstructorNeedRockSound() const
{
return m_data.constructorNeedRockSound;
}
virtual SoundID GetConstructorUnderAttackSound() const
{
return m_data.constructorUnderAttackSound;
}
virtual SoundID GetConstructorDestroyedSound() const
{
return m_data.constructorDestroyedSound;
}
virtual SoundID GetCompletionSound() const
{
return m_data.completionSound;
}
virtual SoundID GetUnderAttackSound() const
{
return m_data.underAttackSound;
}
virtual SoundID GetCriticalSound() const
{
return m_data.criticalSound;
}
virtual SoundID GetDestroyedSound() const
{
return m_data.destroyedSound;
}
virtual SoundID GetCapturedSound() const
{
return m_data.capturedSound;
}
virtual SoundID GetEnemyCapturedSound() const
{
return m_data.enemyCapturedSound;
}
virtual SoundID GetEnemyDestroyedSound() const
{
return m_data.enemyDestroyedSound;
}
virtual StationClassID GetClassID() const
{
return m_data.classID;
}
virtual IdroneTypeIGC* GetConstructionDroneType(void) const
{
return m_pdtConstruction;
}
private:
ImissionIGC* m_pMission;
DataStationTypeIGC m_data;
IdroneTypeIGC* m_pdtConstruction;
IstationTypeIGC* m_pstSuccessor;
int m_nLaunchSlots;
Vector m_positionLaunches[c_maxLaunchSlots];
Vector m_directionLaunches[c_maxLaunchSlots];
int m_nLandSlots;
int m_nCapLandSlots;
int m_nLandPlanes[c_maxLandSlots];
Vector m_positionLandPlanes[c_maxLandSlots][c_maxLandPlanes];
Vector m_directionLandPlanes[c_maxLandSlots][c_maxLandPlanes];
};
#endif