123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- /*
- ** Copyright (C) 1996, 1997 Microsoft Corporation. All Rights Reserved.
- **
- ** File: dispenserIGC.h
- **
- ** Author:
- **
- ** Description:
- ** Header for the CdispenserIGC class. This file was initially created by
- ** the ATL wizard.
- **
- ** History:
- */
- // dispenserIGC.h : Declaration of the CdispenserIGC
- #ifndef __DISPENSERIGC_H_
- #define __DISPENSERIGC_H_
- /////////////////////////////////////////////////////////////////////////////
- // CdispenserIGC
- class CdispenserIGC : public IdispenserIGC
- {
- public:
- CdispenserIGC(void);
- ~CdispenserIGC(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_dispenser;
- }
- virtual ImissionIGC* GetMission(void) const
- {
- return m_pMission;
- }
- // IpartIGC
- virtual EquipmentType GetEquipmentType(void) const
- {
- return m_expendableType->GetEquipmentType();
- }
- 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_expendableType->GetLauncherDef()->signature);
- m_timeLoaded = m_ship->GetLastUpdate() + ((1.0f/m_pMission->GetFloatConstant(c_fcidMountRate)) + m_expendableType->GetLoadTime());
- }
- virtual void Deactivate(void)
- {
- m_ship->ChangeSignature(-m_expendableType->GetLauncherDef()->signature);
- }
- virtual float GetMass(void) const
- {
- return m_amount * m_expendableType->GetMass();
- }
- virtual Money GetPrice(void) const
- {
- return ((Money)m_amount) * m_expendableType->GetLauncherDef()->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_timeLoaded = m_ship->GetLastUpdate();
- }
- // IlauncherIGC
- virtual void SetAmount(short a)
- {
- {
- short maxAmount = m_partType->GetAmount(m_ship);
- if (a > maxAmount)
- a = maxAmount;
- }
- if (a != m_amount)
- {
- //Adjust the mass of the ship (if there is one) to account for the change in the number of mines
- if (m_ship)
- {
- m_ship->SetMass(m_ship->GetMass() +
- (a - m_amount) * m_expendableType->GetMass());
- m_pMission->GetIgcSite()->LoadoutChangeEvent(m_ship, this, c_lcQuantityChange);
- }
- m_amount = a;
- }
- }
- virtual short GetAmount(void) const
- {
- return m_amount;
- }
- virtual void SetTimeFired(Time now)
- {
- m_timeLoaded = now + m_expendableType->GetLoadTime();
- }
- virtual Time GetTimeLoaded(void) const
- {
- return m_timeLoaded;
- }
- virtual void SetTimeLoaded(Time tl)
- {
- m_timeLoaded = tl;
- }
- virtual void ResetTimeLoaded(void)
- {
- assert (m_ship);
- m_timeLoaded = m_ship->GetLastUpdate() + ((1.0f/m_pMission->GetFloatConstant(c_fcidMountRate)) + m_expendableType->GetLoadTime());
- }
- virtual const Vector& GetEmissionPt(void) const
- {
- return m_emissionPt;
- }
- // IdispenserIGC
- virtual IexpendableTypeIGC* GetExpendableType(void) const
- {
- return m_expendableType;
- }
- virtual float GetArmedFraction(void)
- {
- if (GetMountedFraction() < 1.0f)
- {
- return 0;
- }
- else
- {
- return 1.0f - max(0.0f, (m_timeLoaded - Time::Now()) / m_expendableType->GetLoadTime());
- }
- }
- private:
- ImissionIGC* m_pMission;
- IlauncherTypeIGC* m_partType;
- IexpendableTypeIGC* m_expendableType;
- IshipIGC* m_ship;
- Vector m_emissionPt;
- float m_mountedFraction;
- Time m_timeLoaded;
- short m_amount;
- Mount m_mountID;
- };
- #endif //__DISPENSERIGC_H_
|